Forum: Projekte & Code Wanduhr mit 7-Segment LCD Panel und DCF77


von Michael K. (kaini)


Angehängte Dateien:

Lesenswert?

Quellcode auf GitHub: https://github.com/kaini/lcdclock im Ordner 
"firmware".

Hallo,

zugegeben - nicht gerade das kreativste aller Projekte - dennoch wollte 
ich eine Digitaluhr die
- bei ausrechendem Umgebungslicht lesbar ist (keine LEDs),
- von normalen Batterien betrieben werden kann,
- die Zeit von alleine einstellt und
- an einer Wand aufgehängt werden kann
selber bauen.

Als Mikrocontroller habe ich, zum ersten mal, einen STM32 gewählt. 
Genauer ein STM32L073CZ der praktischerweise schon einen multiplexing 
LCD-Treiber beinhaltet der in div. Sleep-Modes weiterhin läuft ohne 
nennenswert Strom zu verbrauchen.

Die Firmware ist, bis auf den DCF77 Empfang, keine Hexerei: Der 
Controller wacht auf, gibt die aktuelle Zeit auf das 7-Segment Display 
aus und legt sich dann für eine Sekunde schlafen. Dazwischen passieren 
noch ein paar Berechnungen um zwischen Sommer- und Winterzeit 
umzustellen ohne eine Resynchronisierung zu brauchen.

Nachdem in Ostösterreich der DCF77-Empfang teilweise sehr abenteuerlich 
ist (vielleicht auch die Schuld des DCF77-Moduls?) habe ich eine DCF77 
Dekodierung à la http://www.gjlay.de/software/dcf77/konzept.html 
implementiert. Diese kann in den Source-Files "dcf77_parser.cpp" und 
"dcf77_parser.hpp" gefunden werden. Trotz dieser Implementierung ist das 
Empfangen einer aktuellen Zeit Tagsüber oft erst nach Stunden möglich. 
Um keine Batterie mit sinnlosem Zeit-Synchronisieren zu verschwenden 
wird die Zeit daher nur Sonntags früh am Morgen und nach dem Einschalten 
synchronisiert.

Das Gehäuse ist 3D-gedruckt (STL-Datei im Repository) und hat hinten 
zwei Löcher zum Aufhängen an der Wand. Die Bauteile sind mit Heißkleber 
hinengeklebt.

Das LCD-Panel hab ich mir aus China zukommen lassen und ist leider 
multiplexing und transreflektiv. Um letzteres Problem zu lösen habe ich 
einfach zwei Lagen weißes Papier hinter das Display geklebt. Das 
Multiplexen war jedoch herausfordernder, da es leider zu sehr viel 
LCD-Ghosting kam. (Die Segmente die eigentlich aus sein sollten waren 
trotzdem an, weil bei einem LCD ja auch bei den aus-Segmenten Spannung 
anliegt.) Das Problem konnte ich zufriedenstellend in den Griff bekommen 
indem ich stundenlang mit der Konstrastspannung, der Frequenz, dem Bias 
und der Dead-Time des LCD Treibers herumgespielt habe. Nächstes mal 
achte ich darauf an ein statisches Display zu kommen. (Wobei das in 
diesem Fall immerhin 54 Inputs wären ...)

Übrigens, angehängt ist schon eine 2. Revision der Schaltung. In der 
Version die ich habe sind zwei Fehler enhalten:
- Ich habe vergessen den BOOT0 Pin zu beschalten: Das habe ich mit einer 
Drahtbrücke gefixt.
- VLCD ist in meiner Version noch mit VCC Verbunden: Diese Verbindung 
habe ich von der Platine gekratzt und ich verwende jetzt den internen 
Spannungswandler für die LCD Spannung. Ursprünglich war geplant einfach 
die Betriebsspannung als LCD-Spannung zu verwenden, aber aufgrund des 
Ghosting-Problems habe ich dann doch die Flexibilität des LCD Treibers 
gebraucht.

Ich habe keine Messinstrumente um den Stromverbrauch genau zu messen, er 
sollte jedoch <50µA im Schnitt sein.

PS: Kann man ein PCB-Layout irgendwie schöner aus KiCad exportieren?

von Harry (Gast)


Lesenswert?

Schön und gefällt mir. Welche Ziffenhöhe hat das Display?
Ich möchte mir demnächst was ähnliches bauen, aber mit selbst 
hergestellten LED-7-Segment-Displays mit min. 600mm Ziffernhöhe.

Harry

von Michael K. (kaini)


Lesenswert?

Die Ziffernhöhe beträgt etwa 50 mm, gut lesbar aus ein paar Metern 
Entfernung, mehr als genug für den Raum in dem die Uhr hängt.

Meinst du wirklich LED, oder war das ein Schreibfehler? In dem Fall darf 
ich Fragen wie du LCDs selber herstellst?

von Harald W. (wilhelms)


Lesenswert?

Harry schrieb:

> Ich möchte mir demnächst was ähnliches bauen, aber mit selbst
> hergestellten LED-7-Segment-Displays mit min. 600mm Ziffernhöhe.

Nimm einfach eine der vielen LED-Uhr-Schaltungen aus dem Netz
und bau einen etwas kräftigeren Treiber daran.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.