Elektronikprojekte
DCF77 Funk-Sternzeituhr
- Auswertung und Anzeige des Zeitsignals eines DCF77 Empfängermoduls mit
anschließender Berechnung der lokalen Sternzeit.
- Aufbau auf Streifenraster mit PIC16F876A Mikrocontroller.
- Materialkosten ca. 28 EUR.
Beschreibung der Schaltung
Die Uhr besteht im Wesentlichen aus dem DCF77 Empfängermodul, einem Mikrocontroller, einem Display und 6
Bedientasten. Nachfolgend der Stromlaufplan und das Platinenlayout sowie die Stückliste.
Für die Schaltung wurde der Mikrocontroller PIC16F876A (IC1) gewählt. Er besitzt einerseits genügend I/O Ports um die
Bedientaster und das Display direkt anzuschließen und andererseits mit 8kByte genug Speicher um das Programm
aufzunehmen.
Über die 5-polige Stiftleiste SV1 kann der PIC im eingebauten Zustand in der Schaltung programmiert werden (ICSP = In
Circuit Serial Programming), ich empfehle jedoch die Programmierung im Programmiergerät ( z.B. JDM Programmer ).
Wenn auf die ICSP Option verzichtet wird, können SV1 und der Jumper JP1 entfallen.
Das Programm wird mittels der HEX-Datei in den Mikrocontroller geladen.
Wer noch Änderungen am Programm vornehmen möchte, findet hier auch die Assembler-Datei:
DCF77_Sternzeituhr_HEX_ASM.zip
Die Bedientaster Ta1-Ta6 werden an den Pins 21-26 (RB0-RB5) des PIC angeschlossen. Interne Pull-up Widerstände halten
die Eingänge normalerweise auf einem High Level. Wird ein Taster gedrückt wird der entsprechende Eingang auf Low
gezogen.
Die 8 Bit Daten für das Display werden an den Pins 11-18 (RC0-RC7) des PIC ausgegeben. Die Steuersignale für RS und
Enable werden an den Pins 5 (RA3) bzw. 7 (RA5) ausgegeben.
Als Eingang für das DCF77 Signal wird Pin 6 (RA4) verwendet.
Die Schaltung benötigt eine Spannung von 5Volt.
DCF77 Empfängermodul
Das DCF Zeitsignal wir als amplitudenmoduliertes Signal mit einer Trägerfrequenz von 77,5 kHz ausgestrahlt. Jede Sekunde
wird ein Bit gesendet wobei die Trägeramplitude für eine logische "0" für ca. 100ms und für eine logische "1" für ca. 200ms
abgesenkt wird. Das Telegramm startet am Beginn einer neuen Minute und ist 59 Bit (59 Sek) lang. In der 60sten Sekunde
wird kein Bit gesendet, d.h. das Trägersignal wird nicht abgesenkt. Hiermit wird der Beginn einer neuen Minute und damit
der Beginn eines neuen Zeittelegramms gekennzeichnet.
Das DCF77 Empfängermodul stellt das demodulierte Signal an einem Ausgang zur Verfügung, wobei der Ausgang für die
Zeit der Amplitudenabsenkung entweder von High auf Low geht oder umgekehrt von Low auf High, je nach Modul.
Die Schaltung benötigt für die Auswertung der Signale einen Low Pegel an Pin 6 (RA4) für die Zeit der
Amplitudenabsenkung des Trägersignals.
Im Handel (z.B. Reichelt, Conrad, Pollin) werden eine Reihe von unterschiedlichen DCF77 Empfängern angeboten. In der
Schaltung wurde das Modul von Pollin getestet (Pollin Electronic, EUR 4,75) sowie ein Empfangsmodul aus einem defekten
Funkwecker. Beide Module können nicht direkt an 5Volt betrieben werden. Über den Spannungsteiler R7/R8 wird deshalb
die Versorgungsspannung auf etwa 1,6Volt reduziert. Der Transistor T1 dient der Pegelanpassung an die 5V des PIC sowie
dem Invertieren des Signals.
Das Reichelt und das Conrad Modul können direkt an 5V betrieben werden. Zusätzlich besitzt das Conrad Modul 2
Ausgänge, einen invertierten und einen nichtinvertierten, die über Pull-up Widerstände direkt verwendet werden können.
Display
Als Display können in der Regel die meisten LCD Displays mit 2x16 Zeichen und 8 Bit Ansteuerung verwendet werden, ggf.
muss das Platinenlayout angepasst werden.
Getestet wurde die Schaltung mit den LCD Displays EA W162B-N3LW und 162C BC BC von Reichelt, sowie dem LCD
Display TC1602A-09 von Pollin.
Die LCD Displays benötigen eine Spannung Vo zur Kontrasteinstellung von ca. 0,3 Volt, die über R3 eingestellt wird (für die
Inbetriebnahme auf 0,0 Volt einstellen und dann verändern bis der Kontrast optimal ist). Für die LED Beleuchtung wird ein
Vorwiderstand R4 benötigt, der je nach LCD Typ und gewünschter Helligkeit zwischen ca. 33 Ohm und 1 kOhm betragen
kann.
Soll die Uhr bei Temperaturen unter 0°C verwendet werden, empfiehlt sich die Beheizung des Displays. Der Test mit einem
sogenanntes OLED Display war negativ. Der Vorteil dieses Typs gegenüber normalen LCD Displays ist der weite
Betriebstemperaturbereich von -40°C bis +80°C, jedoch erzeugte das Display ein Störsignal, dass den DCF77 Empfang
stark beeinträchtigte.
Aufbau
Der Aufbau erfolgt auf Streifenrasterplatinen (siehe auch Sonstiges => Streifenrasterplatinen). Da diese nur bis 100mm
Breite verfügbar sind, wurde die Hauptplatine "verlängert". Will man die "Verlängerung" umgehen, würde sich in diesem Fall
auch eine Lochrasterplatine anbieten, da die Anzahl der erforderlichen Leiterbahnen überschaubar ist.
Die Taster und Display Platinen sind über 90° Drahtwinkel mit der Hauptplatine fest verlötet.
Nachfolgend einige Fotos des Innenlebens.
Programm
Nach der Programmierung läuft innerhalb des Mikrocontrollers einerseits die Hauptprogrammschleife für alle nicht
zeitkritischen Abläufe wie z.B. die Aktualisierung des Display, Abfrage der Taster oder die Menüsteuerung und andererseits
eine sogenannte Interrupt Routine für alle zeitkritischen Abläufe, im wesentlichen die Erzeugung der Takte der internen
Uhren für Uhrzeit/Sternzeit. Diese laufen als normale Quarzuhren und werden je nach Einstellung periodisch alle 24 h oder
bei Bedarf manuell mit dem DCF77 Signal abgeglichen.
Die Interrupt Routine wird mit einer festen Frequenz von 3.906,25 Hz ausgeführt:
fi = Quarzfrequenz /4 /512 = 8.000.000 Hz /4 /512 = 3.906,25Hz
Von dieser Frequenz leiten sich alle anderen Frequenzen ab, z.B. für den Sekundentakt der internen Normalzeit Uhr wird die
Frequenz 3x durch 3906 und 1x durch 3907 geteilt:
fuz = 3.906,25Hz x 4 / (3 x 3906 + 1 x 3907) = 1.000000Hz
Für den Sekundentakt der internen Sternzeituhr wird die Frequenz 11x durch 3896 und 1x durch 3891 geteilt, sodass eine
mittlere Frequenz von 1.002738144Hz entsteht, was theoretisch einem Fehler von +0,02 sek/tag entspricht:
fsz = 3.906,25Hz x 12 / (11 x 3896 + 1 x 3891) = 1.002738144Hz
Die Genauigkeit der Uhren hängt auch von der Genauigkeit des Quarzoszillators, gebildet aus Q1, C3 und C4, ab. Ein
Feinabgleich ist mittels C3 möglich. Hierfür kann die interne Normalzeituhr mit einer anderen genauen Uhr (z.B. über 24 h
mit der 20:00 Tagesschau Uhr) verglichen werden und durch Veränderung des Kondensators C3 angepasst werden (für
ältere Version der Software).
Die neuere Version der Software verfügt über einen Menüpunkt, über den der Abgleich schneller und genauer durchgeführt
werden kann (siehe Bedienung).
Die Auswertung des DCF77 Signals erfolgt über Messung der Zeit der "Low" Phasen des Empfängerausgangssignals (Zeit
zwischen der negativen und der positiven Flanke bzw. Zeit zwischen H/L und L/H Übergang). Diese Zeiten müssen in einem
einstellbaren Toleranzbereich um den Mittelwert liegen, um als Bit gewertet zu werden.
Die 2 getesteten Empfänger Module geben das demodulierte Signal recht unterschiedlich aus:
Bit logisch "0/1"
"0"
"1"
Gesendet
100ms
200ms
Pollin Modul
108ms
205ms
Funkuhr Modul
73ms
158ms
Aus diesem Grund sollten die Toleranzen nach dem erstmaligen Einschalten eingestellt werden.
Dieses geschieht über den Menüpunkt 4.Parameter entweder manuell oder automatisch.
Im automatischen Modus werden erst die Mittelwerte aus je 20 "0" und "1" Bits und dann die Toleranzen berechnet:
Logisch "0": Mittelwert +/- 25%
Logisch "1": Mittelwert +/- 12,5%
DCF77 Funk-Sternzeituhr
Gehäuse ohne Frontplatte
DCF Empfänger aus defektem Funkwecker
Gehäuse von oben
Gehäuse schräg von hinten