DCF77 OLED-clock
Diesmal ein kleines Projekt, dass kein eigenes Layout oder Schaltungsdesign benötigt - also perfekt um mal zwischendurch etwas zu Basteln und Programmieren.
Inspiriert durch Seiten im Internet, die eine Pong-Uhr gebaut haben, kam die Idee eine kleine DCF77 Uhr zu bauen, die mehrere Modi - auch Pong - unterstützt und die ein aktives Dispay für die bessere Ablesbarkeit im Dunkeln verwendet. Da LCD-Displays mit Hintergrundbeleuchtung immer einen Schimmer um das Display erzeugen fiel die Wahl auf ein OLED-Display mit 128 x 64 Pixel. Solche Displays gibt es im Internet mit 2.42" zu vernünftigen Preisen.
Als Controller wurde ein Adafruit Feather M0 Basic mit dem Atmel SAMD21 Cortex-M0+ und JST-PH Anschluss für einen Lipo-Akku verwendet. Somit kann die Uhr auch einige Zeit ohne Netzteil weiter laufen und der Akku wird bei Netzbetrieb automatisch geladen. Auf der freien Fläche des Feather M0 Basic kann der DCF-Empfänger aufgelötet werden.
Der Netzbetrieb, das vorgesehne HKW-Modul und die Nähe der Antenne zum Display wurden dabei zur echten Herausforderung ...
Die Bestellung eines DCF77-Empfänger Modules und Antenne von HKW stellt über ihren Internet-Shop soweit kein Problem dar. Der relativ hohe Preis wird durch die komplette Signal-Vorverarbeitung wieder wett gemacht. Nur die vollständige Doku wird nicht mit gesandt und ist nicht(mehr) über die Seite der Firma auffindbar. Einiges Suchen im Netz brachte zumindest einige Forenbeiträge und eine ältere Version hervor.
Für die Verbindung des Ausganges des HKW-Empfängers direkt mit dem Eingang eines MCU-UARTs muss das Signal aber invertiert werden. Ich habe dazu einen MOSFET Transistor mit einem Widerstand verwendet.
Leider verabschiedete sich das HKW-Modul nach drei Tagen und ging in die Sammlung der Briefbeschwerer über und die nachbestellten zwei neuen Module haben leider nie einen Output geliefert... Nach einigen Überlegungen und Suchen im Internet wechselte ich zu dem DCF-Empfänger DCF1 von Pollin. Der gilt zwar als nicht besonders Signal-stabil, scheint dafür aber kein Sensibelchen zu sein. Dafür muss man bei diesem Modul aber mit Signalfilter und sehr gutem Vcc Filter arbeiten um ihm auch verwendbare Datagramme zu entlocken. Desweiteren enthält das OLED-Display einen DC/DC-Wandler und der stört den Empfänger. Also mußte auch noch das Display eine Schirmung erhalten. Diese wurde aus selbstklebender Kupferfolie für Guitarren gefertigt und über die Display-Rückseite gelegt. Diese große Massefläche zwischen Display und DCF-Antenne bringt jedoch wieder eine deutliche Verschlechterung des Empfangs mit sich...
Da der Adafruit Feather M0 aber mit einem 32.768 kHz RTC-Quartz als Basis läuft, kann die Software die Zeit selbst weiterzählen. Nur das Datum habe ich dem DCF überlassen, um das Fehlen von DCF-Sync eindeutig zu erkennen. Und nach mehreren Wochen kann ich sagen, dass nur an witterungsbedingten ungünstigen Tagen das Datum morgens nicht aktuell war. Jedoch muss die Antenne gut nach Frankfurt/Main ausgerichtet sein...
Somit habe ich nachfolgende Modi implementiert. Die Besten wie "analog", "pong" und "tetris" sind aber nicht von mir neu geschrieben. Der Verweis auf die org. Authoren ist im source-code jeweils dokumentiert.
Und hier der komplette Source-Code zusammen mit dem Keil Projekt zur DCF_OLED-clock.
DCF_OLED_clock source code & Keil-project (as ZIP)
Dabei wird das Icon für den DCF-Empfang sehr restriktiv gehandhabt. Ohne Minutenmarkierung oder nach Fehler / Parity-Error wird auf "no sync" gesetzt. Solange die Syncronisation gültig ist - bis zum erfolgreichen Empfang eine kompletten Datagrammes - wird "in sync" verwendet. Nach erfolgreichen Empfang eines fehlerfreien kompletten Datagrammes wird "DCF valid" angezeigt. Sobald ein Fehler beim Empfang des nachfolgenden Datagrammes auftritt, wird "no sync" gesetzt.
Somit ist eine kleine DCF-Uhr entstanden, die mehrere Display-Modi unterstützt, mit USB-power oder einem Lipo-Akku gespeist läuft und genug Freiraum für Erweiterungen / Verbesserungen lässt. Und auch mein Sohn ist fasziniert von ihr und würde sie am liebsten "zu-fassen kriegen" :-)
Offene Punkte:
- DCF Empfangsqualität
- Gehäuse
- A/D Messwert zum Akku Ladungszustand.
Egal was ich versucht habe (sample-num / sample-count) - nie wurde der Wert eines echtes Messgerätes auch nur annähernd ermittelt.
Nachfolgend noch einige weitere gute Ideen für die Anzeige der Uhrzeit: