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
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