Controller

      JTAG debugging mit Eclipse


Home ARM-Projekt Startupcode Bootloader myprintf() ECLIPSE Code::Blocks Em::Bitz Funksteck- dosen DCF77 Funkuhr


  Funkuhr mit DCF-77 Wecker

Für eine solche Funkuhr wird praktisch lediglich ein interruptable pin am Prozessor benötigt. Alle meine Versuche mit dem Capture-Compare Feature der Timerunit zu arbeiten, haben sich als unpraktisch/unübersichtlich erwiesen. Als Codevorlage diente der 8Bit-Code von Ulrich Radig. Mit seinen (FLASH verschwendenden) RAM-Spar-Vorrichtungen ist er jedoch für einen 32Bit Controller zu unübersichtlich. Unten findet Ihr meine allgemengültige, übersichtliche Lösung.

Voraussetzung: Wir brauchen
  • einen EXTI interrupt
  • eine Timervariable, die die Millisekunden zählt
  • einen aufziehbaren Timer, der bei Ablauf die Zeit aktualisiert

Ein 32Bit Arduino-clone z.B. bringt dies immer mit. In diesem Beispiel unten werden Arduino-ähnliche, selbst gebaute Funktionen für GPIO, Timer und Interrupt verwendet.

Das DCF-Signal bekommen wir aus einem ausrangierten Funkwecker oder vom Pollin DCF77-Modul für rund 5€. Der Wecker schaltet allerdings aus Stromspargründen ein paar Minuten nach dem Einschalten den Empfänger wieder ab. Wenn man diesen Schaltpin gefunden und entschärft hat, dann läuft es endlos.
Der DCF77 code wird als AM-Signal im Sekundentakt als Austastimpuls vom Sendemast in Frankfurt/M ausgestrahlt. Im WIKI ist das gut beschrieben.
Das HF-Signal ist sehr schwach und wird von Schaltreglern und ähnlichem schon völlig zerstört. Also vielleicht mal mit Batterie versuchen.

Zwischen den HW-Interrupts messen wir also die Länge des Sekundenimpulses und erhalten 59 Bits Information. Diese speichern wir in 2 x 32 Bit Variablen. Die Zeit liegt zunächst im BCD-Format vor. In der 60. Sekunde fehlt der Impuls, was wiederum die eigentliche Zeitberechnung anstößt.

code:
DCF77.h
DCF77.c

Links:
Pollin Funkmodul
www.dcf77.de
www.ulrichradig.de