Pfad: Home => AVR-Übersicht => Anwendungen => Eieruhr

Als kleines Bastelprojekt - Zum Spaß machen - Fingerübung in Assembler

Die ATtiny2313V-Eieruhr

  1. Beschreibung
  2. Aufbau
  3. Funktionsweise

1. Beschreibung

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:
  1. Ein gerades Band ist mit seiner strengen Geometrie für geradlinige Zeitgenossen besser geeignet (z. B. Mathematiker, Hausmeister), Modell "straight forward",
  2. Kreis geht aber auch, ist eher für körperlich rundlich gebaute Beschenkte angebracht, Modell "Bierbauch".
  3. 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".
  4. 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".
  5. 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

Aufbau

Schaltbild Eieruhr 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!

pcb layout Hier ein mögliches Layout für die Eieruhr.

pcb best Hier der zugehörige Bestückungsplan.

Eieruhr im Gehäse Dem Einbau in ein Gehäuse sind keine Grenze gesetzt. Hier eine schwarze Kiste.

Eieruhr in Plexiglas 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

Funktionsweise

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:
  1. Bandgeschwindigkeit:
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. ...
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