Nachdem meine Billig-Eieruhr aus Fernost ihr Leben praktisch ungenutzt ausgehaucht hatte, ging es an den Bau meiner eigenen Eieruhr. Sie sollte mit Batterien oder Akkus betrieben werden können, nicht groß sein sowie einfach zu bedienen.
Basis der Eieruhr ist ein AA-Batterien-Halter, auf den mit Zweikomponenten-Kleber vier M3-Schrauben geklebt sind, welche die Platine halten. Die Platine ist so bemessen und angebracht, daß sie die Uhr beim Hinstellen möglichst gut stabilisiert und sie nicht nach hinten umkippt, denn die Akkus sind recht schwer.
Einen An/Aus-Schalter braucht die Eieruhr übrigens keinen. Im Standby zieht sie so wenig Strom – wenn ich meinem A-Meter trauen kann weniger als 150 nA – daß sie einfach keinen braucht. Nachdem sie abgelaufen ist und gefiept hat, legt sie sich schlafen und wird durch einen Tastendruck wieder aufgeweckt.
Bedienung
Die Zeit wird über die zwei kleinen blauen Taster eingestellt. Weil ich die Uhr wirklich zum Eierkochen brauche, ist es besonders leicht, sie auf 5 Minuten einzustellen.
Nach dem Einstellen läuft die Zeit ab. In der linken Zeile werden die Einer der Minuten angezeigt, in der rechten die Zehner. Auf dem Bild oben links dauert es also noch 15 Minuten, bis die Uhr Alarm schlägt.
Jederzeit kann man eine neue Zeit einstellen oder den Countdown abbrechen.
- 1 Minute mehr
- Dazu drückt man den linken Taster, und die Minuten-Einer werden um Eins erhöht. Bei 9+1 laufen die Einer zu 0 über.
- 10 Minute mehr
- Dazu drückt man den rechten Taster. Die Minuten-Zehner werden dadurch um Eins erhöht. Bei 5+1 laufen die Zehner zu 0 über.
- Countdown abbrechen
- Den rechten Taster lange (das ist: länger als ca. 1/2 Sekunde) drücken. Dann wird der Countdown abgebrochen, und die Uhr legt sich schlafen.
- Genau 5 Minuten einstellen
- Den linken Taster lange drücken.
- Anzeige zwischen 'normal' und 'hell' umschalten
- Die Zeit auf 59 Minuten einstellen und den linken Taster lange drücken.
Mit maximal zwei Tastendrucken kann man also schon folgende Zeiten einstellen: 1, 2, 5, 6, 10, 11, 15 und 20 Minuten.
Technisches: Die Funktionsweise
Zwei Taster, ein kleiner 100nF Keramik-Kondensator, ein Beeper mit Trimmpoti um die Lautstärke einzustellen, sowie 14 Leuchtdioden und 5 Vorwiderstände. Das war's.
Ok... Ein µ-Controller ist noch drauf und Akkus natürlich. Der Controller ist ein AVR ATtiny24V (vormals ein ATtiny2313). Die low-voltage-Version (ATtiny2313V), die bis 1.8 Volt hinunter arbeitet, hatte ich leider nicht auftreiben können und daher später ein Design für den ATtiny24V gemacht. Bis jetzt verrichet der verwendete ATtiny2313 seine Arbeit aber klaglos; immerhin wird er mit ca. 2.6 Volt gefüttert. Der Zeitraum, nach dem ich die Akkus wieder aufladen muss, sind so lange, daß ich beim Laden immer schon vergessen habe, wann ich sie das letzte mal auflud. Ne genaue Zeit wie lange die Akkus im normalen Betrieb halten kann ich daher nicht wiklich sagen.
Die LEDs sitzen in einer 3×5 Matrix. Sie sind super effizient. Daher können sie direkt – also ohne externe Treiber – betrieben werden. Angesteuert werden die Dioden über einen 3:1-Multiplex, wobei sie für 'normale' Helligkeit nur bei jedem dritten Zyklus bestromt werden, was damit einem 9:1 Multiplex entspricht.
Der kleine Piezo-Beeper wird mit einer Wechselspannung zum Fiepen gebracht. Dazu wird er zwischen zwei PWM-Ports geklemmt und diese Ports gegengleich bei 3.9 kHz betrieben, wenn er piepen soll. Über das Trimmpoti kann die Lautstärke auf ein angenehmes Niveau eingestellt werden.
Die beiden Taster brauchen keinerlei externe Komponenten. Sie hängen an den beiden INT-Ports, durch die der µ-Controller aus dem Tiefschlaf geweckt werden kann. Die Entprellung der Taster erfolgt am simpelsten per Software und ergibt sich automatisch: Die INT-Funktionalität dient nur zum Aufwecken des µC. Ist er wach, dann fragt er die Taster alle 10 Millisekunden ab. Durch diese langsame Abtastrate bekommt man die Entprellung frei Haus. Ausserdem hat man bei anderen Anwendungen, wo die Taster nicht zum Wake-Up dienen, die freie Port-Auswahl zum Anschluss der Taster und belegt nicht die wertvollen INT-Ports.
Links neben dem Controller ist eine Buchse zum Anschluss eines ISP-Adapters, mit dem neue Software auf den µC gespielt werden kann. Als Adapter verwende ich einen abgespeckten SI-Prog oder den USBasp und als Programmier-Software den avrdude (ist bei WinAVR anbei). Zum Programmieren muss das Poti R6 hochohmig gestellt werden, weil der Kondensator C2 sonst die Signale verschluckt.
Weil der ATtiny24V einen Port weniger hat als gebraucht, wird Port A6 doppelt verwendet, nämlich für die Beeper-PWM und als Anode für die LEDs. Bei aktiven LEDs gibt dies ein leises Geräusch im Beeper, das durch den parallel geschalteten C2 unterdrückt wird.
Einkaufsliste
Anzahl | Bauteil | Distributor | Bestell-Nr. | Bauteil-Id |
---|---|---|---|---|
1 | AVR ATtiny24V | Reichelt | ATTINY 24V-10 PU | IC1 |
oder 1 | AVR ATtiny2313V | Segor | ATtiny 2313V-10PU | IC1 |
1 | Batterieclip | R | Clip 9V | TP1, TP2 |
1 | Batteriehalter | R | Halter 2xUM3-DK | |
2 | NiMh-Akku 2300mAh | R | NH HR3U-2300 | |
14 | rote LEDs, high efficiency | R | LED 3-3500 RT | LED1-LED9, LED10-LED50 |
5 | 1.2kΩ Vorwiderstand 0204 | Conrad | 400262 | R1-R5 |
2 | Taster | R | Taster 9308 | S1, S2 |
1 | Piezo-Beeper | R | EPM121 | SP1 |
1 | 10kΩ Trimm-Poti | R | 75H 10K | R6 |
2 | 100nF Kondensator (Keramik-Vielschicht) | R | X7R-5 100n | C1, C2 |
4 | Zylinderkopf M3×8 + 4 Sechskantmutter M3 | oder | Silikon, neutral vernetzend | |
Optional | ||||
1 | gelbe LED, high efficiency | R | LED 3-1300 GE | LED1H |
1 | ISP-Buchse | R | SPL 20 | ISP1 |
1 | Fassung für µC | R | GS 20P | IC1 |
Anmerkungen zu der Liste
- Die Platine kann mit neutralvernetzendem Silikon an den Halter geklebt werden. Dann braucht's auch keine Löcher auf der Platine, und die Befestigung wird deutlich stabiler. Die neuere Version mit ATtiny24 habe ich mit Silikon geklebt.
- Die Größe der Platine passt man an die Größe des Batteriehalters an, damit die Uhr optimalen Stand hatund gut in der Hand liegt. Sie ist dann bequen mit einer Hand greif- und einstellbar.
- Bei der ersten Uhr (Bild oben) hatte ich mit 2-Komponenten Minutenkleber Schrauben an den Batteriehalter geklebt und die Platine daran festgeschraubt. Auf dem Thermoplast des Batteriehalters ist die Klebekraft jedoch nicht sonderlich hoch, so daß eine Verklebung der Gesamtplatine mit Silikon besser ist.
- Zur In-System-Programmierung des AVR verwende ich einen billig-Adapter; den abgespeckten SI-Prog mit Widerständen und Z-Dioden von Scott-Falk Hühn. Mit einem "guten" ISP-Adapter, der die Signale aktiv treibt, besteht Beschädgungsgefahr, weil dann Strom von den Ports über deren Clamp-Dioden zur Versorgung – also in die Akkus – fliesst. In diesem Fall kann man die drei Signalleitungen über Widerstände (zB 1kΩ−4.7kΩ) vom Progger entkoppeln. Zudem muss beim Proggen der ATtiny24V-Version das Poti R6 hochohmig sein, da ansonsten der Beeper und C2 ISP-Signale stören.
- Seit neuestem habe ich mir einen USBasp nachgebaut, um meine AVRs direkt per USB flashen zu können; auch mit diesem Progger lässt sich die Uhr einwandfrei programmieren. Ich verwende jedoch keinen Wannenstecker als ISP-Adapter, weil mir diese zu viel Platz wegnehmen. Mein USBasp ist über Widerstände von der Zielschaltung entkoppelt.
- Die Uhr ist nicht wasserdicht. Einem "Wasserschaden" kann aber durch sorgfältiges Trocknen begegnet werden.
- Bei mir funktioniert auch ein ATtiny2313 (also keine low-voltage-Version) prima.
- Die 15-te, gelbe LED wird nicht angesteuert und kann entfallen.
Ein paar Eckdaten
Maße über Alles (stehend, Breite × Höhe × Tiefe) | 3.2 cm × 6.5 cm × 3 cm |
Stromaufnahme ('normal', alle LEDs an) | 1.6 mA |
Stromaufnahme (ATtiny2313, standby) | 130 nA |
Stromaufnahme (ATtiny24V, standby) | 100 nA |
CPU-Frequenz | 1 MHz |
IRQ- und Multiplex-Rate | 5 kHz |
Beeper-Frequenz | 3.9 kHz |
Software
Eingehendere Dokumentation der einzelnen C-Module befinden sich jeweils in den Headern, teilweise in den C-Dateien. Dokumentation zu den make-Targets befinden sich im Makefile.
Compiler ist avr-gcc 3.4.6 zusammen mit binutils 2.16.1.
- C-Quellen, Makefile
- hex-Dateien (eiuhr-attiny2313.orig.hex, eiuhr-attiny24.orig.hex)
- Handbuch (pdf, 17kb) und Quellen (LaTeX, png)
- Eagle-Dateien (Schaltplan + Layout) für
- Eieruhr mit ATtiny2313V oder ATtiny24V
- Ein einseitiges Layout mit ATtiny2313V (EierUhr.sch/.brd)
- Ein einseitiges Layout für einen ATtiny24V (EierUhr-v3c.sch/.brd). Die Beeper-Frequenz ist änderbar, momentan allerdings noch hartcodiert in eiuhr-attiny24.c.
- Projekt-Dateien für Programmers Notepad 2
- Quellen sind noch nicht dokumentiert
- Das .zip erzeugt beim Auspacken die Unterverzeichnisse
- eieruhr/common (C, Makefile)
- eieruhr/include (C)
- eieruhr/EiUhr (C, Makefile, pn-Projekt, pdf)
- eieruhr/eagle (eagle)
Die Defines BEEP_GROUPS und BEEPS_PER_GROUP geben zusammen an, wie oft nach Ablauf der Zeit gebeept wird. Die Anzahl der Beeps ist das Produkt der beiden Werte.
Die hex-Dateien sind im zip-Archiv dabei. Wenn man sie neu generieren will, dann (analog für ATtiny2313)
> make attiny24 # oder > make MCU_TARGET=ATtiny24 hex
Ähnliche Projekte im Web
- Die ATtiny2313V-Eieruhr von Gerhard Schmidt bei avr-asm-tutorial.net
- Eine digitale Eieruhr/Timer von Ingo Klöckl
- Countdown Timer mit ATtiny2313 von Thomas Gfüllner
- Binäruhr mit Weckfunktion und Eieruhr von Maria Enke