PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bytes in eine RTC schreiben und wieder auslesen



rogerberglen
04.12.2015, 21:24
Auch wenn ich jetzt Gefahr laufe zu nerven. Aber da habe ich noch ein kleines Problem.
Ich möchte Bytes in eine RTC (DS1307) schreiben und auch von dieser wieder zurücklesen. Ich habe dazu zwei Unterprogramme geschrieben, die jweils den Bereich von Adresse 00 - 0A beschreibt.
Jetzt habe ich festgestellt, dass imme das letzte Byte fehlerhaft ist. Ich habe nur noch nicht herausgefunden ob es schon falsch in die RTC geschrieben wird, oder falsch ausgelesen.
Hier mal die entsprechenden Programme dazu:


' ****************************************
' * DS1307 Adr $00 - $09 schreiben *
' ****************************************

Sub DS1307Write()

I2cstart 'I²C-Bus Startsignal ausgeben
I2cwbyte DS1307W 'DS1307 in Schreibmodus setzen
I2cwbyte 0 'Startadresse $0 in DS1307 einschreiben

For Z = 0 To 9 'Adressen $00 - $09 in DS1307 schreiben
I2cwbyte Rtc_Regs(Z + 1) 'Werte fortlaufend einschreiben
Waitms 10 '10ms Pause bis zum nächsten Byte
Next Z 'Nach vorletztem Byte 10ms warten.
Waitms 10 'Letzte Adresse
Z = Z + 1 'Daten einschreiben
I2cwbyte Rtc_Regs(Z + 1)
I2cstop 'I²C-Bus Stopsignal ausgeben

End Sub


' ****************************************
' * DS1307 Adr $00 - $09 auslesen *
' ****************************************

Sub DS1307Read()

I2cstart 'I²C-Bus Startsignal ausgeben
I2cwbyte DS1307W 'DS1307 in Schreibmodus setzen
I2cwbyte 0 'Startadresse $0 in DS1307 einschreiben

I2cstart 'I²C-Bus Startsignal erneut ausgeben
I2cwbyte DS1307R 'DS1307 in Lesemodus versetzen
For Z = 0 To 9 'Adressen $00 - $09 aus DS1307 lesen.
I2crbyte Rtc_Regs(Z + 1), Ack 'Nach jedem Lesen Empfang bestätigen.
Next Z
Z = Z + 1 'letzte zu lesende Adresse nach Empfang
I2crbyte Rtc_Regs(Z + 1), Nack 'nicht mehr bestätigen.
I2cstop 'I²C-Bus Stopsignal ausgeben

End Sub

Peter(TOO)
05.12.2015, 01:13
Hallo,


FOR Z = 0 TO 9
NEXT Z
Die grosse Quizfrage ist nun, welchen Wert Z hat, wenn die Schlaufe verlassen wird!

Die Schleife wird abgebrochen, wenn Z den Wert 10 erreicht hat.

Du schreibst und liest also Byte 0...9 und 11.

MfG Peter(TOO)

rogerberglen
05.12.2015, 09:09
Mal wieder den Wald vor lauter Bäumen nicht gesehen. Da wurde gnadenlos ein Wert übersprungen. Nachdem ich die Zeile Z = Z + 1 entfernt hatte, hat Alles wie gewünscht funktioniert.

Peter(TOO)
05.12.2015, 14:32
Hallo,

Mal wieder den Wald vor lauter Bäumen nicht gesehen.
Einfach immer die Bäume zählen, wenn es viele sind, ist es ein Wald ](*,)

Übrigens, man sollte sich immer auch mit dem Debugger beschäftigen.
Im Single-Step hättest du den Denkfehler selber gesehen.

MfG Peter(TOO)