Hallo liebes Forum und eine erfolgreiches 2020!
Ich hätte eine Frage über besagte RTC aus dem Titel:
Die Uhr hat irgendein Problem mit dem Jahr "20".
Der Fehler viel uns gerade auf, sie hat nicht korrekt auf das Jahr "20" incrementiert.
Wir haben danach versucht, das Datum per "Hand" einzugeben, doch das nimmt die RTC nicht an.
Andere Jahrgänge, auch Zehner wie z.B. "30" und "10", sowie alle Jahrgänge dazwischen lassen sich ohne Probleme einstellen, nur die "20" nicht.
Die Daten werden per MakeBCD und MakeInt gewandelt, die Variable zum Auslesen und Umwandeln ist ein Byte.
Die Jahreszahl wird nicht übernommen
Was bitte kann das sein?
Hat Jemand eine Idee?
Die Vars für Tag, Monat und Jahr usw. sind als Byte deklariert...
Alles anzeigen
Ich hätte eine Frage über besagte RTC aus dem Titel:
Die Uhr hat irgendein Problem mit dem Jahr "20".
Der Fehler viel uns gerade auf, sie hat nicht korrekt auf das Jahr "20" incrementiert.
Wir haben danach versucht, das Datum per "Hand" einzugeben, doch das nimmt die RTC nicht an.
Andere Jahrgänge, auch Zehner wie z.B. "30" und "10", sowie alle Jahrgänge dazwischen lassen sich ohne Probleme einstellen, nur die "20" nicht.
Die Daten werden per MakeBCD und MakeInt gewandelt, die Variable zum Auslesen und Umwandeln ist ein Byte.
Die Jahreszahl wird nicht übernommen
Was bitte kann das sein?
Hat Jemand eine Idee?
Die Vars für Tag, Monat und Jahr usw. sind als Byte deklariert...
Quellcode
- Sub Clock_start_osc()
- Disable Interrupts
- '************ Inis der Uhr
- I2cstart
- I2cwbyte &B11011110 'Schreiben 0...
- I2cwbyte 0
- I2cwbyte &B10000000 'st(art)-bit in Sekunde muss gestartet werden
- I2cstop
- Enable Interrupts
- End Sub
- Sub Clock_trimmung()
- Local Platzhalter As Byte
- If Rtc_trimmung > 128 Then
- Platzhalter = Rtc_trimmung - 128
- Platzhalter.7 = 0
- Else
- Platzhalter = 128 - Rtc_trimmung
- Platzhalter.7 = 1
- End If
- Disable Interrupts
- I2cstart
- I2cwbyte &B11011110 'Schreiben 0...
- I2cwbyte &H08 'Speicheradresse
- I2cwbyte Platzhalter
- I2cstop
- Enable Interrupts
- End Sub
- Sub Clock_write_time
- Dim Xs As Byte
- '***************** schreibe Daten ***************
- 'Sekunden = 0 '&B10000000
- 'Xs = Makebcd(sekunden)
- 'Xs = Xs Or &B10000000 'Bit 7 setzten
- Disable Interrupts
- Xs = &B10000000
- '************ Inis der Uhr
- I2cstart
- I2cwbyte &B11011110 'Schreiben 0...
- I2cwbyte 0
- I2cwbyte &B10000000 'st(art)-bit in Sekunde muss gestartet werden
- I2cstop
- '************ Uhrzeit eintragen ***************
- I2cstart
- I2cwbyte &B11011110 'Schreiben 0...
- I2cwbyte 0 'Speicheradresse
- I2cwbyte Makebcd(xs)
- I2cwbyte Makebcd(minuten)
- I2cwbyte Makebcd(stunden)
- I2cstop
- Enable Interrupts
- End Sub
- Sub Clock_write_date
- Local Wochentag_akku As Byte
- Wochentag_akku = Wochentag 'Batt activate
- Wochentag_akku.3 = 1
- '***************** schreibe Daten ***************
- Disable Interrupts
- '************ Inis der RTC
- I2cstart
- I2cwbyte &B11011110 'Schreiben 0...
- I2cwbyte 0
- I2cwbyte &B10000000 'st(art)-bit in Sekunde muss gestartet werden
- I2cstop
- '************ datum eintragen ***************
- I2cstart
- I2cwbyte &B11011110 'schreiben 0...
- I2cwbyte 3 '...ab Adresse...
- I2cwbyte Wochentag_akku
- I2cwbyte Makebcd(tag)
- I2cwbyte Makebcd(monat)
- I2cwbyte Makebcd(jahr)
- I2cstop
- Enable Interrupts
- End Sub
- Sub Clock_read
- Local Error_counter As Byte
- Error_counter = 0
- Disable Interrupts
- Read_time_start:
- I2cstart
- I2cwbyte &B11011110 'schreiben: 0
- I2cwbyte 0
- I2cstart
- I2cwbyte &B11011111 'Lesen: 1
- I2crbyte Sekunden , Ack
- I2crbyte Minuten , Ack
- I2crbyte Stunden , Ack
- I2crbyte Wochentag , Ack
- I2crbyte Tag , Ack
- I2crbyte Monat , Ack
- I2crbyte Jahr , Nack
- I2cstop
- Enable Interrupts
- 'Sekunden = Sekunden And &B01111111 'Bit 7 löschen
- Sekunden.7 = 0
- Sekunden = Makedec(sekunden) ' - 80
- Minuten = Makedec(minuten)
- Stunden = Makedec(stunden)
- Wochentag.5 = 0
- Wochentag.4 = 0
- Wochentag.3 = 0
- Wochentag = Makedec(wochentag)
- Tag = Makedec(tag)
- Monat = Makedec(monat)
- Jahr = Makedec(jahr)
- If Error_counter < 5 Then
- If Monat = 0 Or Monat > 12 Or Tag = 0 Or Tag > 31 Or Err > 0 Then
- Incr Error_counter
- Waitms 30
- Goto Read_time_start
- End If
- End If
- If Error_counter = 5 Then
- Stunden = Stunde_alt
- Minuten = Minute_alt
- Sekunden = Sekunde_alt
- Wochentag = Wochentag_alt
- Tag = Tag_alt
- Monat = Monat_alt
- Jahr = Jahr_alt
- Else
- Stunde_alt = Stunden
- Minute_alt = Minuten
- Sekunde_alt = Sekunden
- Wochentag_alt = Wochentag
- Tag_alt = Tag
- Monat_alt = Monat
- Jahr_alt = Jahr
- End If
- Gosub Tages_name
- End Sub