DCF 77

Alle DCF-Routinen sind in der Bibliothek "LCD_Lib.cc" realisiert. Für den Gebrauch dieser Funktionen, ist die Bibliothek "DCF_Lib.cc" in das Projekt mit einzubinden.

 

RTC mit DCF77 Zeitsynchronisation

 

 

Das DCF77 Zeitsignal

 

Die logischen Informationen (die Zeitinformationen) werden zusätzlich zur Normalfrequenz (der Trägerfrequenz des Senders, also 77,5 kHz) übertragen. Das geschieht durch negative Modulation des Signals (Absenken der Trägeramplitude auf 25%). Der Beginn der Absenkung liegt jeweils auf dem Beginn der Sekunden 0...58 innerhalb einer Minute. In der 59. Sekunde erfolgt keine Absenkung, wodurch die nachfolgende Sekundenmarke den Beginn einer Minute kennzeichnet, und der Empfänger synchronisiert werden kann. Der logische Wert der Zeichen ergibt sich aus der Zeichendauer: 100 ms sind die "0", 200 ms sind die "1". Damit stehen innerhalb einer Minute 59 Bit für Informationen zur Verfügung. Davon werden die Sekundenmarken 1 bis 14 für Betriebsinformationen verwendet, die nicht für DCF77-Nutzer bestimmt sind. Die Sekundenmarken 15 bis 19 kennzeichnen die Sendeantenne, die Zeitzone und kündigen Zeitumstellungen an:

 

Von der 20. bis zur 58. Sekunde wird die Zeitinformation, für die jeweils nachfolgende Minute, seriell in Form von BCD-Zahlen übertragen, wobei jeweils mit dem niederwertigsten Bit begonnen wird:

 

Bits

Bedeutung



20

Startbit (ist immer "1")

21 - 27

Minute

28

Parität Minute

29 - 34

Stunde

35

Parität Stunde

36 - 41

Monatstag

42 - 44

Wochentag

45 - 49

Monat

50 - 57

Jahr

58

Parität Datum

 

Das bedeutet, daß der Empfang mindestens eine volle Minute laufen muss, bevor die Zeitinformation zur Verfügung stehen kann. Die innerhalb dieser Minute dekodierte Information ist lediglich durch drei Paritätsbits gesichert. Somit führen bereits zwei fehlerhaft empfangene Bits zu einem auf diese Weise nicht zu erkennenden Übertragungsfehler. Bei höheren Anforderungen können zusätzliche Prüfmechanismen verwendet werden, z.B. Plausibilitätsprüfung (ist die empfangene Zeit innerhalb der zulässigen Grenzen) oder mehrmaliges Lesen der DCF77-Zeitinformation und Vergleich der Daten. Eine andere Möglichkeit wäre, die DCF-Zeit mit der aktuellen Zeit der RTC vergleichen und nur eine bestimmte Abweichung zulassen. Dieses Verfahren geht nicht nach dem Programmstart, da die RTC erst gesetzt werden muss.

 

 

Beschreibung des Beispielprogramms "DCF_RTC.cc"

 

Das Programm DCF_RTC.cc ist eine Uhr, die über DCF77 synchronisiert wird. Die Uhrzeit und das Datum werden  auf einem LCD-Display angezeigt. Die Synchronisation erfolgt nach dem Programmstart, und dann täglich zu einer im Programm festgelegten Zeit (Update_Stunden, Update_Minuten). Es werden zwei Libraries verwendet: DCF_Lib.cc und LCD_Lib.cc.

Für den Funkempfang des Zeitsignals ist ein DCF77-Empfänger erforderlich. Der Ausgang des DCF-Empfängers wird an den Eingangsport (Mega32: PortD.7 - M128: PortF.0 AVR32Bit: P27(PA15) ) angeschlossen. Zuerst muss der Anfang einer Zeitinformation gefunden werden. Es wird auf die Pulslücke (59.Bit) synchronisiert. Danach werden die Bits im Sekundentakt aufgenommen. Es erfolgt eine Parity-Prüfung nach der Minuten und Stunden Information und ebenfalls am Ende der Übertragung. Das Ergebnis der Parity-Prüfung wird im DCF_ARRAY[6] gespeichert. Zur Übergabe der Zeitinformation wird das DCF_ARRAY[0..6] verwendet. Nach dem Empfang einer gültigen Zeitinformation wir die RTC mit der neuen Zeit gesetzt, und läuft dann selbständig weiter. Die RTC als auch die DCF77-Dekodierung ist über einen 10ms Interrupt gesteuert. Diese Zeitbasis ist von der Quarzfrequenz des Controllers abgeleitet. DCF_Mode steuert den Ablauf für die DCF77-Zeitaufnahme.

 

Ändern des Eingangs Pin

 

Der verwendete Eingangsport ist als DCF_IN in der Bibliothek "DCF_Lib.cc" definiert.

 

 

Tabelle DCF-Modi

 

 

DCF_Mode

Beschreibung



0

kein DCF77-Betrieb

1

Puls suchen

2

Synchronisation auf Frameanfang

3

Daten dekodieren und speichern, Paritätsprüfung

 

 

RTC (Real Time Clock)

 

Die RTC wird mit einem 10ms Interrupt gesteuert und läuft im Hintergrund unabhängig vom Anwenderprogramm. Jede Sekunde wird die Anzeige auf dem LCD-Display ausgegeben. Das Anzeigeformat ist 1. Zeile: Stunde : Minute : Sekunde

2. Zeile: Tag . Monat . Jahr

 

Die LED1 blinkt einmal pro Sekunde.

Nach dem Programmstart, beginnt die RTC mit der festgelegten Uhrzeit. Das Datum ist auf Null gesetzt und zeigt an, daß noch kein DCF-Zeitabgleich erfolgt ist. Nach dem Empfang der DCF-Zeit wird die RTC mit den aktuellen Daten aktualisiert. Die RTC ist nicht batteriegepuffert, d.h., die Uhrzeit läuft ohne Spannungsversorgung des Controllers nicht weiter.