ebps.de.vu > Schaltungen > AVR > erweiterter DCF77-Simulator

Erweiterter DCF77-Simulator

Beschreibung

Dieser erweiterte DCF77-Simulator enthält eine eingebaute Uhr mit Kalender, so dass ein 100% konformes DCF77-Signal am Ausgang bereitsteht. Die Software erkennt automatisch die bevorstehende Umstellung von Sommer- auf Winterzeit oder umgekehrt und setzt die entsprechenden DCF77-Bits. Zusätzlich können manuell die Bits zur Ankündigung einer Schaltsekunde am Ende der Stunde und das Rufbit gesetzt werden. Die Einstellung von Uhrzeit, Datum und Wochentag erfolgt entweder über die 12er-Tastatur oder per RS232, auch ein Auslesen von Uhrzeit und Datum per RS232 ist möglich. Der Simulator kann auch ganz ohne Tastatur und LCD aufgebaut und nur über die RS232-Schnittstelle gesteuert werden.

Es stehen insgesamt vier Ausgänge zur Verfügung, invertiert und nicht invertiert jeweils als 5 V-Signal und als Open-Collector-Ausgang.

Aufbau

Die Schaltung ist recht einfach gehalten, sie besteht aus einem ATTiny2313-Controller, dem Tastenfeld und dem LCD sowie einem MAX232 für die RS232-Schnittstelle und einem Spannungsregler, damit die Schaltung mit einer 9 V-Batterie betrieben werden kann. Die Tastatur habe ich aufgeschraubt und die Tasten wie im Schaltplan zu sehen neu verteilt, soll die Tastatur ohne Änderungen verwendet werden, muss die Tastenbelegungs-Tablle im Assemblerprogramm entsprechend geändert werden.

Das im Schaltplan eingezeichnete LCD hat nicht die üblicherweise für HD44780-kompatible LCDs verwendete Anschlussbelegung, wenn Sie ein anderes LCD verwenden (jedes HD44780-kompatible LCD mit 2x16 Zeichen sollte funktionieren) sollten Sie die Pin-Nummern im Schaltplan ignorieren und sich an die Namen der Anschlüsse halten. Auch der Widerstand für die Kontrastspannung muss je nach verwendetem LCD angepasst werden (die Displaymodule von Reichelt benötigen für gewöhnlich ca. 1 kΩ), es kann auch ein Poti mit ca. 5 kΩ eingebaut werden. In meinem Aufbaue habe ich außerdem die Versorgungsspannung über zwei Dioden zugeführt, damit ich die Schaltung wahlweise mit einer 9 V-Batterie oder einem externen Netzteil betrieben kann, ohne dass die Batterie geladen wird, wenn versehentlich beides angeschlossen ist. Diese zwei Dioden sind im Schaltplan nicht eingezeichnet und auch nicht nötig, wenn nur eine Spannungsquelle existiert.

Beim Programmieren des Controllers ist zu beachten, dass auch das EEPROM programmiert werden muss. Sofern das EESAVE-Fusebit nicht gesetzt ist, muss zuerst der Programmspeicher und dann das EEPROM programmiert werden, weil der EEPROM-Inhalt beim Chip-Erase gelöscht wird.

Bedienung

mit Tastatur und LCD

Nach dem Einschalten beginnt der Simulator mit der zuletzt eingestellten Uhrzeit. In der oberen Displayzeile werden der Wochentag, die aktive Zeitzone (S = Sommer- oder W = Winterzeit), evtl. aktivierte Schaltsekunden- (LS = Leap Second) oder Rufbits (CA = Call) sowie das zuletzt gesendete Bit und die Sekunde angezeigt. Die untere Displayzeile zeigt das Datum und die aktuelle Uhrzeit. Bitte beachten Sie, dass immer Uhrzeit und Datum für die folgende Minute gesendet werden, das während einer Minute gesendete DCF77-Telegramm ist der währenddessen angezeigten Zeit also um eine Minute voraus. Eine angeschlossene Funkuhr muss die gleiche Zeit wie das LCD des Simulators anzeigen.

Um eine neue Uhrzeit und/oder ein neues Datum einzustellen, kann die Taste '1' betätigt werden. Jetzt kann zunächst das neue Datum und die neue Uhrzeit eingegeben werden, Fehler bei der Eingabe können mit der *-Taste (Backspace) korrigiert werden, enthält eine Anzeigestelle bereits die richtige Ziffer kann mit der #-Taste (Enter) zur nächsten Stelle gesprungen werden. Wird an der ersten Stelle (Jahr Zehner) die *-Taste betätigt, wird die Eingabe abgebrochen. Nach der Eingabe der letzten Stelle (Sekunden Einer) ist der Cursor nicht mehr zu sehen, die Eingabe kann nun mit # bestätigt werden. Ist die Eingabe ungültig, wird "Invalid setting!" angezeigt, mit * kann die Eingabe korrigiert werden. Bei einer korrekten Eingabe wird als nächstes der Wochentag eingestellt, dabei entspricht 1 = Montag, 2 = Dienstag usw. bis 7 = Sonntag. Der Wochentag ist nicht vom Datum abhängig, es kann für jedes Datum jeder beliebige Wochentag gewählt werden. Die Sommerzeitumstellung funktioniert aber nur dann korrekt, wenn der Wochentag richtig eingestellt ist. Mit * gelangt man zurück zur Eingabe von Datum und Uhrzeit, mit # wird die Auswahl bestätigt, die Einstellungen für das nächste Einschalten gespeichert und der Simulator beginnt, das erste Telegramm mit den neuen Einstellungen zu senden. Eine Ausnahme gibt es im letzten Sonntag im Oktober bei Uhrzeiten zwischen 2:00 und 2:59: hier ist nicht eindeutig, ob es sich um Sommer- oder Winterzeit handelt, deshalb wird vor dem Übernehmen der Einstellungen nachgefragt. In allen anderen Fällen wird automatisch berechnet, ob die eingegebenen Werte Sommer- oder Winterzeit sind.

Durch einen Druck auf die Taste '2' wird eine Schaltsekunde am Ende der Stunde angekündigt und eingefügt, im Display erscheint die Anzeige LS für "Leap Second". Diese Einstellung wird nach dem Einfügen der Schaltsekunde automatisch zurückgesetzt, alternativ kann sie vorher durch erneutes Drücken der Taste '2' zurückgenommen werden.

Mit der Taste '3' wird das Rufbit ein- und ausgeschaltet. Ist das Rufbit gesetzt, erscheint im Display die Anzeige CA für "Call".

über die RS232-Schnittstelle

Zur Steuerung des Simulators können verschiedene Befehle per RS232 gesendet werden. Jeder Befehl muss mit einem Zeilenumbruch (CR, LF oder beides) abgeschlossen werden. Nach jedem Befehl antwortet der Simulator mit OK, wenn er erfolgreich ausgeführt wurde oder mit ERROR im Fehlerfall (z.B. unbekannter Befehl, Syntaxfehler, ungültige Uhrzeit/Datum). Eine Ausnahme bildet der ?-Befehl (siehe unten). Die Antworten werden immer mit einem Zeilenumbruch (CR+LF) abgeschlossen. Wird eine leere Zeile (nur Zeilenumbruch) gesendet, gibt es keine Antwort. Bei Buchstaben spielt Groß- oder Kleinschreibung keine Rolle. Folgende Befehle werden unterstützt:

Befehl Erklärung
T=20YY-MM-DD hh:mm+Z WD Einstellen von Datum, Uhrzeit und Wochentag. Dabei ist YY=Jahr, MM=Monat, DD=Tag, hh=Stunde und mm=Minute, alle Werte zweistellig (ggf. mit führender Null). Z steht für die Zeitzone (1 für Winter-, 2 für Sommerzeit), WD ist der Wochentag (die ersten zwei Buchstaben des englischen Namens). Alle anderen Zeichen des Befehls sind genau wie angegeben zu senden.
LS=x Senden einer Schaltsekunde am Ende der Stunde ein- oder ausschalten. x ist entweder 1 (einschalten) oder 0 (ausschalten).
CA=x Rufbit ein- oder ausschalten. x ist entweder 1 (einschalten) oder 0 (ausschalten).
? Aktuelles Datum und aktuelle Uhrzeit abfragen. Es wird eine Zeichenfolge mit der gleichen Syntax wie der Befehl zum Setzen von Uhrzeit/Datum zurückgegeben.

Fotos

[Foto]
800 | 1600
Die fertig aufgebaute Schaltung im Gehäuse. Die Pins der Tastatur ragen durch unbenutzte Löcher in der Lochrasterplatine, so dass von oben eine Buchsenleiste an Kabeln aufgesteckt werden konnte.
[Foto]
800 | 1600
Die Unterseite der Schaltungsplatine.
[Foto]
800 | 1600
Fertig eingebaut in das Gehäuse. Links befinden sich die Anschlüsse als 4 mm-Bananenbuchsen und "Gnubbel" für Krokoklemmen, rechts der Schalter und die RS232-Buchse. Aufgrund der regelmäßig aufblinkenden roten LED sieht das Ganze aus wie eine Bombe aus einem schlechten Film ;-).
[Foto]
800 | 1600
LCD-Anzeige beim Einstellen von Uhrzeit und Datum.
[Foto]
800
Bedeutung der verschiedenen Anzeigen auf dem LCD.

Siehe auch