RTC mit DCF77 synchronisieren

Mit nachfolgendem Testaufbau und Programm synchronisiere ich ein Uhrenmodul DS1307 mit Datum und Uhrzeit des DCF77-Empfängers.

Warum synchronisiere ich überhaupt eine, mit einem größeren Gangzeitfehler (geschätzt 2-3 Sekunden pro Tag) behaftete DS1307-Uhr mit der Funkuhr, warum nehme ich die Funkuhr nicht alleine zur Datums- und Uhrzeitanzeige?

Ganz einfach:

  1. weil es viele Orte gibt, wo der Empfang des DCF77-Signals aufgrund der z.B. geographischen Lage sehr schlecht ist und dadurch falsche oder unvollständige Telegramme empfangen werden,
  2. weil der DCF77-Sender z.B. bei Sturm abgeschaltet werden kann,
  3. weil es in Entferunungen zwischen 600 und 1100 km vom Sender durch Überlagerung von Bodenwellen und Raumwellen zur Auslöschung des Signals kommen kann.

Dadurch, dass die RTC-DS1307 (oder ähnlich) meine Zeitbasis für weitere Anwendungen ist (z.B. Zeitstempel bei Datenlogger, datums- und uhrzeitabhängige Ein- und Ausschaltvorgänge, etc.), habe ich durch die Synchronisierung mit der DCF77, die z.B. einmal pro Stunde erfolgt, immer eine gültige und vor allem auch eine, über alle Zeiträume hinweg, richtige Uhrzeit zur Verfügung.


Testaufbau: 

Verwendete Bauteile:

  • 1 Arudino Uno
  • 1 DCF-Empfänger BN641138
  • 1 RTC DS1307
  • 1 LCD-Anzeige 20x04 mit I2C-Schnittstelle
  • 1 LED
  • 1 Widerstand 10 kOhm (Pullup-Widerstand R > VDD / 1 mA)
  • 2 Widerstände 10 kOhm
  • 1 Widerstand 220 Ohm


Beschaltung des DCF-Empfänger BN641138:

1: GND

2: VDD 5 V =

3: DCF-Ausgang Open Collector --> Arduino Digitalpin 2

4: DCF-Ausgang invertiert Open Collector --> nicht benutzt



Abbildung 3-1: Testaufbau zur Synchronisierung des Uhrenmoduls DS1307 mit des Uhrzeit des DCF77 Empfängers


Programm:

Das Programm hat folgende Funktionen:

  • Anzeige von Datum und Uhrzeit des RTC-Uhrenmoduls DS1307 am LCD-Display im Sekundentakt
  • Anzeige von Datum und Uhrzeit bei Empfang eines gültigen Telegramms des Funkempfänger DCF77
  • Synchronisierung der RTC bei erstmalig gültigem DCF77-Signal, anschließend immer zur vollen Stunde
  • Ist zur vollen Stunde das DCF77-Signal nicht verfügbar, wird bei nächster Verfügbarkeit synchronisiert
  • Anzeige der Uhrzeit der letzten Synchronisation (letzte Zeile am Display unter "Lastsync.: ....")
  • Anzeige der aktuellen Anzahl der empfangenen Impulse und des Logikpegels des letzten Impulses (in der nachfolgenden Abbildung 3-2 der 53. Impuls mit Logiklevel "0")
  • Anzeige von Fehlerbits des empfangenen DCF-Signals


Abbildung 3-2: LCD-Anzeige des Synchronisierprogramms


Das aktuelle Fehlerbit des letzten Telegramms wird in der zweiten Zeile, rechts außen angezeigt (im nachfolgenden Beispiel das "A").

Die Fehlerbits zeigen einen erkannten Empfangsfehler beim letzten Telegramm an, es erfolgt dann natürlich auch keine Dekodierung bzw. keine Aktualisierung der Anzeige von Datum und Uhrzeit.

Folgende Fehlerbits werden derzeit angezeigt:

  • A  ... Fehler bei der Anzahl der zu empfangenen Bits: Für ein vollständiges Telegramm müssen 59 Bits (0...58) empfangen werden (Ausnahme: 60 Bits, wenn 1 Schaltsekunde eingefügt wird)
  • P  ... Paritätsfehler: Die Paritätsüberprüfung erfolgt auf gerade Parität
  • W ... Wertefehler: Es wird überprüft, ob sich die Zahlenwerte für Jahr, Monat, Tag, Stunde, Minute und Sekunde in gültigen Bereichen befinden. Ein Monat "13" wird z.B. als Fehler erkannt.


Abbildung 3-3: LCD-Anzeige des Synchronisierprogramms mit Ausgabe des Fehlerbits


Zum Programm geht's hier: Sync.-Programm