Momentan beschäftige ich mich mit dem RTC-Modul DS3231 und dem DCF77-Funksignal für ein Arduino Nano Uhren-/Wetterstation-/Kalender-Projekt. Das Funksignal wird mit der "DCF77.h"-Library ausgewertet (https://github.com/thijse/Arduino-DCF77). Das DS3231 hat einen SQW-Ausgang, der auf 1Hz eingestellt werden kann. Eine gegen VCC angeschlossene LED blinkt dann im Sekundentakt. Ich gehe davon aus, dass der SQW-Takt zum RTC-Sekundentakt synchronisiert läuft. Weiterhin kann man am Ausgangspin des DCF77-Moduls mit einer LED den Takt des DCF77-Signals anzeigen lassen (100ms bzw. 200ms Impulse). Im Sketch frage ich regelmäßig die DCF-Zeit ab (alle 10 min), synchronisiere dann die RTC-Zeit damit und die interne Arduino-Systemzeit. Die Systemzeit wird zudem alle 300 s mit der RTC abgeglichen (setSyncProvider(syncProvider)). Damit sollten doch die LED am SQW-Ausgang und die LED am DCF77-Modul im Gleichtakt blinken (die RTC-LED natürlich mit 500ms ON und 500ms OFF), oder? Zumindest eine zeitlang. Das passiert jedoch nicht: die beiden LEDs blinken zwar im Sekundentakt aber unsynchronisiert. Was mache ich hier falsch?
Martin schrieb: > Was mache ich hier falsch? Das hier: > Ich gehe davon aus... ... dass der Sekundenvorteiler (im Übersichtsbild im Datenblatt DIVIDER genannt) beim Schreiben der RTC zurückgesetzt wird und in diesem Augenblick der SQW Ausgang einen definierten Pegel einnimmt. Ich kann in dem Datenblatt aber nichts finden, das ein solches "Subsekunden"-Management beinhaltet. Deshalb würde ich davon ausgehen, dass der Prescaler einfach weiterläuft und die LED auch beim Schreiben einfach ohne kurzes "Stolpern" weiterblinkt.
:
Bearbeitet durch Moderator
Ich denke es ist einfach das der DS3231 nur ganze Sekunden kennt. Wenn man Jetzt die Zeit setzt ist es 21:01:21.000 wenn man die Zeit um 21:01:21.500 setzt zählt der RTC 21:01:21.000 ebenso zählt der Zähler für die 1Hz los.. da ist 32khz besser.. dann muss man halt ein bisschen für die Syncro zählen, garantiert aber den Gleichlauf.
:
Bearbeitet durch User
Philipp K. schrieb: > wenn man die Zeit um 21:01:21.500 setzt zählt der RTC 21:01:21.000 > ebenso zählt der Zähler für die 1Hz los.. Das ist die andere Variante. Dann könnte man aber diesen .xxx Subsekundenzähler und damit das LED-Verhalten an den DCF77 anpassen. Weil das aber scheinbar nicht geht, vermute ich, dass wenn die Zeit gerade 11:11:11.400 ist und ich die auf 12:12:12 setze, dann die Uhr intern mit 12:12:12.401 weiterläuft und eben nicht mit 12:12:12.000
Lothar M. schrieb: > Weil das aber scheinbar nicht geht, vermute ich, dass wenn die Zeit > gerade 11:11:11.400 ist und ich die auf 12:12:12 setze, dann die Uhr > intern mit 12:12:12.401 weiterläuft und eben nicht mit 12:12:12.000 Müsste so sein weil... wenn man Batterie und VCC wegnimmt muss man bei anlegen der Spannung/Batterie das Oszillator-Stop Bit löschen.. damit geht dann die Rechnung los und dort kann man das angleichen.
Im Datenblatt https://datasheets.maximintegrated.com/en/ds/DS3231.pdf steht auf S. 12 unten links: "The countdown chain is reset whenever the seconds register is written. Write transfers occur on the acknowledge from the DS3231. Once the countdown chain is reset, to avoid rollover issues the remaining time and date registers must be written within 1 second. The 1Hz square-wave output, if enabled, transitions high 500ms after the seconds data transfer, provided the oscillator is already running." Der letzte Satz klingt nach 500ms Verzögerung zwischen Sekundentakt und SQW-Pin, oder? Rein optisch könnte das bei meinen beiden LEDs hinkommen.
Martin schrieb: > die beiden LEDs blinken zwar im Sekundentakt > aber unsynchronisiert. Hast du die DS3231 aus China? Ich habe dieselbe Erfahrung gemacht mit DS1307, Chinesischer Nachbau. Obwohl im Datenblatt steht, dass die Teilerkette mit Schreiben der Sekunden zurückgesetzt wird, passiert es nicht. Habe auch 2 Stück original DS1307 gekauft um es zu testen. Die original IC-s benehmen sich wie im Datenblatt geschrieben, sie zählen genau 1 Sekunde nach dem Schreiben weiter. Offensichtlich weist deine DS3231 IC denselben Mangel auf.
Martin schrieb: > The 1Hz > square-wave output, if enabled, transitions high 500ms > after the seconds data transfer, provided the oscillator is > already running." > Der letzte Satz klingt nach 500ms Verzögerung zwischen Sekundentakt und > SQW-Pin, oder? Nein, das hört sich an wie wenn der SQW Ausgang nach einem Reset wie jedes anständige andere Zählerbit mit 0 beginnt, dann nach 500ms nach 1 wechselt, dann wieder nach 500ms auf 0 und nach weiteren 500ms wieder nach 1 usw, usf... Dann wäre das Blinken völlig synchron zu der DCF LED, nur eben abwechselnd. Das dürfte aber leicht zu erkennen sein.
Die DS3231 stammen von AZDelivery und kommen ws. aus China. Auf dem Chip steht z.B. DS3231N, 1204A3, 586AA (habe hier mehrere rumliegen aus verschiedenen Chargen).
Hallo, ich habe über die Bucht eine 2-stellige Anzahl von Modulen mit DS3231 und DS3231M (mit etwas geringerer Anfangsgenauigkeit) über die letzten 4 Jahre bestellt und getestet. Die Offsets 0x07 bis 0x0f habe ich alle zu 0 gesetzt, um den 1-Hz-SQW-Ausgang zu benutzen. Bisher alle Module funktionieren, d. h. bei der Zeiteinstellung wird durch abschliessendes Beschreiben des Offsets 0x00 (sec) wieder synchronisiert, d.h. der O. D. SQW-Ausgang schaltet zum Sekundenbeginn wie erwartet auf low. Der DS3231M mit MEMS-Oszillator weist im Offset 0x0eh Unterschiede auf: er ist fest auf 1-Hz-Teiler eingestellt. Um die M-Typen auf die gleichen Grund-Genauigkeiten zu bekommen, ist in der Regel ein Abgleich über Offset 0x10 nötig. Bei manchen Lieferungen waren die Module gemischt bestückt. Es gab auch den Fall, dass auf dem Händlerfoto normale DS3231 waren, bei den gelieferten aber dann M-Typen bestückt waren.
@ Martin: Richtig, die Register-Adressen 0x00 bis 0x06 sind Uhrzeit und Datum. 0x07 bis 0x0d sind für die Alarmoptionen. 0x0e ist das Control Register. 0x0f ist das Status Register. 0x10 ist die 2er-Complement Frequenz-Korrektur. 0x11 und 0x12 die Chiptemperatur. Wenn man 0x13 usw. anwählt, bekommt man wieder Zugriff auf 0x00 usw.
Wozu braucht man noch zusätzlich ne RTC, wenn man schon DCF-77 hat? Nach dem Power On Reset wartet man einfach, bis ein gültiges Paket empfangen wurde und synchronisiert damit eine software Uhr/Kalender mit einem Timerinterrupt. Man kann dann sogar nach einiger Zeit die Quarzuhr feinjustieren und den Korrekturwert im EEPROM ablegen.
Peter D. schrieb: > bis ein gültiges Paket > empfangen wurde [@TO!] Nur der Vollständigkeit halber: EIN Paket reicht NICHT, um gesichert die Aktuelle Zeit/Datum zu erhalten. Am simpelsten ist es die einzelnen Teile des Paketes, durch mehrfach einlesen zu verifizieren. Sonnt zeigt das bei schlechten Empfang, schneller als man glauben möchte, den krudesten Scheiß an!
Peter D. schrieb: > Wozu braucht man noch zusätzlich ne RTC, wenn man schon DCF-77 > hat? > Nach dem Power On Reset wartet man einfach, bis ein gültiges Paket > empfangen wurde und synchronisiert damit eine software Uhr/Kalender mit > einem Timerinterrupt. Man kann dann sogar nach einiger Zeit die Quarzuhr > feinjustieren und den Korrekturwert im EEPROM ablegen. Ganz einfach: Das DCF77-Signal kann gestört sein oder ausfallen und die Arduino-interne Uhr über Millis ist zu ungenau.
Peter D. schrieb: > Man kann dann sogar nach einiger Zeit die Quarzuhr feinjustieren und den > Korrekturwert im EEPROM ablegen. Das übliche Thema, wenn man es sorglos und genau haben möchte sind die normalen Uhrenquarze raus oder man hat so eine stabile Umgebungstemperatur das man nur einmal abgleichen muss. Der ds3132 hat es bei mir auf 10 Sekunden im Jahr gebracht. das macht komischerweise ca. 2ppm wie im Datenblatt. Dadurch muß ich mich nur alle 2 Jahre um die Uhr kümmern. Sommer/Winterzeit mach ich mit einem Kippschalter.
:
Bearbeitet durch User
Lothar M. schrieb: > Dann wäre das Blinken völlig synchron zu der DCF LED, nur eben > abwechselnd. Vermutlich meint Martin genau dieses abwechselnde Blinken mit "nicht synchron", bzw. "nicht im Gleichtakt".
Philipp K. schrieb: > Das übliche Thema, wenn man es sorglos und genau haben möchte sind die > normalen Uhrenquarze raus Normale CPU-Quarze (z.B. 11,0592MHz) sind erstaunlich temperaturstabil. Uhrenquarze sind im Wohnbereich aber oft ausreichend. Und alle paar Tage sollte ja wohl der DCF-77 Empfang wieder klappen (vorzugsweise nachts). Eine zusätzliche RTC ist so überflüssig, wie Gürtel mit Hosenträger.
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.