Binäruhr 2
Erstellt: 2010-06-05 • Letzte Änderung: 2016-01-30 [vor 8 Jahren, 8 Monaten, 16 Tagen]
Eine weitere Binäruhr, die die aktuelle Zeit in Sekunden, Minuten, Stunden, Wochentag, Tag, Monat und Jahr anzeigt. Im Gegensatz zu herkömmlichen Binäruhren werden die Ziffern der Uhrzeit hier nicht BCD-kodiert, sondern als echte Binärzahlen dargestellt. |
Zurück zur Hauptseite "Uhren"
Beschreibung
Da ein Kumpel von mir auch eine Binäruhr haben wollte, begannen wir zusammen im Dezember 2009 mit dem Bau dieser Binäruhr. Sie ist zu diesem Zeitpunkt noch nicht ganz fertig, da sie noch nicht 100%ig genau läuft - obwohl der errechnete Timerwert in Software korrekt ist. Wenn wir mal wieder Zeit finden, wollen wir versuchen, den externen Quarz mit Trimmerkondensatoren zu ziehen. Sollte das nicht helfen, wird eine Feinkorrektur in Software nötig. Auch soll das Gehäuse einmal schön angemalt werden; das blanke Sperrholz sieht noch nicht so toll aus.Die Uhr wird mit zwei AA-Batterien versorgt und kann an die Wand gehängt werden. Über drei Taster kann nach dem Power-Up die Uhrzeit eingestellt werden. Im Betrieb können die LEDs der Uhr mit zwei dieser Taster gedimmt werden, um den Stromverbrauch zu reduzieren. Von 22:00 bis 6:00 dimmt der Controller das Display übrigens automatisch ab.
Ich empfehle jedem Binäruhr-Interessierten, diese Uhr der Binäruhr 1 beim Nachbauen vorzuziehen. Diese Uhr ist weniger störanfällig und benötigt keine externe Realtimeclock. Ein Nachteil ist jedoch die zugegeben kompliziertere Verkabelung. |
Tipps, wie man die Uhr dazu bewegt, stabiler zu laufen, nehme ich mit Kusshand an. Der Timerwert des Interrupts sollte eigentlich korrekt sein und der verwendete Quarz sollt auch in Ordnung sein. Eine Vermutung von mir ist, dass der Charlieplexinginterrupt dem Timerinterrupt minimal in die Quere kommt und hier und da mal einen CPU-Takt unterschlägt, sodass das System nach einiger Zeit zu langsam geht. |
Nach oben
Funktionsweise
Im Gegensatz zu ihrem Vorgänger - der Binäruhr 1, welche die Anzeige multiplexte - bedient sich diese Uhr dem Verfahren des Charlieplexings. Mit diesem Verfahren werden nur 7 I/O-Leitungen des Mikrocontrollers für das Display benötigt.Auch entfällt in dieser Uhr die externe Real Time Clock (Dallas DS1307), wie sind in der Vorgängerversion vorhanden war, und damit auch der störanfällige I²C-Bus. Stattdessen werden alle Parameter wie z.B. Anzahl der Tage pro Monat und der aktuelle Wochentag in Software berechnet. Außer einem Mikrocontroller (ATtiny2313) und einem Quarz (4,608 MHz) benötigt die Schaltung daher keine weiteren speziellen Bauteile.
Nach oben
Aufbau
Anordnung der LEDs
Schaltplan
LED-Verkabelung
Das dumme bei der Verwendung von Charlieplexing ist die aufwendige Verkabelung. Man könnte die einzelnen LEDs zwar mit einer annehmbaren Anzahl Kabeln untereinander direkt verbinden, jedoch verliert man dabei sofort den Überblick. Daher haben wir uns beim Aufbau dieser Uhr meinem selbst designten Charlieplexing-Template bedient; eine kleine Platine, die dem Bastler etwas Denk- und Konzentrationsarbeit beim Löten abnimmt. Der Preis, den man dafür zahlt, ist der zusätzliche Verkabelungsaufwand, da jede einzelne LEDs mit zwei Kabeln zur Platine hingeführt werden muss.Die Kabel können direkt auf die kleinen Dreiecke gelötet werden. Wie man sieht, ist jedes LED-Paar von 0..21 durchnummeriert. Dies kann zur Orientierung dienen, wenn man sein eigenes LED-Layout entwirft. Beide Dreiecke jeweils einer LED-Verbindung sind durch dünne, vertikale Linien verbunden (im optischen, nicht elektronischen Sinne ). Die horizontalen Leiterbahnen sind von 1..7 durchnummeriert und werden direkt mit den entsprechenden Pins am Mikrocontroller verbunden. |
–
Um die Sache noch zeitaufwändiger zu machen, haben wir die insgesamt 32 LEDs einfach irgendwo auf die Platine gelötet. So mussten wir später aufwendig erstmal mit einem kleinen Programm auf dem AVR jede LED einzeln durchklingeln und die gefundene Information mit einem anderen kleinen Programm in brauchbaren Code für das dritte Programm - das Hauptprogramm, welches letztendlich auf dem Mikrocontroller landet - formatieren. *facepalm*
Aus diesem Grund gibt es auch keinen Schaltplan zur LED-Konfiguration dieser Uhr; das ganze im Detail zu Zeichnen wäre mir ehrlich gesagt zu anstrengend. Stattdessen empfehle ich einfach, das oben angesprochene Charlieplexing-Template herzustellen (Layoutdatei liegt bei!) und die LEDs nach folgendem Schema zu verbinden.
Auf dem Charlieplexing-Template gibt es nur 7 Leitungen. An jeweils zwei Leitungen können zwei LEDs antiparallel angelötet werden. Diese zwei Leitungen können beliebig kombiniert werden, was in einer maximalen LED-Anzahl von 7 * (7 - 1), also 42 LEDs resultiert (wovon wir hier nur 32 benutzen). Die folgende Tabelle steht so 1:1 im Sourcecode und gibt an, an welche zwei Leitungen jede einzelne LED anzulöten ist:
Beschreibung | Parameter | Bit | Anode (+) an diese Leitung: | Kathode (-) an diese Leitung: |
Sekunden (0..59) | SECONDS | 0 | 7 | 3 |
SECONDS | 1 | 2 | 5 | |
SECONDS | 2 | 4 | 6 | |
SECONDS | 3 | 3 | 5 | |
SECONDS | 4 | 7 | 6 | |
SECONDS | 5 | 4 | 3 | |
Minuten (0..59) | MINUTES | 0 | 1 | 3 |
MINUTES | 1 | 3 | 4 | |
MINUTES | 2 | 5 | 6 | |
MINUTES | 3 | 5 | 4 | |
MINUTES | 4 | 2 | 1 | |
MINUTES | 5 | 1 | 2 | |
Stunden (0..23) | HOURS | 0 | 2 | 4 |
HOURS | 1 | 6 | 5 | |
HOURS | 2 | 3 | 2 | |
HOURS | 3 | 2 | 3 | |
HOURS | 4 | 4 | 5 | |
Wochentag (1..7) | WDAY | 0 | 4 | 2 |
WDAY | 1 | 3 | 1 | |
WDAY | 2 | 6 | 7 | |
Tag im Monat (1..31) | MDAY | 0 | 5 | 3 |
MDAY | 1 | 6 | 4 | |
MDAY | 2 | 7 | 5 | |
MDAY | 3 | 5 | 7 | |
MDAY | 4 | 4 | 1 | |
Monat (1..12) | MONTH | 0 | 1 | 4 |
MONTH | 1 | 3 | 6 | |
MONTH | 2 | 1 | 5 | |
MONTH | 3 | 5 | 1 | |
Jahr-2000 (0..63) | YEAR | 0 | 5 | 2 |
YEAR | 1 | 6 | 3 | |
YEAR | 2 | 4 | 7 | |
YEAR | 3 | 2 | 6 | |
YEAR | 4 | 7 | 4 | |
YEAR | 5 | 3 | 7 |
Wer lieber seine eigene Anordnung benutzen will - kein Problem, einfach in der Datei
main.h
obige Parameter der eigenen Wunschkonfiguration angleichen.–
Wie man sieht, haben wir einfach wild drauflosverkabelt. Erstmal Kabel an alle Pins aller LEDs...
Damits schick aussieht, wurden die Kabelpaare sogar noch verschrumpfschlaucht.
Das Charlieplexing-Template wurde auf das Brett geklebt und die LEDs ohne jegliches System daraufgelötet.
Fertig sieht das ganze dann so aus; die Batterieclips sind auch schon aufgeklebt.
Eines der vier Seitenbrettchen hält die drei Taster. Die Controllerplatine ist nun auch fertig und auf die Platte geklebt. Wer genau hinschaut, sieht, dass hier noch ein Resonator (das blaue Ding rechts neben dem AVR) auf der Platine saß, den wir später aus Frequenzstabilitätsgründen durch einen Quarz mit externen Kondensatoren ersetzt haben, welcher etwas stabiler - jedoch immer noch nicht zufriedenstellend, siehe Beschreibung - arbeitete.
Dann war es an der Zeit, zu ermitteln, welche LED wir nun wo angeschlossen haben; wirklich eine anstrengende und unnötige Arbeit, die man durch etwas Planung hätte vermeiden können.
Ich habe, wie oben bereits gesagt, ein kleines Hilfsprogramm geschrieben, welches alle LEDs bei einem Druck auf einen der Taster nacheinander einmal hat aufleuchten lassen. Mit Stift und Papier haben wir dann notiert, zu welchem Parameter die LED gehört und welches Bit sie repräsentiert.
Hier haben wir den Stromverbrauch bei verschiedenen Helligkeitsstufen gemessen; einmal bei 100% (links) und einmal bei 50% (rechts).
Benutzt man z.B. Akkus mit 2700 mAh, so würde die Uhr bei 100% ca. 24 Tage halten (in der Rechnung wurde berücksichtigt, dass die Uhr von 22:00 bis 6:00 auf 50% gedimmt wird), bei durchgehend 50% ca. 43 Tage.
Dies sind die zu diesem Zeitpunkt aktuellsten Fotos der Uhr; immer noch nicht angemalt und nicht 100%ig Frequenzstabil, aber das kommt noch.
Nach oben
Download
Den C-Sourcecode, mein Linux-Makefile und die brennfertige hex-Datei gibt es hier zum Download.2016-01-30: Wochentagsberechnung berichtigt. |
Download: binaeruhr2-1.0.zip [6.65 kiB] | |
[1275 Downloads] |
Nach oben