Hallo,
wir kennen das ja alle, manchmal ist der DCF-77-Zeitzeichensender nicht so gut zu empfangen. Das passiert meistens gerade dann, wenn man seine gerade fertiggestellte Selbstbau-DCF-Funkuhr testen möchte.
Deswegen möchte ich heute ein kleines DCF-Decoder-Testprogramm mit der AVR MCU ATTiny2313 vorstellen.
Das folgende Programm umgeht diese Empfangs-Schwierigkeiten und bietet jederzeit die Möglichkeit, eine Decodierschaltung auf einwandfreie Erkennung der Sekundenmarken auf Low- und High-Pegel hin zu testen, indem es das DCF-Signal mit sauberen Flanken simuliert.
Dazu wurden (zunächst) die Sekundenmarken-Werte von ein paar Minuten eines tatsächlich zugrundeliegenden Längstwellenempfangsprotokolls auf Tonbandcassette in ein Array programmiert, worauf hernach darauf zugegriffen wird, bzw. was noch selbst leicht erweitert werden kann, wenn die Zusammenhänge des DCF-Codes besser bekannt sind.
Es liegt ein allerseits bekanntes Uhrenprogramm mit Interruptserviceroutine und Jobflags zugrunde.
Die Werte, also Nullen und Einsen eines Pointerregisters (nicht nullterminiert, daher Besonderheit!)
werden zu jeder Sekunde nach Durchlaufen einer Mehrfachverzweigung einem Ausgabeport für die Dauer der Zeitschleifen (ca. 100 bzw. 200 Millisekunden lang) übergeben.
(Hier Registerwerte ca. 126 bis 127 für logisch "Null" und 248 bis 249 für logisch "Eins". Auch die trickreichen Paritybits entsprechen dem verwendeten Originaltonbandmitschnitt des Direktmischer-Empfängers, der mit einem Pfeifton von ca. 2 kHz den Sender hörbar machte. Siehe auch Bild "DCF-Oszillogramm", wo man die unterschiedlich breiten Austastlücken und die ausgelassene 59. Sekundenmarke am rechten Bildrand gut erkennen kann. Leider ist diese Empfängerschaltung thermisch nicht so stabil, daß der Sekundentakt daraus über einen längeren Zeitraum direkt abgeleitet werden könnte. Diesbezügliche Experimente auch mit Pufferstufen liefen nur wenige Minuten, funktionierten im Prinzip aber, dazu gibt es auch ein kleines Video.)
Damit werden dann auf INTO und INT1 die Flankeninterrupts zur Triggerung der Zeitauswertung bei der angeschlossenen Decodierschaltung ausgelöst. ( Ja, die hier verwendete Decodierschaltung benutzt beide Interrupts, die beiden Ports (PD2 und PD3) müssen über "Entkoppelwiderstände" von ca. 180 Ohm mit dem Empfangsmodul verbunden werden, nur ein einziger Eingang an der MCU reicht hier nicht.)
Simultan dazu kann man das Hochzählen der Sekunden und die Bit-Werte des DCF-Telegramms auf einem LCDisplay ablesen. Dazu wird der Z-Pointer-Adressen-Increment-Registerwert und nicht der Wert des Sekundenregisters der Uhrenschaltung verwendet.
Für die ausgelassene 59. Marke wird eine "3" ins Array programmiert, die dann im Vergleichsdurchlauf ein "x" auf das Display zaubert.
Nach Ablauf der gesamten im Array gespeicherten Werte wird das Display
gelöscht (- ausnahmsweise mit "Display Clear" der LCD-Initialisierungsroutine - ), und der Vorgang beginnt von vorne.
Bei einer hier auch noch verwendeten DCF-Decodierschaltung -
selbstredend auch mit dem ATTiny2313 - kommt man so tatsächlich bis zur Synchronisation und Übernahme der vorprogrammierten DCF-Zeit.
Diese beginnt dann mit Datumsangabe nach den abgelaufenen zwei Minuten natürlich wieder von vorne.
Auf den angehängten Textfiles, die vom Hyperterminal abkopiert worden sind, erkennt man zunächst den "Counter"-Zustand, dann erfolgt nach einigen zu ignorierenden Fehlermeldungen der String "Synchronisation". Daran kann gesehen werden, daß tatsächlich dann die Uhrzeit des DCF-Telegramms übernommen wurde.
Viel Spaß!
Euer Oskar01
P.S.:
Die Decodierschaltung von ((C)2001 by Gerhard Schmidt * report bugs to info@avr-asm-tutorial.net * ) läuft trotz grenzwertiger Verwendung des ATTiny2313 mit 10-MHz-CPU-Takt und fast 100-prozentiger Speicherplatzausnutzung auch außerhalb des STK-500-Boardes im Testaufbaus zusammen mit dem MAX232 auf Anhieb.
Nachteil dabei, man benötigt zur Einstellung der Features die serielle Schnittstelle und ein Terminalprogramm.
Demnächst mehr, falls gewünscht......
wir kennen das ja alle, manchmal ist der DCF-77-Zeitzeichensender nicht so gut zu empfangen. Das passiert meistens gerade dann, wenn man seine gerade fertiggestellte Selbstbau-DCF-Funkuhr testen möchte.
Deswegen möchte ich heute ein kleines DCF-Decoder-Testprogramm mit der AVR MCU ATTiny2313 vorstellen.
Das folgende Programm umgeht diese Empfangs-Schwierigkeiten und bietet jederzeit die Möglichkeit, eine Decodierschaltung auf einwandfreie Erkennung der Sekundenmarken auf Low- und High-Pegel hin zu testen, indem es das DCF-Signal mit sauberen Flanken simuliert.
Dazu wurden (zunächst) die Sekundenmarken-Werte von ein paar Minuten eines tatsächlich zugrundeliegenden Längstwellenempfangsprotokolls auf Tonbandcassette in ein Array programmiert, worauf hernach darauf zugegriffen wird, bzw. was noch selbst leicht erweitert werden kann, wenn die Zusammenhänge des DCF-Codes besser bekannt sind.
Es liegt ein allerseits bekanntes Uhrenprogramm mit Interruptserviceroutine und Jobflags zugrunde.
Die Werte, also Nullen und Einsen eines Pointerregisters (nicht nullterminiert, daher Besonderheit!)
werden zu jeder Sekunde nach Durchlaufen einer Mehrfachverzweigung einem Ausgabeport für die Dauer der Zeitschleifen (ca. 100 bzw. 200 Millisekunden lang) übergeben.
(Hier Registerwerte ca. 126 bis 127 für logisch "Null" und 248 bis 249 für logisch "Eins". Auch die trickreichen Paritybits entsprechen dem verwendeten Originaltonbandmitschnitt des Direktmischer-Empfängers, der mit einem Pfeifton von ca. 2 kHz den Sender hörbar machte. Siehe auch Bild "DCF-Oszillogramm", wo man die unterschiedlich breiten Austastlücken und die ausgelassene 59. Sekundenmarke am rechten Bildrand gut erkennen kann. Leider ist diese Empfängerschaltung thermisch nicht so stabil, daß der Sekundentakt daraus über einen längeren Zeitraum direkt abgeleitet werden könnte. Diesbezügliche Experimente auch mit Pufferstufen liefen nur wenige Minuten, funktionierten im Prinzip aber, dazu gibt es auch ein kleines Video.)
Damit werden dann auf INTO und INT1 die Flankeninterrupts zur Triggerung der Zeitauswertung bei der angeschlossenen Decodierschaltung ausgelöst. ( Ja, die hier verwendete Decodierschaltung benutzt beide Interrupts, die beiden Ports (PD2 und PD3) müssen über "Entkoppelwiderstände" von ca. 180 Ohm mit dem Empfangsmodul verbunden werden, nur ein einziger Eingang an der MCU reicht hier nicht.)
Simultan dazu kann man das Hochzählen der Sekunden und die Bit-Werte des DCF-Telegramms auf einem LCDisplay ablesen. Dazu wird der Z-Pointer-Adressen-Increment-Registerwert und nicht der Wert des Sekundenregisters der Uhrenschaltung verwendet.
Für die ausgelassene 59. Marke wird eine "3" ins Array programmiert, die dann im Vergleichsdurchlauf ein "x" auf das Display zaubert.
Nach Ablauf der gesamten im Array gespeicherten Werte wird das Display
gelöscht (- ausnahmsweise mit "Display Clear" der LCD-Initialisierungsroutine - ), und der Vorgang beginnt von vorne.
Bei einer hier auch noch verwendeten DCF-Decodierschaltung -
selbstredend auch mit dem ATTiny2313 - kommt man so tatsächlich bis zur Synchronisation und Übernahme der vorprogrammierten DCF-Zeit.
Diese beginnt dann mit Datumsangabe nach den abgelaufenen zwei Minuten natürlich wieder von vorne.
Auf den angehängten Textfiles, die vom Hyperterminal abkopiert worden sind, erkennt man zunächst den "Counter"-Zustand, dann erfolgt nach einigen zu ignorierenden Fehlermeldungen der String "Synchronisation". Daran kann gesehen werden, daß tatsächlich dann die Uhrzeit des DCF-Telegramms übernommen wurde.
Viel Spaß!
Euer Oskar01
P.S.:
Die Decodierschaltung von ((C)2001 by Gerhard Schmidt * report bugs to info@avr-asm-tutorial.net * ) läuft trotz grenzwertiger Verwendung des ATTiny2313 mit 10-MHz-CPU-Takt und fast 100-prozentiger Speicherplatzausnutzung auch außerhalb des STK-500-Boardes im Testaufbaus zusammen mit dem MAX232 auf Anhieb.
Nachteil dabei, man benötigt zur Einstellung der Features die serielle Schnittstelle und ein Terminalprogramm.
Demnächst mehr, falls gewünscht......