Das Gerät basiert auf dem Funkamateur-Bausatz BX-176, beschrieben im Funkamateur Jahrgang 57 (2008), Heft 12 und Jahrgang 58 (2009), Hefte 1, 2. Dieser sollte ursprünglich auch als Version mit Netzwerkschnittstelle verfügbar sein, daraus wurde aber nichts. Daher habe ich meine eigene Firmware für das Gerät, inklusive Netzwerkunterstützung, geschrieben. Sie basiert auf Adam Dunkels uIP-Stack. Es wurde ein Telnet- und NTP-Server implementiert, um das Gerät zu konfigurieren und die auf einige Millisekunden genaue Zeit per Ethernet verfügbar zu machen.
Allerdings habe ich den Sternzeitmodus (LMST – Local Mean Siderial Time), welche in der ursprünglichen Firmware vorhanden ist, nicht implementiert.
Um das empfangene Signal hardwaregestützt abzutasten, ist PA0 (Pin 40) mit PD6 (Pin 20) zu verbinden, wobei die alte Verbindung zum 1-Hz-Signal vorher getrennt werden muss. Dies kann durch Durchtrennen der Leiterbahn oder Löten der passenden Verbindung direkt am AVR und Abbiegen des betreffenden Pins geschehen. Nach dieser Modifikation der Hardware muss in der Firmware USE_PULSE_ICP definiert werden. Dies ist bei der vorgebauten Firmware der Fall!
Nach dem Start versucht das Gerät, ein DCF77-Datagramm vollständig zu empfangen und zu dekodieren. Zuerst wird dabei die fehlende Trägerabsenkung in der 59. Sekunde gesucht. Danach werden die einzelnen Bits zusammengestückelt. Transienten werden, wenn möglich, ignoriert. Sollten einzelne Bits trotzdem nicht erkannt werden (langes/kurzes Intervall nicht eindeutig) oder die Prüfsumme einer Gruppe falsch sein, so wird dies intern vermerkt. Aus den empfangenen Daten mehrerer Minuten wird ein kumulatives Datagramm berechnet, in dem fehlerhafte Bits durch Varianten aus späteren Übertragungen ersetzt werden, sofern dies sinnvoll ist (z.B. nicht bei Stundenwechseln oder dem Minutenfeld). Ich hoffe mal, dass mit dieser algorithmischen Krücke eine Decodierung auch bei stark gestörten Signalen möglich ist.
Meine Firmware versteht auch die Hälfte des DCF77-Schaltsekundenmechanismus und springt im passenden Moment eine Sekunde vor. Der NTP-Server informiert seine Clients natürlich auch darüber (li_vn_mode LEAP_ADDSECOND). Das Aussetzen einer Sekunde wurde jedoch nicht implementiert, das ist mir dann doch zu unwahrscheinlich.
Somit sollte die Uhr ihre Synchronisation fast die ganze Zeit behalten. Fast, denn zweimal am Tag überlagern sich Boden- und Raumwelle am Standort der Uhr destruktiv, sodass die Uhr außer Tritt kommt. Dies betrifft nicht nur die Datagramm-Dekodierung, sondern auch die PLL. Ohne ein anderes Frequenznormal mit entsprechende Kurzzeitgenauigkeit lassen sich diese Momente, in denen die genaue Frequenz und Zeit unverfügbar sind, wohl nicht vermeiden. Aber damit sollte man leben können.
Sollte man den Bausatz schon besitzen, müssen nur noch die zusätzlichen Bauteile für die Netzwerkschnittstelle besorgt werden. Die Netzwerkbuchse muss so flach wie möglich sein, sonst passt sie nicht zwischen die untere Platine und die Antennenbuchse. Der Übertrager ist ein Standardtyp, nur nicht überall zu finden. Die Durchbrüche für die Netzwerkbuchse und die Aktivitäts- und Link-LED müssen manuell hergestellt werden, da sind Bohrer und Feile gefragt. Einen Vordruck für die Durchbrüche gibt es nicht. Die Netzwerkschnittstelle unterstütz zwar nur 10 Mbps, aber für NTP reicht dies.
Mit dem Taster kann zwischen der Anzeige der lokalen Zeit (ME(S)Z), der Greenwich-Zeit (GMT), des Datums und des empfangenen DCF77-Signalpegels umgeschaltet werden.
Konfiguration
Durch das Drücken des Tasters beim Einschalten des Geräts können IP (“I”), Netzmaske (angedeuteter Schrägstrich) und Gateway (“G”) eingestellt werden. Langes Drücken geht eine Stelle weiter, kurzes Drücken erhöht die blinkende Ziffer. Nach dem Einstellen des Gateways kann das Passwort gelöscht werden (kurzer Druck schaltet das Löschen ein oder aus). Danach führt das Loslassen nach dem langen Drücken zum Speichern der Einstellungen (oder es wird „before“ angezeigt, wenn keine Änderungen durchgeführt wurden).
Das Gerät kann auch über die Konsole (9600 Baud, 8N1) und optional passwortgeschützt per Telnet verwaltet werden. So können auch Betriebsparameter wie die VCO- und Versorgungsspannung oder der PLL-Zustand ausgelesen werden. Eine Übersicht der Befehle liefert der “help”-Befehl. Das Standardpasswort ist “-”, also nicht gesetzt. Somit kann man das Gerät im Auslieferungszustand auch ohne die Eingabe eines Passworts fernwarten.
Danksagungen
Ich danke Norbert Graubner (DL1SNG) und Wulf-Gerd Traving (DL1FAC) für die Mühe, mit der die Schaltung entworfen wurde. Sie ist auch erstaunlich kompakt. Besonderen Dank auch an Wulf-Gerd für die Unterstützung beim Entwurf meiner eigenen Firmware.
Schaltung
Die Schaltung ist in den oben genannten Funkamateur-Heften zu finden. Sie können auch nachträglich gekauft werden.
Firmware
Die Firmware steht zu Teilen unter der BSD- und der Beerware-Lizenz.
Achtung: Bei einer unmodifizierten Schaltung darf USE_PULSE_ICP nicht definiert sein!
Es wird mindestens ein ATmega32 (größer geht immer) benötigt, die Fuses sind in FUSES.txt beschrieben.
Achtung: Die ATmega32-Variante funktioniert aktuell nicht, die ATmega644-Variante läuft hingegen einwandfrei. Also bitte einen ATmega644 einsetzen!
Dateien |
---|
fnorm-firmware-1.8.1.tar.bz2 |
2019-06-15: Strengere Überprüfung der Pakete, Sekunden ausblenden
Version 1.8.1 stellt sicher, dass keine Zeiten wie “12:65:23” angezeigt werden. Darüber hinaus gibt es eine neue Konfigurationsoption “show seconds”. Ist sie gelöscht, werden die Sekunden ausgeblendet, was die Anzeige ruhiger macht.