So also das mit der Uhrzeit funktioniert nun einwandfrei, allerdings klappt das auslesen in der ISR nicht.
Ich hab den SQW Pin der RTC direkt mit Pin B.2 verbunden. Der Plan ist nun gewesen, dass ich beim Mega32 an diesem Pin den Pull-Up aktiviere und den Interrupt und der SQW Pin der RTC auf 1Hz gestellt wird.
Das klappt allerdings nicht.
Mein Code ist folgender:
Code:
'Mikrocontroller
$regfile = "m32def.dat"
$crystal = 8000000

'Stackgröße festlegen
$hwstack = 200
$swstack = 200

'TWI konfigurieren
Config Sda = Portc.1
Config Scl = Portc.0
Config Twi = 100000                                         'TWI Frequenz

'Unterprogramme
Declare Sub Uhrzeit
Declare Sub Settime
Declare Sub Read_dcf
Declare Sub Enable_sqw

'Ports konfigurieren
Config Porta = Output                                       'Port für die Stunden
Config Portd = Output                                       'Port für die Minuten
Config Portb.2 = Output
Ds1307 Alias Pinb.2

Porta = 0
Portd = 0
Ds1307 = 1                                                  'Pull-Up aktivieren

'Variablen
Dim Zaehler As Byte
Dim _hour As Byte
Dim _min As Byte
Dim _sec As Byte
Dim _weekday As Byte
Dim _day As Byte
Dim _month As Byte
Dim _year As Byte
Dim Ds1307w As Byte
Dim Ds1307r As Byte
Dim Stunde As Byte
Dim Minute As Byte
Dim Sekunde As Byte

'Adresse der DS1307
Ds1307w = &HD0                                              'Schreibadresse der RTC
Ds1307r = &HD1                                              'Leseadresse der RTC

'Interrups aktivieren
Enable Interrupts

'Interrupts einstellen
On Int2 Ds1307_int
Config Int2 = Rising
Enable Int2

'Uhrzeit voreinstellen
_hour = 16
_min = 01
_sec = 00
'Call Settime

Call Enable_sqw                                             'SQW der RTC aktivieren

Do

'Call Uhrzeit

Porta = Zaehler
'Porta = Stunde
'Portd = Minute
Wait 1

Loop
End

'------------------------------------------------------------------------------

'RTC auslesen
Sub Uhrzeit
  I2cstart
  I2cwbyte Ds1307w                                          ' Schreibadresse senden
  I2cwbyte 0                                                ' Startadresse auf Register 0 setzen

  I2cstart
  I2cwbyte Ds1307r                                          ' Adresse übermitteln
  I2crbyte Sekunde , Ack
  I2crbyte Minute , Ack
  I2crbyte Stunde , Ack
  I2crbyte _weekday , Ack
  I2crbyte _day , Ack
  I2crbyte _month , Ack
  I2crbyte _year , Nack
  I2cstop
End Sub

'------------------------------------------------------------------------------

Sub Read_dcf

Return
End Sub

'------------------------------------------------------------------------------

Sub Enable_sqw
I2cstart
I2cwbyte &HD0
I2cwbyte 7
I2cwbyte &B00010001
I2cstop
End Sub

'------------------------------------------------------------------------------

Ds1307_int:

Incr Zaehler

Return

'------------------------------------------------------------------------------

Sub Settime
  _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
  I2cstart
  I2cwbyte Ds1307w
  I2cwbyte 0
  I2cwbyte _sec
  I2cwbyte _min
  I2cwbyte _hour
  I2cstop
End Sub

'------------------------------------------------------------------------------
Ich finde da einfach keinen Fehler.... aber es funktioniert nicht.
Kann mir da jemand helfen (ist sicher wieder was total banales -.-)?
Danke schonmal!