Pfad: Home =>
AVR-Übersicht =>
Anwendungen => Eieruhr
Als kleines Bastelprojekt - Zum Spaß machen - Fingerübung in Assembler
- Beschreibung
- Aufbau
- Funktionsweise
Wer kennt das nicht: der oder die X.Y. hat bald Geburtstag, man ist
geladen, und X.Y. hat schon alles. Jetzt kann man phantasielos in
irgendein Geschenkgeschäft gehen, irgendetwas völlig
Überflüssiges kaufen, einpacken lassen und nur noch
hoffen, dass nicht vier bis fünf der anderen Geladenen
dasselbe Geschäft aufgesucht, den gleichen schlechten
Geschmack haben wie man selbst und mit demselben Ramsch antraben
("Bestimmt kann man die vier anderen umtauschen!" Gegen was
bloß?).
Wer löten kann, ist jetzt klar im Vorteil: ab sofort gibt es
selbstgemachte Bastelware auf den Gabentisch. Das Bibbern ist jetzt
vorbei, denn unsere Verwandten und Bekannten kriegen jetzt nach und
nach alle einen schicken, individuellen und geschmackssicher
gestalteten Eierwecker. Natürlich bestückt mit einem
hochmodernen Schicki-Micki-Mikroprofessor, schließlich
sind wir eine technologisch führende Nation, auf unseren
Erfindungsreichtum stolz, und arbeiten nicht mehr mit diesem
säuregereinigten Quarzsand in einem Glaskolben mit Verengung.
Den kann keiner so schnell kopieren, das bleibt ein individuelles
Geschenk. Rieselsand war vorgestern, heute ist Piepsen und Blinken.
Das Prinzip ist einfach erklärt: eine Reihe von LEDs leuchtet
wie bei einer Bandanzeige grün und rot auf, immer wenn eine
Minute um ist, wird eine weitere LED des Bands rot, eine weniger
grün. Damit die Kiste aus einer Batterie betrieben werden
kann und nicht nach ein Mal Eierkochen die Batterie alle ist,
leuchtet immer nur eine LED gleichzeitig. Das Band läuft
aber schnell durch, damit auch was los ist in der Kiste und der
Rotstand mit kurzem Blick erfasst werden kann.
Damit der geneigte Leser einer Tageszeitung beim Eierkochen nicht
die Augen gebannt auf den Eierkocher richten muss, gibt die
Eieruhr bei jeder vollen Minute die Anzahl der Kochminuten auch
durch vorgezählte Piepser aus. Ist also im Gegensatz zur
Sandvariante auch für sehbehinderte Zeitgenossen geeignet.
Sind die 10 Minuten voll, zeigt eine gelbe LED und ein ganz
langes Piepsen an, dass der Dotter jetzt grün ist und
das Ei getrost weggeworfen werden kann.
Hier wird jetzt nur die Elektronik beschrieben, den Einbau in ein
Gehäuse müssen Sie ganz von selbst kreativ lösen.
Für die Anordnung der LEDs gilt:
- Ein gerades Band ist mit seiner strengen Geometrie für
geradlinige Zeitgenossen besser geeignet (z. B. Mathematiker,
Hausmeister), Modell "straight forward",
- Kreis geht aber auch, ist eher für körperlich
rundlich gebaute Beschenkte angebracht, Modell "Bierbauch".
- Für den verspielten Charakter ist am passendsten
die eierförmige Anordnung, auch für den Vergesslichen
ist das am schönsten (erinnert unmittelbar an die vorgesehene
Verwendung der Schachtel), Modell "forget it".
- Für den eher chaotischen, die Unordnung genießenden
und die Komplexität liebenden Bekannten ordnen sie alle LEDs
wahllos verteilt und durcheinander auf einer völlig
unregelmässigen Grundfläche an, Modell "Hundertwasser".
- Für den Spielsüchtigen: Vielleicht vertauschen sie
auch noch mit jeder Minute ein wenig die Reihenfolge der LEDs
per Software. Er wird es lieben, zu raten, wo das nächste
Lämpchen rot werden wird, Modell "vote and surprise".
Aus eigener Erfahrung hat es sich sehr bewährt, den Beschenkten
auch noch mit einer individuell gestalteten Bedienungsanleitung
auszustatten. Witzige Formulierungen, wie z.B. deutsche Wörter
mit taiwanesischer Grammatik, bringen Lacherfolge. Oder schreiben
Sie die Anleitung in Englisch, füttern sie in den Babelfish
mit der Anweisung, sie in Niederländisch oder Flämisch zu
übersetzen und ersetzen alle Hauptwörter und einen
zufällig ausgewählten Anteil der anderen Wörter
wieder durch den deutschen Begriff. Als Vorlage hier was im
RTF-Format oder als
Open-Office-Format.
An den Seitenanfang
Das Schaltbild ist recht einfach: die beiden Batterien (2*AA, 2*AAA
geht aber auch) speisen das Ganze mit 3 V, mehr Spannung (z.B.
5 V) tötet die LEDs sehr schnell. Die Reihe der Duo-LEDs
rot/grün ist mit Strombrems-Widerständen als Kaskade
aufgebaut, jede der LEDs lässt sich von den beiden
angeschlossenen Portpins aus entweder links rum oder rechts rum mit
Strom versorgen und ändert so ihre Farbe. Beim Einbau der LEDs
kommt es nur darauf an, alle LEDs in gleicher Farbrichtung einzubauen,
die Farbe kann in der Software leicht vertauscht werden.
Alle nicht angesteuerten Portpins sind per Software auf inaktiven
Tristate gesetzt und stören daher nicht. Der ATtiny2313V
(ohne V geht auch) treibt immer nur eine LED, der Spannungsabfall
an den Ausgängen unter Last ist bei der Bemessung der
Widerstände berücksichtigt. Die gelbe Eierwegwurf-LED ist
an einen eigenen Portpin angeschlossen. Ein kleiner
(Piezo-)Lautsprecher ist direkt an den OC0A-Ausgang angeschlossen.
Wer gerade keinen Piezo da hat, kann auch einen kleinen
32-Ohm-Lautsprecher anschließen, dann aber über einen
47 oder 100 µF-Elko gleichstrommäßig entkoppeln!
Hier ein mögliches Layout für die Eieruhr.
Hier der zugehörige Bestückungsplan.
Dem Einbau in ein Gehäuse sind keine Grenze gesetzt. Hier eine
schwarze Kiste.
Oder was schickes in Plexiglas, in mehreren Schichten und mit Durchblick auf die
Leiterplatte.In der untersten Schicht sind Batterie und Lautsprecher
untergebracht.
An den Seitenanfang
Prozessorsteuerung
Die Schaltung kann wegen der niedrigen Versorgungsspannung nicht
per ISP programmiert werden, die LEDs würden kaputt gehen!
Also den Prozessor auf einem externen Board programmieren und
fertig programmiert in die Schaltung einsetzen.
Der Prozessor wird zuerst per Fuse-Programmierung auf den
internen RC-Oszillator von 4 MHz umgestellt, wir wollen ja
möglichst Strom sparen. Die DIV8-Fuse bleibt aktiviert,
so dass er mit 500 kHz Takt läuft. Langsam genug
für die V-Version.
Der Assembler-Quellcode ist hier
zum Download verfügbar, in
html-Format hier. Eine neuere Version mit Tonleiter und der
Eröffnungsmelodie "Hänschen klein" steht
hier zum Download, in
html-Format hier.
Im Quellcode werden zuerst die Portpins zugeordnet. D.h., dass
alle LEDs in beliebiger Reihenfolge montiert und den Portpins
zugeordnet werden können. Die Reihenfolge muss dann dem
richtigen Port, Richtungsport und Portbit zugeordnet werden.
Die etwas aufwändige Programmierung der einzelnen Ein- und
Ausschaltroutinen für jede einzelne LED am Ende des Codes
ist dieser Schaltfreiheit zu verdanken.
Die Zeitmessung und die LED-Laufanzeige erfolgt mit dem
16-Bit-Timer 1, der im CTC-Mode läuft. Beim Erreichen des
im Compare-Registers A eingestellten Werts wird alle
0,2 Sekunden ein Interrupt ausgelöst und die T-Flagge
im Status-Register gesetzt. Der Interrupt weckt den schlafenden
Prozessor auf, der danach das T-Flag prüft. Bei gesetztem
Flag wird dieses zurückgesetzt und das niedrigste Bit des
LED-Zählers abgefragt. Ist dieses Eins, wird der Ton des
Lautsprechers abgeschaltet. Bei Null wird geprüft, ob noch
ein Piepton auszugeben ist. Wenn ja, wird der Lautsprecherton
eingeschaltet (Timer 0 aktiviert) und die Anzahl noch auszugebender
Piepser um einen verringert.
Danach wird die zuletzt eingeschaltete LED ausgeschaltet. Der
LED-Zähler wird erhöht und geprüft, ob er die 10
überschritten hat. Wenn ja, wird der Sekundenzähler
erhöht und geprüft, ob dieser 30 erreicht hat. Wenn
ja, ist eine Minute um, der Minutenzähler wird erhöht
und geprüft, ob er 10 überschritten hat. Wenn ja,
wird die gelbe LED eingeschaltet und der Dauerpieps eingeschaltet.
Abschließend wird die nächste LED ermittelt und je
nach Stand des Minutenzählers entweder auf rot oder auf
grün geschaltet. Die einzuschaltende Lampe wird dazu zur
Anfangsadresse der Sprungtabelle (rot bzw. grün) im
Registerpaar ZH:ZL addiert und mit IJMP in die Tabelle
gesprungen. Alle Schaltroutinen verzweigen am Ende wieder zum
Schlafbefehl der Hauptprogrammschleife.
Varianten
Es gibt eine breite Palette an Varianten:
- Bandgeschwindigkeit:
- für Hektiker: ihm geht das alles zu langsam, für
ihn verdoppeln wir die Laufgeschwindigkeit der LEDs auf das
Doppelte, indem wir den Wert von 12500 auf 6250 herabsetzen
und die 30 aus der Minutenerkennung auf 60 verstellen. Das
gibt Speed.
- für den Nachdenklichen: ihm kann es nicht langsam
genug gehen, bis er die Farbe einer LED zuverlässig
einschätzen kann, braucht er fast eine halbe Sekunde. Also
machen wir aus 12500 mal eben 25000 und aus 30 wird 15.
- LEDs verkehrt herum montiert? Kein Problem: die Zeilen
ldi ZH,HIGH(TabRot) ; versuche es mit rot, und
ldi ZL,LOW(TabRot)
gegen die Zeilen
ldi ZH,HIGH(TabGruen) ; nein, es ist gruen, und
ldi ZL,LOW(TabGruen)
vertauschen und schon läuft es mit umgekehrten Farben.
- Lieber hochtönend? Kein Problem, in der Zeile
ldi rmp,63 ; CTC-Wert
die 63 gegen einen niedrigeren CTC-Wert für Timer 0
auswählen.
- Eieruhr für Musikliebhaber? Geht! Tabelle mit den
CTC-Werten für die Tonleiter im Flash anlegen, nach jeder
beendeten Minute den zugehörigen CTC-Wert aus der Tabelle
lesen und in das Compare-Register A des Timers 0 schreiben.
- Wer lieber ganz, ganz harte Eier vom Typus
"Grünkern-Golfball" mag: vier weitere Duo-LEDs an die noch
freien Portpins klemmen und die Software um die weiteren vier
LEDs erweitern.
- ...
Der Variantenreichtum macht es unmöglich, den Quellcode
für alle Varianten hier fertig anzubieten. Die Anzahl
dürfte auch bei großem Bekanntenkreis ausreichen,
dass keine zwei Uhren mit demselben Design verschenkt werden
müssen, jedem sein eigenes Spielzeug.
Viel Erfolg beim Basteln.
An den Seitenanfang
©2006-2009 by http://www.avr-asm-tutorial.net