Funkuhr über IRDA

Ich habe mich schon immer gefragt, wozu das IRDA-Fensterchen an meinem Laptop eigentlich gut ist. Ich besitze weder ein Handy noch sonst irgendein Peripherieteil mit IRDA, so daß ich eigentlich viel lieber eine COM2 anstelle des IRDA gehabt hätte.

Außerdem hatte ich an COM1 eine Funkuhr angeschlossen, mit der ich die Systemuhr laufend synchronisiere. Damit war die einzige serielle Schnittstelle des Laptops belegt.

Zur Synchronisation benutze ich den xntpd von David L. Mills (siehe The Network Time Protocol (NTP) homepage). Diesen Network Time Protocol Daemon gibt es für Linux/Unix und für Windows. Ich beschreibe hier die Variante mit Linux.

In Verbindung mit einer einfachen DCF77-Empfänger ist dieser Daemon in der Lage, sowohl die lokale Rechneruhr als auch ganze Netzwerke auf die genaue Uhrzeit zu synchronisieren. Der xntpd unterstützt eine ganze Menge von Funkuhren, unter anderem auch GPS-Empfänger, hierzulande ist jedoch ein DCF77-Empfänger wohl die preiswerteste Variante.

Die Impulse am Ausgang des DCF77-Empfängers werden dazu direkt (mit Pegelwandler 5V -> RS232) auf den RxD-Eingang der seriellen Schnittstelle gegeben. Die serielle Schnittstelle wird auf 50 Baud eingestellt und aus den empfangenen Bytes kann der Referenzuhrtreiber des xntpd die DCF-Telegramme auswerten. Dazu muß nur der xntpd mit dem entsprechenden Referenzuhrtreiber compiliert werden und diese in der Konfigurationsdatei eingetragen werden.

Der notwendige Treiber wird beim Konfigurieren mit der Option --enable-parse-clocks eingebunden, in der /etc/ntp.conf wird die Zeile
server 127.127.8.0 mode 5 prefer
eingetragen, um den Empfang der DCF-Pulse zu aktivieren. Unter /dev muß noch ein Link von /dev/refclock-0 auf die gewünschte serielle Schnittstelle (meistens /dev/ttyS0 oder /dev/ttyS1 gelegt werden.

Mit dieser Konfiguration (meine Beschreibung soll nicht die Lektüre der Dokumentation zum xntpd ersetzen) ist der xntpd in der Lage, die von einem einfachen DCF77-Empfänger gelieferten Pulse von 100ms bzw. 200ms Länge zu dekodieren.

Wenn ich mir jezt überlege, daß ein IRDA-Port in der untersten Kompatibilitätsstufe eigentlich auch nur eine serielle Schnittstelle ist, müßte es doch möglich sein, die DCF-Pulse über IRDA in den Laptop zu übertragen. Damit wird dan die COM1 wieder für andere Anwendungen frei, bzw. ich muß nicht jedesmal, wenn ich den Laptop vom Arbeitsplatz wegnehme die Verbindung von der Funkuhr zu Laptop ausstöpseln.

Genau dazu habe ich dann auch eine kleine Schaltung entworfen, die den 5V-Pegel am Ausgang der Funkuhr in infrarote Lichtblitze übersetzt, die von dem IRDA am Laptop empfangen werden. Die Schaltung ist recht einfach geraten, da sich die benötigte Frequenz der Lichtblitze als ziemlich unkritisch herausstellte. Es kam letzenendes nur darauf an, während der Dauer eines DCF-Impulses eine Folge von Lichtblitzen auf den IRDA-Empfänger zu senden, damit dieser den Impuls empfängt. Für den xntpd sieht der IRDA-Port dann genauso wie eine beliebige serielle Schnittstelle aus. Es müssen also auch keine Treiber für den IRDA-Port geladen werden.

Für alle Interessierten ist hier der Schaltplan: irtx.pdf. Zur Schaltung ist noch zu sagen, daß man die auch sicherlich ganz anders hätte aufbauen können, aber die verwendeten Teile lagen nun mal in der Wunderkiste und waren somit sofort verfügbar. Der Empfänger muß die DCF77-Impulse mit 5V-Pegel liefern und sollte eine Belastung von einigen mA vertragen. Ich habe den IR-Sender bei mir an eine (ziemlich alte) Funkuhr angeschlossen, in der ich an geeigneter Stelle ein solches Signal abgreifen konnte. Bei Verwendung eines der preiswerten DCF-Empfangsmodule, die man z.B. bei Conrad-Elektronik kaufen kann, ist wahrscheinlich noch ein einfacher Treiber zur Anpassung notwendig.

Zurück zur Homepage ... und ein Zaehlpixel hab ich auch :-)