Zurueck

DCF77-Simulator


IMG_1275

Wer gelegentlich Funkuhren baut, die von dem Zeit- zeichensender DCF77 in Mainflingen angesteuert werden, kennt den Sachverhalt, dass nicht immer über den ganzen Tag hinweg ein Empfang des Senders gegeben ist. Auch hängen die Empfangsbedingungen oft von der eigenen Lokalität ab. Liegt der Laborplatz tief im Keller oder mitten im Haus kann man da schon einmal Pech haben. Will man gerade dann die Schaltung testen, muss man entweder den ganzen Krempel ans Fenster schaffen und/oder warten bis die Empfangsbedingungen besser sind. Hier schafft der DCF77-Simulator Abhilfe.

Um es vorweg zu sagen. Es wird kein 77,5 kHz-Träger generiert, sondern nur das niederfrequente Zeittelegramm. Denn im Normalfall verwendet man wohl ein fertiges Empfangsmodul, wie man es z.B. von Conrad oder Reichelt bekommt und konzentriert sich darauf die Uhrenlogik selbst zu bauen. Wer jedoch einen leistungsfähigen Empfänger selbst entwickelt, der hat wahrscheinlich auch einen geeigneten Messsender zur Verfügung.

Die Grundlagen habe ich bereits in dem Artikel " DCF77 Funkuhr mit dem BASCOM" beschrieben. Ich bitte Sie ggf.  dort nachzulesen.

Die Software

ProgrammIm Wesemtlichen laufen drei Prozesse ab:

* ein komplettes Zeittelegramm erstellen (Unterprogramm Zeittelegramm),
* das Zeittelegramm ausgeben (macht das Hauptprogramm),

und

*eine interne Uhr (Interruptroutine Kurzzeit)

die im Folgenden näher beschrieben werden:


Das Hautprogramm
bildet diese Prozesse ab. Zuvor werden den Variablen Stunde, Minute, usw. Werte zugewiesen. Dann erfolgt  in einer Do/Loop-Schleife ein Aufruf des Unterprogramms Zeittelegramm, welches ein komplettes Zeittelegramm in die Stringvariable Telegramm übergibt. Diese wird in der folgenden For/Next-Schleife Zeichen für Zeichen abgearbeitet. Für jede „0“ wird Port PB.0 für 100 mS auf 0 gesetzt, für jede „1“ wird Port PB.0 für 200 mS auf 0 gesetzt. Die verbleibende Zeit bis zur nächsten Sekunde bzw. dem nächsten Zeichen wird Port PB.0 auf log. 1 gesetzt. Eine Ausnahme ist die 59. Sekunde mit dem Zeichen „ „(Space). Hier bleibt Port PB.0 auf log. 1. (Minutenmarke). Port Pb.1 wird immer invertiert gesetzt

Die interne Uhr Kurzzeit
Kurzzeit ist eine Interruptroutine die vom Timer0 alle 100 mS aufgerufen wird. Sie zählt die Variablen Stunde, Minute, Sekunde, Tag, Wtag (Wochentag), Monat und Jahr hoch.

Erstellen des Zeittelegramms mit Zeittelegramm
Zunächst generiert das Unterprogramm Zeittelegramm ein komplettes Zeittelegramm aus den in Kurzzeit generierten Variablen. Dieses Zeittelegramm ist in dem String (Zeichenkettenvariable) Telegramm mit einer Länge von 60 Zeichen gespeichert. Dabei symbolisieren die Zeichen „0“ und „1“ die Zustände des später auszugebenden Signals. Eine Ausnahme bildet die 59. Sekunde entsprechend dem 59. Element im String. Da an dieser Stelle keine Absenkung des Signals erfolgt, findet sich hier das Zeichen Space „ „.
 

Das folgende Beispiel zeigt ein typisches Zeittelegramm für Dienstag den 5.3.13, 14:12:

0000000000000000000101001000001010010100001011000110010000 0

Das Unterprogramm Zeittelegramm benötigt seinerseits zwei Unterprogramme. Nämlich das Unterprogramm Kodieren und das Unterprogramm Parität.

Kodieren
bekommt seine Eingangswerte wie Stunde,  Minute, ect. mit der Integervariablen  Wert übergeben. Kodieren überprüft diese Variable auf das Vorhandensein der Wertigkeiten 80, 40, 20, 10, 8, 4, 2 und  1. Dies macht es, indem es von Wert die entsprechende Wertigkeit  abzieht. Ist das Ergebnis dieser Subtraktion kleiner als Null wird der Stringvariablen Teil  eine „0“ zugefügt, wenn nicht dann wird der Stringvariablen Teil  eine „1“ zugefügt.  Teil  ist nach Verlassen von Kodieren also immer achtstellig und muss von der aufrufenden Routine Zeittelegramm auf die erforderliche Länge gestutzt werden (und zwar von Links nach Rechts).

Parität
erzeugt, wie sein Name vermuten lässt, ein Paritätsbit. Eingangs- und Ausgangsvariable ist  die Stringvariable Teil. Als Eingangsvariable enthält sie den aus den zu prüfenden Elementen „0“ oder „1“ zusammengesetzten String, als Ausgangsvariable das ermittelte Paritätsbit. Wieder mit „0“ oder „1“ als Stringelement. Wie testet man ob eine Zahl gerade oder ungerade ist? Nun, wenn man diese Zahl durch Zwei teilt und das Ergebnis keine Nachkommastellen hat, dann ist diese Zahl gerade. Eine ungerade  Zahl hat, teilt man sie durch Zwei, immer Nachkommastellen. Genauso verfahren wir mit der Variablen Paritaet.  Die Funktion Frac() unter BASCOM gibt die Nachkommastellen einer Zahl zurück. Hat die Zahl keine Nachkommastellen gibt Frac() den Wert Null zurück. Wir weisen der Singlevariablen Paritaet das Ergebnis  von Frac() zu und prüfen anschließend ob Paritaet gleich Null ist. In diesem Fall wird der Variablen Teil der Wert Null zugewiesen, andernfalls weisen wir Teil eine Eins zu. Damit enthält jetzt Teil die Aussage, ob Paritaet eine gerade oder ungerade Zahl enthielt. Das aufrufende Unterprogramm Zeittelegramm ergänzt den Telegrammstring um Teil.

Die Hardware

130520aa-001

Die Hardware ist ehr simpel. Ein ATMEL ATTiny45 mit entsprechender Programmierung, ein Widerstand, ein Quarz, vier Kondensatoren. Ggf. noch eine Stromversorgung. Das ist schon alles. Der Aufbau erfolgte auf einem Breadboard. Das obige Bild zeigt den Schaltplan. Der ATTiny45 verfügt über 4 KB Flashspeicher. Eine ganze Menge für den 8-Pin Winzling. Das Programm ist unter BASCOM-AVR  entwickelt worden und liegt sowohl im Sourcecode als auch fertig kompiliert vor.  Der Sourcecode umfasst weniger als 4kB und kann daher auch mit der kostenfreien Demoversion des BASCOM kompiliert werden. An dem Port PB.1 wird das Zeittelegramm und an Port PB.0 das invertierte Zeittelegramm ausgegeben. Wer keinen Wert auf einen genau gehenden Simulator legt, kann den Quarz auch weglassen. Die folgenden Bilder  zeigen Screenshoots des AVR Studio 4 für die einzustellenden Fuses. Einmal für den Betrieb mit dem internen Oszillator und einmal für die Verwendung eines 8MHz-Quarzes.

Fuses45InternFuses45Quarz                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
Software Download


Zurueck