Berliner Uhr
Aus BraLUG-Wiki
(→Andere komische Uhren) |
K |
||
Zeile 1: | Zeile 1: | ||
[[Kategorie:Hardware]] | [[Kategorie:Hardware]] | ||
[[Category:Programmieren]] | [[Category:Programmieren]] | ||
+ | [[Category:Tcl/Tk]] | ||
==Motivation== | ==Motivation== |
Version vom 24. März 2010, 08:22 Uhr
Inhaltsverzeichnis |
Motivation
Karsten meinte neulich, dass eine "Berliner Uhr" doch mal etwas lustiges für ein Mikrocontroller-Projekt wäre. Nachdem ich mich ein wenig belesen hatte, war ich der gleichen Meinung und baute einen Prototyp auf einer Lochraster-Platine auf. Hier das Ergebnis:
Hardware (Prototyp)
Die Schaltung beinhaltet folgendes:
- ein ATmega8 als Mikrocontroller,
- 24 LEDs gemultiplext (3 plus 8 MC-Ausgänge)
- Uhrenquarz (als Zeitbasis)
- 3 Taster (zum Einstellen von Stunde, Minute sowie "Null-Stellen" der Sekunden)
- Anschluss für DCF77 (entweder TWI oder nativ) vorgesehen
Bemerkung zu obigen Foto des Prototyp: Die LEDs für die "Minuten-Einer" hätten eigentlich auch gelb sein sollen, leider hatte ich die auf meiner Bestellliste vergessen. Deshalb erstmal rote LEDs.
Mikrocontroller-Software
Firmware
Die erste Version der Firmware beinhaltet lediglich die Grundfunktionalitäten einer Uhr plus der lustigen Umsetzung der Uhrzeit in das spezielle Anzeigeformat der "Berliner Uhr". Mittels der drei Taster ist das Stellen der Uhr möglich (Stunden/Minuten/0-Sekunde).
Das Ganze sollte ohne Probleme um DCF77-Funktionalität, entweder via TWI oder nativ (also direkt angeschlossenem DCF77-Empfangsmodul), erweiterbar sein und kommt vielleicht in einer nächsten Version der Firmware.
RTF(-Atmel-)M
Jaja, Datenblätter sollte man lesen und auch verstehen...!
Irgendwie habe ich mich schon von Anfang an gewundert, warum die Uhr es so grottenschlecht mit der Ganggenauigkeit handhabt, obwohl ich eigentlich extra deswegen einen Uhrenquarz mit eingebaut hatte. Heute abend aktivierte ich meinen Speicheroszi, um die Frequenz des Quarzes zu bestimmen und entsprechende softwaretechnische Änderungen in die Firmware einzubauen. Zum Glück streuten die Meßergebnisse so stark, dass ich doch nochmal im Datenblatt nachgelesen habe...: die internen Kondensatoren im ATMega8 müssen via Fuse-Bits aktiviert werden (Fuse-Bit CKOPT)!
Mittels dem Programm avrdude und einem usbasp als angeschlossene Programmierhardware würde die Befehlszeile zum Setzen der entsprechenden Fuse-Bits so aussehen:
avrdude -c usbasp -p m8 -U hfuse:w:0xc9:m -U lfuse:w:0xe1:m
Jetzt bin ich mal gespannt, ob sich die Ganggenauigkeit der Uhr dadurch verbessert...
...und etwas für den PC
Eine "Berliner Uhr" mit einem Mikrocontroller als vollständiges Gerät kann jeder aufbauen und als Firmware implementieren (;-))...! Aber auch der "Nicht-Hardware-Freak" will etwas von dieser mystischen Uhrzeit-Anzeige haben:
Ich konnte es dann doch nicht lassen und habe im Anflug von Langerweile ein kleines Tcl/Tk-Script geschrieben, welches die PC-Uhrzeit in dem Format der Berliner Uhr darstellt.
Wenn schon eine Tcl/Tk-Version, dann natürlich auch etwas für ein ganz normales (farbfähiges) ASCII-Terminal, zumal ich schon immer ein ncurses-Programm schreiben wollte. Hier also die Version der Berliner Uhr für die "Kommandozeile". Mit der Taste 'q' kann man, wie von anderen vergleichbaren Tools gewohnt, das Programm beenden.
Um die Sache zum Abschluss zu bringen, hier noch die X-Version der Berliner Uhr von mir. Vom Layout sieht sie (fast) genau so aus, wie die Tcl-Version (siehe weiter oben...), kann aber in den Abmessungen dynamisch geändert werden.