DCF-77 Arduino

Für ein kleines Projekt sollte sich der Arduino selbst die Uhrzeit „holen“. Recht einfach geht das über den Zeitzeichensender DCF77 in Mainflingen der auf 77,5 kHz sendet. Dazu gibt es fertige Module, die das Modulierte Signal aufbereiten und ein Digitales High/Low ausgeben. Im Grunde muss nur „jede Sekunde“ die Zeit des High Signals ausgewertet werden, eine 0 entspricht ~ 100ms, eine 1 entspricht ~200ms. Nach jeder Minute gibt es ein Pause von ~2000ms die zur Synchronisation dient… mehr dazu bei Wikipedia. Anders als manchmal zu lesen läuft mein Modul nicht mit 5V sondern nur mit den angegebenen 3,3V. Der Pegel wird aber in der Regel vom µC als High erkannt.

Inkscape Daten der DCF77 Uhr Download

Es gibt eine library für diese Aufgabe die man sich hier Runterladen kann:

http://thijs.elenbaas.net/2012/04/arduino-dcf77-radio-clock-receiver-library/

Wichtig ist das man in der DCF77.h die DCFSplitTime definiert, das ist die zeit ab der entscheiden wird ob ein High oder ein Low im Bit vorliegt.

Bei mir liegen die Low Zeiten bei ~75ms – 90ms, High bei 170ms-185ms. Ich Splitte nun bei 140ms.

Dazu braucht es noch eine weitere library da es wohl in der Standard Arduino library Änderungen gab.

https://github.com/PaulStoffregen/Time

Dazu muss noch die neue Lib eingebunden werden.

Der etwas angepasste Beispielcode… das nette dabei, die library updatet die innere Uhr des Arduino, arbeitet mit Interrupts und lässt sich leicht integrieren.

Der LED Pin ermöglicht eine kleine Analyse des Signals, an der LED erkennt man eigentlich ob die Signale sauber kommen, regelmäßig und auch die Länge lassen sich in der regel erkennen.

So sieht die Ausgabe auf dem Terminal aus. Nach ~2min ist das Signal da.

Ein sehr kleines Programm um die Puls-Breite zu messen und mit etwas Analyse, basiert auf pulseIn().

Die Ausgabe sieht dann so aus…