 |
JTAG
debugging mit Eclipse
|
|
|
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
|
|
|
|
|