DCF77 Zeitcode mit ESP32 empfangen

Die Verteilung der offiziellen Zeit in Deutschland wird von der Physikalisch-Technischen Bundesanstalt (PTB) durchgeführt. Sie betreibt hochgenaue Uhren und einen Langwellensender DCF77 bei Frankfurt, der codiert die aktuelle Uhrzeit überträgt.

Eigentlich ist das Signal überall im Umkreis von 1500 km zu empfangen (Grafik Wikipedia). Zur Zeit von Röhren-Fernsehgeräten war die magnetische Zeilen-Ablenkung an der Bildröhre der böse Störer, doch diese Geräte gibt es kaum noch. Dafür gibt es heute im Haushalt unzählige Schaltnetzteile, klein und groß, die Störsignale ausstrahlen und damit den Empfang erschweren. Ebenso behindert der Stahl in Häuser-Decken und -Wänden oder ein Metallgehäuse den Langwellen-Empfang. Bei „Funkuhren“ wird der DCF77-Empfänger nur einmal in der Nacht aktiviert, wenn der Empfang hoffentlich störungsfrei ist und dann die Uhr richtig gestellt. In der übrigen Zeit laufen die Uhren mit dem lokalen Uhrenquarz etwa auf eine Minute genau.

Man kann kleine DCF77-Empfänger-Platinen mit Antenne kaufen, wie sie auch in Funkuhren verwendet werden. Sie haben intern ein speziell für diese Anwendung optimiertes IC und ein extrem schmalbandiges Quarzfilter. Damit vermeiden sie viele Störungen. Sie sind auf geringen Stromverbrauch wie bei Batterie-Uhren getrimmt.

Sie brauchen nach dem Einschalten eine Weile, bis sie funktionieren und reagieren dann sehr empfindlich auf Schwankungen der Versorgungsspannung. Zudem ist der digitale Ausgang mit einigen Mikroampere ziemlich schwach.

Optimal für einen stabilen Empfang wäre es, wenn die Antenne und der DCF77-Enpfänger weit entfernt an einer günstigen Stelle im Raum oder Haus angebracht werden würde und nur die Pulsfolge über das Kabel geht. Ein solches „entferntes“  Empfänger-Gehäuse müsste zusätzlich eine Spannungs-stabilisierung enthalten sowie einen Leitungstreiber für das Digitalsignal.

Eine Leuchtdiode, die im DCF77-Takt blinkt, wäre auch sinnvoll, um am Montageort schnell die beste geografische Ausrichtung der Antenne zu finden. Mit dem Treiber-IC ist auch sichergestellt, dass bei dem ESP32 bzw. RPi-pico ein kräftiges Signal mit zulässigen Pegeln (max. 3V) eintrifft. Die Leitungslänge kann bis zu 10-20 m betragen.

Die Software Im Mikrorechner zur Auswertung der codierten Zeit muss zwischen „kurzen“ (100 ms) und „langen“ (200 ms) Pulsen unterscheiden können.

Im Idealfall erscheinen die Pulse aus dem DCF77 -Signal präzise, aber leider nur, wenn das Eingangsfilter breit genug (10-20 Hz) ist.(Grafik der PTB). Wegen des schmalen Quarzfilters schwankt die im Empfänger-Modul erkannte Pulsbreite erheblich, so dass in der Software des ESP32 bei der Unterscheidung „0“/“1″ ein erheblicher Spielraum, z.B. 80-130 ms / 180-250 ms vorgesehen werden muss.

Für micropython gibt es bei Github mehrere DCF77-Dekodier-Programme, die zum Teil interrupt-gesteuert im Hintergrund laufen.

Reicht die Wahl eines günstigen Antennenort noch nicht für stabilen Empfang aus, z.B. weil sehr weit entfernt von Frankfurt, so kann man den mitgelieferten Ferritantennen-Stab des Moduls durch einen größeren, wie 200×10 mm, und eine dazu passenden Spule ersetzen. Das bewirkt ein stärkeres Empfangssignal und bessere Richtwirkung, ist aber nicht so einfach aufzubauen und auf 77.5 kHz genau abzugleichen.

Der Anschluss an den Mikrocontroller ist dann einfach, es sollte nur ein Pulldown-Widerstand vorhanden sein, um im Fall eines offenen Kabels für einen eindeutigen Eingangspegel am ESP32-Eingang zu sorgen.