Auswahl
Projekte
Impressum
lang:en   lang:de

 
 
 
time... Ist Frankfurt am Main von Ihnen nur maximal 1500km entfernt?
Wenn ja, können Sie weiter lesen, dann können Sie auch etwas davon haben.
Ansonsten sind die Möglichkeiten dieser Zeitbasis stark eingeschränkt.

Allerdings weiss ich von Berichten, wo einige Leute mit einem DCF-Emfänger - ausgebaut aus einer Uhr (also noch billiger als meine Lösung hier) - noch bis hoch nach Nordeuropa Empfang hatten. Einen Versuch ist es vielleicht wert....


Projekt-Ziel

In diesem Projekt soll ein einfacher DCF77-Signalempfänger mittels eines RS232-Pegelwandlers und etwas Software auf einem Standard-PC zu einer genauen Zeitbasis im Netzwerk verwendet werden.

Was man braucht:
Hardware

DCF77-Empfänger
RS232-Kabel
etwas 4-adriges Kabel
ein paar Bauteile (Widerstände, Transistoren, siehe unten)

Pegel-Umsetzer von TTL/OpenCollector zu RS232/V24

Schaltplan als Postscript
Schaltplan als Acrobat PDF

Schaltplanbeschreibung

Der DCF77-Empfänger selber benötigt so wenig Strom, dass er ohne Probleme aus den Signalleitungen der seriellen Schnittstelle versorgt werden kann. Glücklicherweise kann er mit einer Betriebsspannung von bis zu 15V versorgt werden. Leider liefert er das rohe DCF77-Signal nur als OpenCollector-Signal. Deshalb ist der Pegelumsetzer notwendig.
Auf der rechten Seite des Schaltplans sind die Anschlussmöglichkeiten zum PC dargestellt. Da die TxD-Leitung aus Richtung PC in dieser Applikation nichts zu tun hat, liegt sie im Ruhezustand auf "1", d.h. bei der für RxD und TxD zur Anwendung kommenden negativen Logik auf -3...-15V, und liefert eine perfekte, negative Versorgung. Fehlt noch eine positive Versorgung, die aus DTR oder RTS dauerhaft gewonnen werden kann.
C1 und C2 stützen die eingehende Spannungsversorgung, D1 und D2 schützen vor Verpolung. Q1 und Q2 treiben die Signalleitung mit RS232/V24 Pegeln in Richtung PC, um das rohe DCF77-Signal zu übertragen. Q3 sorgt nur dafür, dass auch der Q2 aus einem auf Masse bezogenen Steuersignal angesteuert werden kann.
Die linke Seite zeigt die Anschlussbelegung in Richtung DCF-Empfänger. Es sind nur vier Leitungen erforderlich. Allerdings darf man die Signale /DCF und DCF nicht verwechseln, sonst erzeugt der Pegel-Umsetzer einen Kurzschluss. Das dürfte zwar zu keiner Zerstörung der Schaltung führen, jedoch zu einer Nichtfunktion, nach der man unter Umständen stundenlang sucht.
LED D3 hilft beim Ausrichten der Antenne. Ist diese korrekt ausgerichtet, zeigt sich auf dieser LED ein periodisches Blinken des DCF77-Signals. Es muss 59 mal im Sekunden-Rhythmus aufleuchten, dann eine Sekunde Pause machen und dann wieder 59 mal blinken usw. Schaut man es genau an, merkt man auch, dass es jeweils unterschiedlich lange aufleuchtet. Für eine Null leuchtet es 100ms, für eine Eins 200ms. In den somit übertragenen 59 Bits pro Minute steckt kodiert die Uhrzeit und das Datum.
Konfektioniert man sein serielles Kabel selber, hat man hier alle Freiheitsgrade, ebenfalls den, die positive Versorgung aus RTS oder DTR zu beziehen. Man muss es nur entsprechend in der NTP Konfiguration berücksichtigen (siehe mode-Option zum server-Schlüsselwort).
In meiner Konstellation verwende ich das RS232-Adapterkabel einer alten, kaputten seriellen Maus. Dort sind nur die Signale RxD, TxD, RTS und Masse elektrisch verbunden. Somit versorge ich meinen Pegelwandler aus TxD (negativ) und RTS (positiv).

Signalbeschreibung

Hier ist der Signalverlauf der beteiligten Schaltungen dargestellt. Die steigenden Flanken habe ich bewusst schräg gezeichnet, da sie mittels Pull-Up-Widerstand erzeugt werden und deshalb niemals besonders steil sind. Die beiden Signale DCF und /DCF sind als OpenCollector ausgeführt, und daher nur die jeweils fallende Flanke aktiv getrieben.
Wie man hier sehen kann, gibt es einmal pro Sekunde beim DCF77-Signal zwei Informationen: Die eine Information ist der Beginn der Sekunde selbst (die fallende Flanke des /DCF-Signals) und die andere Information steckt in der Länge des Impulses. 100ms stehen für ein 0-Bit, 200ms stehen für ein 1-Bit.
Normalerweise müsste man nun die Länge des Impules vermessen, um die enthaltene Information zu gewinnen. Man kann das Signal aber auch als asynchrones 8 Bit Datenwort mit 50Bd interpretieren. Dabei entstehen in Abhängigkeit zu der Länge des Impules spezifische (Fehler-)Muster. Aus diesen gewinnt der weiter unten erwähnte Raw-DCF-Treiber die notwendigen Informationen und kann das DCF77-Signal interpretieren.
Deshalb genügt es, das reine DCF77-Signal vom Empfänger an die Pegel einer RS232-Schnittstelle anzupassen und in einen Rechner einzuspeisen. Den Rest erledigt (wie immer) die Software.
 

Zusammenbau

Wer noch eine alte serielle Maus sein eigen nennt, und diese auch noch defekt ist, trennt sich sicher gerne von dem elektronischen Nager. Das Kabel lohnt sich aber aufzuheben. Zumindest als einfaches Terminal-Adapterkabel taugt es immer, oder wie hier, um "Zeit zu gewinnen".
Da das Kabel ordentlich verschweißt ist, sieht es auch gleich professioneller aus. Sehr praktisch ist auch der 4-polige Buchsen-Adapter am anderen Ende, erspart es einem doch das Gefiesel mit Einzellitzen. Einfach eine Stiftleiste (2,54mm Rastermaß) eingelötet und schon hat man perfekten Kontakt.
 
In Ordnung, das ist nicht so wichtig. Hier tut es aufgrund der extrem niedrigen Übertragungsbandbreite (10 Hz) jedes X-beliebige Kabel mit wenigstens 4 Adern.
Ich hatte hier ein Verlängerungskabel für Telefon-Einrichtungen übrig, was sich prima für diesen Zweck eignet.
 
Dieser Teil ist evtl. der Schwierigste, vor allem für den ungeübten Löter. Es gibt auf der Lochraster-Karte sicher eine bessere Plazierung der Bauteile, so dass man auch ohne Brücken auskommt. Aber wozu? Die Schaltung ist so klein, dass man etwa rund 30 Minuten benötigt, um sie einigermaßen sauber aufzubauen.
 
Wenn man sich dann beim Aufbau keinen groben Schnitzer erlaubt hat, sollte die Schaltung auch auf Anhieb funktionieren.
Ich hatte zunächst eine fehlende Lötbrücke, so dass die LED niemals blinkte und ich die ganze Zeit meine Antenne drehte und wendete, um endlich vernünftigen Empfang zu haben. Währenddessen zeigte aber der NTP schon an, dass er erste Synchronisationen mit dem DCF77-Datenstrom versucht hat. Zu blöd, wenn man nur dauernd auf die LED starrt...
Und nun alles in ein kleines nettes Gehäuse eingebaut und die Welt ist schön!
 
Tja, wozu Schmuckverpackungen alles gut sein können...
Nachdem ich es satt hatte mit der baumelnden Antenne zu hantieren (die sich auch beharrlich weigerte sich ausrichten zu lassen), habe ich die kleine Empfänger-Schaltung kurzerhand in ein Plastikgehäuse eingeklebt. Heißkleber ist eine feine Erfindung!
Ja, das Klarsichtgehäuse offenbart natürlich das Innenleben und dass es darin nicht sonderlich professionell zugeht. Aber es war gerade zur Hand und erfüllt seinen Zweck.
 
Bleibt natürlich die Frage, wie man nun das Gehäuse mitsamt der Antenne dauerhaft ausrichten kann. Und da hilft eine alte IKEA Schreibtischlampe. Der Hitze-Abstandshalter schreit förmlich danach, auf diese Art und Weise missbraucht zu werden. Einmal ausgerichtet und nie mehr angerührt.
 
Holder

Software

ntp Paket 4.2

Wie man es auf seinen Rechner bringt, überlasse ich jedem selber. Da ich ein Linux from Scratch Anhänger bin, habe ich dieses Paket (wie alles andere auch) aus den Quellen gebaut.
Ich habe hier ein Paket gebaut, welches nur die notwendigsten Dinge enthält. Ich greife nicht auf NTP-Dienste aus dem Internet zu, sondern ausschließlich lokal.
  • --disable-debugging
    Unterdrückt jede Menge unnötige Text-Ausgaben
  • --disable-all-clocks
    Schaltet zunächst alle per Voreinstellung aktivierten (und niemals benötigten) Uhrentreiber aus
  • --enable-LOCAL-CLOCK
    aktiviert die lokale (und meist ungenaue Systemzeit) als eine mögliche Quelle
  • --enable-RAWDCF
    aktiviert den auf der RS232 basierenden Treiber für ein rohes DCF77-Signal
$ ./configure --prefix=/usr --bindir=/usr/sbin --sysconfdir=/etc --disable-debugging
			--disable-all-clocks --enable-LOCAL-CLOCK --enable-RAWDCF
$ make
$ make install

Konfiguration des NTP-Dienstes

Der NTP-Prozess bezieht seine Konfiguration aus /etc/ntp.conf (zumindest in meinem System). Um nun den DCF77-Treiber verwenden zu können, erfordert es eine zusätzliche "server" Zeile:
server 127.127.8.0 mode 16 prefer
Hierbei bedeuten: Die Spezial-IP Adresse beginnend mit "127.127" bedeutet, dass mit diesem Eintrag einer der internen Uhrentreiber des NTP gemeint ist. Die dann folgende ".8" bedeutet, dass einer der Parse-Treiber verwendet werden soll und die angehängte ".0" ist als Index gemeint, d.h. bis zu drei solcher Uhrenquellen wären gleichzeitig möglich (also ".0", ".1" und ".2").
Bei mode muss man sich nun entscheiden, in welcher Art und Weise man seinen Pegel-Umsetzer realisiert hat. Da ich meine Schaltung mittels RTS positiv aus dem Rechner versorge, benötige ich hier 16. Wer seinen Pegel-Umsetzer aus dem DTR-Signal seines Rechners positiv versorgt, benötigt stattdessen 14.
prefer sagt einfach nur, dass ntp diese Zeit-Quelle vor anderen Quellen bevorzugen soll.
Damit bei keinem oder schlechtem Empfang ntp trotzdem eine Ahnung von der Zeit hat, sollte noch die normale Systemzeit als Quelle angegeben werden:
server 127.127.1.0
Wird nun der ntp-Dienst gestartet, versucht der Raw-DCF-Treiber das Gerät /dev/refclock-0 zu öffnen, wenn man wie im Beispiel oben bei der Pseudo-IP-Adresse als letzte Ziffer eine .0 angegeben hat. Bei mir hängt die Uhr an der zweiten seriellen Schnittstelle, also /dev/ttyS1 und es genügt somit ein:
$ ln -s /dev/ttyS1 /dev/reflock-0
auszuführen, um den Raw-DCF-Treiber glücklich zu machen.

Beachte: Ist das dev/-Verzeichnis mittels tempfs realisiert (was bei der Verwendung von udev die Regel ist), muss man diesen Link bei jedem Systemstart ggf. neu erzeugen!

Oder folgende udev-Regel hinzufügen und udev den Link selbst anlegen lassen:

KERNEL=="ttyS1", SYMLINK+="refclock-0"
Das war's. Bei mir läuft diese Uhr nun seit April 2006 und in meinem Netz herrscht immer die richtige Zeit.

Aktualisierung 1.1.2010:
Dieser Empfänger ist nun in Rente gegangen. Ersetzt durch einen USB basierten DCF77 Empfänger, der hier zu finden ist.