www.wernerhirsch.de
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