DCF77 Signal in RTC 1307 schreiben - wie?

Ich nutze ein fertiges RTC Modul (ebay 330868967962), in das ich die Zeit/Datum einmalig eingebe. Die Zeit wird auch auf dem LCD angezeigt, nur arbeitet das Modul nicht sonderlich genau. Die Abweichung ist recht hoch. Aus diesem Grund möchte ich das RTC-Modul um ein DCF77 Modul von Conrad ergänzen. Das DCF77 Modul arbeitet mit diesem Download https://github.com/thijse/Arduino-Libraries/downloads einwandfrei. Die Synchronisation dauert zwar recht lange, aber das ist egal, denn es soll das RTC-Modul ja nur nachjustieren und automatisch Sommer- und Winterzeit einstellen.

Leider habe ich noch keinen Sketch gefunden, in dem diese Syncronisation gemacht wird. Ich bin mir aber sicher, dass das schon etliche Leute gemacht haben. Kennt jemand einen Link oder hat einen passenden Sketch für mich?

Frank

Der Trick dabei ist ja festzulegen wann du synchronisieren willst. Du könntest z.B. eine kleine Funktion schreiben die überprüft ob sich der Monat geändert hat und dann synchronisieren.

Wegen Sommer- und Winterzeit hat die DS1307new Lib eine Funktion, mit der man das abfragen kann: http://code.google.com/p/ds1307new/

Die Lib hat mir zwar gar nicht gefallen, aber dadurch dass das immer am letzten Sonntags eines bestimmten Monats geschieht, kann man das auch relativ einfach selbst schreiben. Die Time Lib hat z.B. eine previousSunday() Funktion, die man auf ein beliebiges Datum anwenden kann. Das heißt zwei Zeitstempel für die Zeitumstellung erstellen (die den letzten Tag des März und Oktober angeben), darauf jeweils previousSunday() ausführen und dann mit dem aktuellen Datum vergleichen.

In welchen Abständen willst du den synchronisieren? Die TimeAlarms Lib (benötigt wiederum Time) erlaubt es wöchentlich zu einem bestimmten Tag einen Alarm auszulösen. Aber monatlich geht schon wieder nicht.

Das Gerät, dass der Arduino steuern wird, wird nur gelegentlich genutzt. Das ist auch das Problem mit der Ungenauigkeit der Zeit. Je länger der Zeitraum, desto größer die Abweichung. Die Zeit der RTC soll per DCF77 nachgestellt werden, wenn das Gerät in Betrieb ist. Positiver Nebeneffekt ist dann eben auch, dass Sommer- und Winterzeit automatisch nachgestellt werden.

Da das Gerät demnächst auch "online" ist, könnte es die aktuelle Zeit auch vom NTP-Server der FritzBox holen. Wäre das vielleicht einfacher?

Frank

Die Quelle ist im Prinzip egal, aber du musst dich mal entscheiden wann das gemacht werden soll. Beim Einschalten ist natürlich einfach (abgesehen davon dass DFC77 lange dauert). Aber man kann es auch programmieren, dass es täglich oder wöchentlich synchronisiert. Es ist da kein Problem zu sagen, dass er z.B. jeden Montag um 3 Uhr die Uhrzeit nachstellt. Das scheitert aber bei dir wahrscheinlich daran dass das Gerät nicht dauernd im Betrieb ist.

Wenn das nicht dauernd eingeschaltet ist, ist DFC77 durch die langsame Geschwindigkeit natürlich nicht so toll. Wenn man das z.B. im Setup nach dem Einschalten macht, dauert es Minuten bis die Uhrzeit korrekt ist. Du kannst auch über millis() einfach programmieren dass er nach dem Einschalten erst mal eine Stunde warten soll bis er synchronisiert. Optionen gibt es da sehr viele.

NTP-Server wäre da natürlich wesentlich schneller. Das könnte man problemlos beim Einschalten und danach alle paar Stunden machen. Mit der Time Lib könntest du auf die RTC gleich ganz verzichten. Einfach NTP als Sync-Provider einstellen und ein beliebiges Sync-Intervall. Dann zählt er zwischen den Syncs die Zeit lokal über den Systemtakt. Wenn das Synchron-Intervall abgelaufen ist, ruft die Lib automatisch die angegebene Funktion auf und updatet ihre Zeit.

Siehe hier: http://www.pjrc.com/teensy/td_libs_Time.html

NTP Beispiel ist auch dabei. Wenn du sowieso am Internet hängst, würde ich DFC77 vergessen.