Bin kurz vorm zusammenbruch. Ich nutze den DS1338 als Echtzeituhr. Die Routine zum lesen ist mit dem DS1307 scheinbar gleich. Das auslesen klappt super. Aber das schreiben.... Erst mal die Routine: 'Im Hauptprogramm steht: ....... Config Clock = Soft Date$ = "01.02.03" Time$ = "01:02:03" Gosub Setdatetime ...... Setdatetime: _sec = Makebcd(_sec) _min = Makebcd(_min) _hour = Makebcd(_hour) I2cstart I2cwbyte Ds1338w I2cwbyte 0 'address pointer I2cwbyte _sec I2cwbyte _min I2cwbyte _hour I2cstop _day = Makebcd(_day) _month = Makebcd(_month) _year = Makebcd(_year) I2cstart I2cwbyte Ds1338w I2cwbyte 3 I2cwbyte _weekday I2cwbyte _day I2cwbyte _month I2cwbyte _year I2cstop Return ################### nun ist das Jahr aber nicht 03 , sondern 3 bei Date$ = "10.11.12" Time$ = "13:14:15" kommt 16.17.18 und 19:20:21 RAUS, das steht plötzlich so in der Variablen _sec _min ...... Starte ich neu, dann ist im RTC aber das richtige gespeichert, abgesehen von der 03. Mir ist nicht klar, warum der Time$ plötzlich höhere Werte annimmt. Das Problem ist Extrem, wenn man die Uhr stellen will. Zum BSP mit _min = _min + 1 If _min = 60 Then _min = 00 _hour = _hour + 1 End If Dann kommen schon mal Uhrzeiten raus die gibt es gar nicht. Wie sind die Variablen _sec in Bascom überhaupt Dimensioniert? Mal ist es ein MACEBCD und mal Byte??? Wie kann ich denn einen Wert 03 übertragen? ist ja kein STRG Und noch was. Muss ich beim stellen den Interrupt oder sonst was stoppen? Denn die Variablen werden im UP ja umgewandelt, aber auch gleichzeitig durch die weiterlaufende Uhr geändert??? Ich stehe echt auf dem Schlauch. Vielen Dank fürs lesen.
Mario G. schrieb: > bei > Date$ = "10.11.12" > Time$ = "13:14:15" > > kommt 16.17.18 und 19:20:21 RAUS, das steht plötzlich so in der > Variablen _sec _min ...... Natürlich, das ist BCD, wird aber als HEX angezeigt. Wenn es MakeBcd() gibt, sollte es auch MakeDec() geben, so dass
1 | _min = MakeDec(_min) + 1 |
funktionieren sollte.
Jetzt dämmert es. In der Routine wird in BCD umgewandelt. Hmmmm aber nicht zurück. Warum schreibt man dann nicht mit anderen Variablen in den RTC? s = Makebcd(_sec)
Mario schrieb: > Jetzt dämmert es. In der Routine wird in BCD umgewandelt. Hmmmm aber > nicht zurück. Warum schreibt man dann nicht mit anderen Variablen in den > RTC? > > s = Makebcd(_sec) Hallo So funktioniert es 100% mit DS1307. Nur als Tipp ansehen. Setdate: I2cstart ' Start I2cwbyte Ds1307w ' DS1307 schreiben I2cwbyte 3 ' DS1307 Adresszeiger auf 4 (Byte 5) stellen Byt = Dayofweek() I2cwbyte Byt _day = Makebcd(_day) I2cwbyte _day ' Tag schreiben _month = Makebcd(_month) I2cwbyte _month ' Monat schreiben _year = Makebcd(_year) I2cwbyte _year ' Jahr schreiben I2cstop Return Settime: I2cstart ' Start I2cwbyte Ds1307w ' DS1307 schreiben I2cwbyte 0 ' DS1307 Adresszeiger auf 0 stellen _sec = Makebcd(_sec) I2cwbyte _sec ' Sekunden schreiben _min = Makebcd(_min) I2cwbyte _min ' Minuten schreiben _hour = Makebcd(_hour) I2cwbyte _hour ' Stunden schreiben I2cstop Return '******* Parameter auslesen ********* Getdatetime: I2cstart I2cwbyte Ds1307w 'Diese Ansteuerung entspricht Figure 6 im Datenblatt, also erst schreiben, I2cwbyte 0 'dann repeated start und anschließend lesen! I2cstop I2cstart I2cwbyte Ds1307r I2crbyte _sec , Ack I2crbyte _min , Ack I2crbyte _hour , Ack I2crbyte _weekday , Ack I2crbyte _day , Ack I2crbyte _month , Ack I2crbyte _year , Ack I2cstop I2cstart I2cwbyte Ds1307w I2cwbyte 0 I2cstop _weekday = Makedec(_weekday) _day = Makedec(_day) _month = Makedec(_month) _year = Makedec(_year) _sec = Makedec(_sec) _min = Makedec(_min) _hour = Makedec(_hour) Return Werde in kürze mein Projekt „Uhr mit Kalender“ im Bascomforum vorstellen. Anzeige LED(Max7219) und oder LCD Uhrzeit wird täglich korrigiert. Zeitumstellung automatisch. Taster für manuelle Einstellung. Anzeige der kirchlichen Feiertage(berechnet nach Osterkalender) Anzeige der allg. Feiertage und Geburtstage. Gruß
oh danke. ich hab das unterprogramm geändert und am ende beim schreiben _sec = Makedec(_sec) _min = Makedec(_min) _hour = Makedec(_hour) _day = Makedec(_day) _month = Makedec(_month) _year = Makedec(_year) hinzugefügt. Dann stimmt es auch wieder, wenn ich ins hauptprogramm gehe. Das hab ich übersehen, aber weiter oben den tip bekommen in den anderen Routinen zum rtc steht es auch nicht. find ich komisch
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.