Bauplan Schaltplan DCF77 Signal Generator mit Atmel Tiny85

DCF77 Signal Ausschnitt mit Bitfolge 011110 in den Impulslängen codiert
Über einen Langwellensender bei 77.5 kHz sendet die Physikalisch Technische Bundesanstalt die gesetzliche Uhrzeit der Bundesrepublik Deutschland aus. Dieses Signal kann über hunderte von Kilometern mit einfachen Empfängern ausgewertet werden, somit steht praktisch überall im Bundesgebiet die genaue Uhrzeit zur Verfügung.

Das Zeitsignal wird dabei aus hochgenauen Cäsium Atomuhren abgeleitet, der theoretische Fehler entspricht dabei gerade einmal einer Abweichung von einer Sekunde in 30.000 Jahren.

Die Zeitinformation wird als amplitudenmoduliertes Signal über die Impulslänge codiert. Pro Sekunde wird genau ein Bit übertragen. Für ein 0-Bit wird die Trägeramplitude für 100ms auf 25% abgesenkt, für ein 1-Bit beträgt die Dauer der Absenkung 200ms. Jeweils in der 59. Sekunde erfolgt keine Trägerabsenkung, hierüber kann sich ein Empfänger auf den Beginn einer neuen Minute synchronisieren. (Details siehe http://de.wikipedia.org/wiki/DCF77)

Mit einem preiswerten DCF77 Modul kann man dieses Zeitsignal recht einfach empfangen, in der Regel liefern diese Bausteine ein Rechtecksignal, bei dem die Einschaltdauer der Trägerabsenkung entspricht.

Ein beliebtes Programmierprojekt für Mikrocontroller besteht nun darin, das DCF77 Signal zu decodieren und zB auf einem LCD Display anzuzeigen, also eine Funkuhr.

Das hier vorgestellte Programm macht hingegen praktisch genau das Gegenteil davon: Es erzeugt ein Rechtecksignal, in welchem Datums-und Uhrzeitinformationen im DCF77 Format codiert übertragen werden.

Dazu wird die Zeitinformation zuerst in ein 8 Bytes grosses Speicher-Array geschrieben und mit entprechenden Parity-Informationen sowie dem Start-Bit an Stelle 20 versehen, hierzu dient die Funktion dcf_calculate.

Danach werden die untersten 60 Bits sekundenweise auf einen Ausgangspin geführt, und zwar so, dass für ein 0-Bit der Ausgang 100ms lang auf High geht, für ein 1-Bit dagegen 200ms. In der Sekunde 59 wird der Ausgang dauerhaft auf Low gehalten. Der interne Takt für das Programm wird dabei durch Timer0 erzeugt,. Er ist so konfiguriert, dass 450 Interrupts pro Sekunde ausgeführt werden. Nach immer jeweils 45 Interrupts (entspricht genau einer 10tel Sekunde) wird dann ein Flag gesetzt, welches im Hauptprogramm dann zur Erzeugung des Ausgangssignals führt.

Nachdem eine Minute vergangen ist, wird eine Software-Uhr weitergezählt, um so die neuen Daten für die nächste Minute zu erhalten.

Mit diesem Programm kann man zum Beispiel einen selbstgebauten DCF77 Empfänger überprüfen, falls man Probleme beim Empfangdes echten Signals hat oder kein Empfängermodul besitzt.

Natürlich könnte man mit dem Ausgangssignal des Controllers auch einen entsprechenden 77.5kHz Oszillator ansteuern, und so versuchen, Funkuhren in der Nähe zu beeinflussen. Hiervon ist aber abzuraten, da die Aussendung von Funkwellen natürlich gewissen gesetzlichen Regelungen unterliegt...

Der Quellcode für einen Atmel Tiny85 kann hier heruntergeladen werden.

Bauteile für dieses Projekt - Anzeigen:
Aktive Bauelemente

Passive Bauelemente


Weitere Informationen,Grundlagen,Bauanleitung,Schaltplan, Links zum Thema
Anzeigen:

Neueste Artikel
Anzeigen:
Aktuelle Newsbeiträge
Sie sind Besucher Nr. 1212281