Die Physikalisch-Technische-Bundesanstalt (PTB) sendet über einen Langwellensender bei 77,5 kHz die Uhrzeit (Atomuhr) für die Bundesrepublik Deutschland aus.
In vielen privaten Haushalten befinden sich heute sogenannte DCF-Funkuhren, die über den Langwellensender automatisch zwischen Sommer- und Winterzeit umschalten und ihre angezeigte Zeit in festgelegten Zeitabständen mit der Atomuhr abgleichen.
Die Zeitinformation wird über die Impulslänge codiert; dabei wird pro Sekunde genau ein Bit übertragen, insgesamt 60 Bits pro Minute (siehe Zeitprotokoll). Ein LOW-Bit (0-Bit) wird durch Absenkung der Trägeramplitude für 100 ms dargestellt, ein HIGH-Bit (1-Bit) durch Absenkung für 200 ms.
In der 59. Sekunde erfolgt keine Absenkung; dadurch kann sich ein Empfänger auf den Beginn einer neuen Minute synchronisieren.
Am Ausgang eines DCF-Moduls lässt sich das Signal abnehmen. Führt man es an den Eingang einer kleinen LED-Transistor-Schaltung, dann lässt sich über das Aufblinken der LED im Sekundentakt die Funktion des Moduls optisch überprüfen oder man legt das Ausgangssignal an den Eingang eines Oszilloskops.
In dieser Übung wird das Verhalten eines DCF-Moduls mit Hilfe einer LED-Schaltung näher untersucht.
Empfang eines DCF Moduls mit einer LED-Schaltung überprüfen | |
Material |
|
Aufgaben |
|
Schaltungsskizze
Ergebnisse
Die maximale Betriebsspannung des DCF-Moduls liegt nach Datenblatt des Herstellers zwischen 1,2 V und 5 V.
Die Ausgangsströme bei "HIGH" und "LOW" sind mit > 5 µA angegeben.
Die Impulsbreite für logisch "0" liegt zwischen 40 und 130 ms, für logisch "1" zwischen 140 und 230 ms.
Wenn alles richtig aufgebaut wurde, sollte die LED im Sekundentakt blinken und alle 60 Sekunden einen "Aussetzer" anzeigen.
Bei genauer Beobachtung sollte erkennbar sein, dass die Leuchtdauer der LED variiert; es gibt kürzer und etwas längere Blinkzeichen.
Die Beobachtungen aus Übung 1 lassen sich mit einem Oszilloskop genauer analysieren. Verbindet man die Signalleitung des Moduls anstelle mit einer LED-Transistorschaltung mit einem Oszilloskopkanal, erhält man ein sehr genaues Zeitdiagramm (Abb. 2). Es bestätigt die Beoabchtungen an der LED.
Die Aufnahme der Abb. 2 ist mit einem PicoScope2000 an einem DCF Empfangsmodul der Fa. ELV entstanden. Der Open-Collector-Ausgang ist mit einem 220 kOhm Pull-Up-Widerstand (Abb. 1) zur Versorgungsspannung +5V versehen.
Schaut man sich die DCF77-Zeitinformation etwas genauer an, erkennt man sehr deutlich die zwei unterschiedlichen Absenkungen der Trägeramplitude: 100ms für eine "0" und 200ms für eine "1".
Ein invertiertes Zeitsignal erhält man mit dem DCF-Modul der Fa. Reichelt aus Übung 1. Es reagiert deutlich empfindlicher auf Störsignale (z. B. vom Monitor, Drucker etc.) und Restwelligkeit in der Spannungsversorgung; der Abstand des Moduls zu Störquellen sollte deshalb möglichst groß gehalten werden. Als Energiequelle wurde ein Batterieblock (3x AA) verwendet.
Die Zeitinformationen beginnen ab Bit 21. Bit 20 ist immer "1".
Dekodiert man die in Nullen und Einsen ausgedrückte Zeitinformation manuell, muss man wissen, dass das LSB zuerst geschrieben wird. Die Zeitinformation aus Abb. 5 dekodiert ergibt:
In dieser Übung wird mit einem Propeller-Board und der Programmiersprache C/C++ gearbeitet. Die Eigenschaften eines Mehrkern-Prozessors werden ausgenutzt.
Das Zeitdiagramm eines DCF77-Signals setzt sich aus Nullen (100ms Impuls) und Einsen (200ms Impuls) zusammen (Abb. 4, Abb. 5).
Bleibt zu klären, wie man ein HIGH- oder LOW-Signal mit Hilfe eines Propeller-Controllers (geht auch mit anderen Controllern;-)) bestimmen kann. Dazu wird eine einfache Methode benutzt, die man mit Hilfe des Pseudocodes so beschreiben könnte:
Die ermittelten Werte der beiden Variablen ZaehleLowSignal bzw. ZaehleHighSignal geben die Mikrosekunden an, die das Signal auf HIGH gezogen war und sind damit ein Maß zur Bestimmung für eine "0" oder eine "1". Das zeitlängere Signal entspricht dem 200ms Impuls und steht damit für eine "1", entsprechend das zeitkürzere für die "0".
Die Impulsbreiten werden über einen Zufallsgenerator vom Multicore-Propeller-Controller über COG1 erzeugt und an P10 des Prop-BoE ausgegeben; es wird nicht mit dem DCF77-Modul gearbeitet. Das Signal wird dann an den Eingang P0 gelegt und von COG0 ausgewertet. Durch Einsatz des Zufallsgenerators sind die erzeugten Impulslängen unterschiedlich groß.
Schaltungsaufbau
Impulsbreite messen | |
Material |
|
Aufgaben |
|
Das Unterprogramm "Rechteck" wird von COG1 permanent ausgeführt, während COG0 die Impulslängenbestimmung vornimmt. COG0 muss nicht explizit gestartet werden; er wird automatisch mit dem Start eines C/C++ Programms initialisiert.
Terminalausgabe
In dieser Übung wird ein Programm entwickelt, mit dem sich das Synchronisationssignal (Bit 0) bestimmen lässt. Es ist die Stelle im Zeitprotokoll, bei der das LOW-Signal eine Impulsbreite von mehr als 1 Sekunde aufweist (siehe Abb. 5).
Synchronisationssignal finden | |
Material |
|
Aufgaben |
|
Schaltungsaufbau
Einschub: Signalprüfung mit einem USB-Oszilloskop
Nach Anschluss der Versorgungsspannung und einer Wartezeit von ca. 1 Minute sollte ein sauberes strörungsfreies DCF-Zeitsignal empfangen werden können. Ggf. muss der Standort verändert werden, bis ein störungsfreies Signal empfangen werden kann. Mit Hilfe eines USB-Oszilloskops wird die Signalqualität kurz überprüft.
Störsignale werden durch Netzteile von Computern, Laptops, Leuchteinrichtungen, Monitore, Neonlampen, Schaltnetzteile u.v.a.m verursacht und können den Synchronisationsvorgang des DCF-Empfängers empfindlich stören. Abhilfe kann man nur schaffen, indem man sich mit dem DCF-Empfangsmodul möglichst weit weg bewegt von potentiellen Störquellen.
Das Programm synchronisierung.bs2
Terminalausgabe
Wie arbeitet das Programm synchronisierung.bs2?
Zeilen 13 - 17
Endlosschleife, die jedes mal neu durchlaufen wird, sobald eine Synchronisationsstelle bestimmt wurde.
Zeilen 20 - 41
In diesem Unterprogramm findet der eigentliche Suchvorgang statt.
Der Propeller-Controller ist gegenüber seinem kleineren Bruder, der BASIC Stamp2, wesentlich höher getaktet und muss in Propeller-C/C++ programmiert werden. In der folgenden Übung wird ein Programm entwickelt, das die Synchronstelle im DCF77-Zeitsignal findet.
Synchronisationssignal finden | |
Material |
|
Aufgaben |
|
Schaltungsaufbau
Das Programm prop_synchronisierung.c
Die Terminalausgabe