EEU
Ob Teekochen, Nudelnkochen oder sonst was. Für Eieruhren gibt es viele Verwendungszwecke. Die gibt es billig im Supermarkt, doch bei Mechanischen nervt das ticken und Digitale sind von der Bedienung her Schrott. Und was schickt sich für einen Elektroniker nicht besser als ein selbstgebautes, elektronisches Helferlein? Also rangeklotzt und die EEU die elektronische Eieruhr gebaut!
Beschreibung
Die Bedienung der EEU ist denkbar einfach. Drehimpulsgeber im Uhrzeigersinn drehen, dann geht die Uhr an und zählt die gedrehten Minuten hoch, entgegen dem Uhrzeigersinn drehen verringert die Minuten. Im Bereich oberhalb von zwanzig Minuten geht es in Zwei-Minuten-Schritten weiter. Die Haltbarkeit der Batterien liegt je nach Nutzung und Batterie zwischen ein bis drei Jahren. Ist die Batterie fast-leer zeigt die Anzeige immer kurz Lo an. Visuell ist die EEU ein "offenes Design" also ohne Gehäuse.
Die größte Herausforderung bildet das TQFP-32 Gehäuse für den Mikrocontroller mit 0,8mm Pin-Raster. Es sind deswegen gehobenere Kenntnisse im SMD-Löten gefragt. Das Layout eignet sich von den Eigenschaften sowohl zum selbst Ätzen als auch zum Bestellen beim Leiterplattenservice, daher ist die Schaltung einlagig.
Aufbauen
Als erstes die Löcher in die Platine bohren. Dabei sind alle Pins für 1mm-Bohrer ausgelegt. Die Löcher für Batteriehalter, Distanzbolzen, Klammen für Drehimpulsgeber und Batteriekabel einheitlich mit 3mm Durchmesser bohren.
Danach die SMD-Bauteile auflöten. Mit den Chip-Widerständen zur Übung anfangen und dann den TQFP anpacken. Anschließend alle Pins am TQFP mit Durchgangsprüfer auf Lötbrücken untersuchen. Den Drehimpulsgeber von den bedrahteten Bauteilen als letztes auflöten da der Schaft weitere Arbeiten erschwert. Bei den LED-Anzeige Lücken vermeiden, sowie darauf achten, dass die Kanten in einer Linie liegen. Alles Weitere sollte keiner Erklärung bedürfen.
Ach ja, die seltsame Erweiterungen bei den SMD-Pads am TQFP soll deren Stabilität verbessern oder wahlweise zum leichteren wegrupfen dienen.
Layout und Schaltplan
Layout (V1.2) | Schaltplan (V1.2) |
Siehe #Download für die Eagle-Dateien.
Batteriehalter montieren
Der Batteriehalter hat ein geschlossenes Gehäuse, damit bei Erschütterungen die Batterien nicht heraus fallen oder durch schmutzige Unterlage verdrecken. Zur Befestigung an der Platine erfolgt die Bohrungen zweier 3mm-Löcher mit einem Abstand von 30mm, waagrecht und senkrecht mittig zum Batteriegehäuse. Unbedingt den Anriss proben, ob das Gehäuse zwischen die Distanzbolzen passt. Innen werden die Bohrlöcher mit einem 5mm Bohrer angesenkt, so dass die M3-Senkkopfschrauben darin verschwinden und die Batterien rein passen. Mit jeweils einer Beilagscheibe und einer M3-Mutter wird die Schraube fixiert und anschließend mit einer weiteren Beilagscheibe dazwischen mit der Leiterplatte verbunden. Dabei dienen die Mutter und die Beilagscheiben auch als Distanzhalter, damit das Batteriegehäuse keine Pins zerdrückt.
Materialliste
(EEU: HW 1.3)
Part Value Device Package
- Kondensatoren
C1 33n C-EUC1206 C1206 C2 22µ C-EUC1206 C1206 C3 100n C-EUC1206 C1206
- Widerstände
R1,R2 100k R-EU_R1206 R1206 R3,R15,R16 0 R-EU_R1206 R1206 R19,R20,R22 0 R-EU_R1206 R1206 R4,R5,R6 300 R-EU_R1206 R1206 R7,R8,R9 300 R-EU_R1206 R1206 R10,R11 300 R-EU_R1206 R1206 R12,R13 600 R-EU_R1206 R1206 R13 1k2 R-EU_R1206 R1206 R18 390k R-EU_R1206 R1206 R17 680k R-EU_R1206 R1206
- Halbleiter
D1,D2 SC56-11 RT 7SEG-CK 7SEG-13 IC2 MEGA48-AI MEGA8-AI TQFP32-08 Q1,Q2,Q3 2N3904 2N3904 TO92D Q2 2N3904 2N3904 TO92D Q3 2N3904 2N3904 TO92D
- Diverses
DREH EC12E07 + KNOPF 10-150B EC12E EC12E SG1 F/CM12P (CPM121) F/CM12P F/CM12P SV1 SL 2X10G 2,54 MA03-2 MA03-2 X1 AKL-101-02 W237-102 W237-102
- Desweiteren
- Leiterplatte
- Distanzbolzen und Schrauben
- 10x M3-Beilagschieben
- 8x M3-Muttern
- 2x M3-Senkkopfschrauben 12mm
- 4x M3-Distanzbolzen 25mm
- Batteriehalter 3x Migon
- Batterien 3x Mignon, Alkaline
Funktion
Taktgeber und Multiplexer
Damit ein Programm sauber arbeitet, müssen die kritischen Programmteile effizient programmiert werden. Als Zeitreferenz dient ein periodischer Timer-Interrupt mit einer Millisekunde als Zeitbasis. Die Weitergabe der Zeit an die Hauptschleife erfolgt durch Inkrementieren einer als volatile deklarierten Variable die einfach überrollen darf und zu der der Zähler in der Hauptschleife bis zur Gleichheit jeweils wieder aufschließt. Die Umsetzung des hexadezimalen Zählerstandes in den Inhalts von für die Anzeige erfolgt in der Hauptschleife. Der zeitkritische Teil in der Timer-ISR wählt die Pin-Ansteuerung anschließend nur aus einer festgelegten Tabelle aus.
Drehimpulsgeber
Besonders knifflig gestaltet sich Auswertung des Drehimpulsgeber, bei geringer Prozessorbelastung. Benötigt werden zwei externe Interruptleitungen mit Flankentriggerung und mittels enum eine Pseudo-Zustandsmaschine zur Drehrichtungserkennung.
Die Drehrichtung ergibt sich aus der Abfolge der Zustände. Ein Schritt im Uhrzeigersinn geht aus State A1 gefolgt von State A2 hervor und entgegen dem Uhrzeigersinn State B1 gefolgt von State B2. Alle anderen Zustandswechsel werden ignoriert.
State A1 | ↓A ∧ B = 1 |
State A2 | A = 0 ∧ ↓B |
State B1 | A = 1 ∧ ↓B |
State B2 | ↓A ∧ B = 0 |
Hauptschleife
Die Hauptschleife mit dem wesentliche Teil des Zeitgebers läuft im Gegensatz zum Taktgeber und Multiplexer asynchron. Es wird die vergangene Zeit seit der letzten Abfrage ausgelesen und entsprechend oft die Poll-Schleife durchlaufen. Der Zeitgeber benötigt zur Abarbeitung länger als ein Intervall des Tagtgebers doch das macht nichts, denn der Poll-Intervall des Zeitgebers ist wesentlich größer und scheinbar verlorene Intervalle puffert die Zeitgebervariable gTimer.
Kalibrieren
Der kalibrierte 8 MHz RC-Oszillator hat eine ausreichende Genauigkeit (im Gegensatz zu den 128kHz).
Stromsparmaßnahmen
Die erste Stromsparmaßnahme besteht im Reduzieren der Prozessortaktrate auf 1 MHz. Im Schlafmodus Power-Down greifen weitere Maßnahmen, so schaltet die Software die internen Pull-ups ab und es wirken nur noch die externen 100 kOhm-Widerstände, denn dem Drehimpulsgeber bleibt trotz Rastung oft ein Schleifkontakt als geschlossen hängen und die internen würden übermäßig Strom ziehen. Die Batterie-Statusanzeige mach im Schlafmodus auch wenig Sinn, da keiner hinschaut, somit wird auch der Analog-Komparator ausgeschalten.
Im ersten Moment scheint es recht einfach mit dem Schlafmodus Power-Down und dem internen 8-MHz-RC-Oszillator zu arbeiten, allerdings funktioniert dann auch die Flankentriggerung der Interrupteingänge nicht mehr. Allerdings verfügt der ATmega48/88/168 im Gegensatz zum ATmega8 über eine weitere Interruptquelle, dem Pin Change Interrupt (PCI) der auch bei ruhendem Taktgenerator arbeitet und hier nur zum Aufwachen dient.
Auch während des Betriebs gibt es Stromsparmaßnahmen. Die Anzeige dimmt kurz nach dem Einstellen der Zeit herunter und reduziert so den Stromverbrauch.
Lebensdauer der Batterie
Die Lebensdauer einer Batterie ist ein bedeutender Aspekt beim Entwurf und entscheidet darüber, ob etwas machbar ist oder nicht. Eine LED-Anzeige ist sehr Strom-hungrig und von daher muss deren Strom so niedrig veranschlagt werden, wie es noch akzeptabel ist. Im konkreten heißt dies 2,5 mA pro Segment und rot als Anzeigenfarbe wegen der besseren Signalwirkung.
Eine Handelsüliche Mignongzelle vom Typ Akaline hat eine Batteriekapazität von 3000 mAh. Als Durchschnitt für den taglichen Gebrauch wurde eine ¼ Stunde veranschlagt, denn manchmal liegt die Eieruhr in der Ecke herum und an anderen Tagen ist sie gleich mehrmals im Einsatz.
Veranschlagter Kapazitätsbedarf pro Tag:
- [math]\displaystyle{ \!\,\text{Standby-Stromaufnahme} \cdot \text{Stunden pro Tag} = \text{Standby-Kapazitaetsbedarf pro Tag} }[/math]
- [math]\displaystyle{ 0.05 mA \cdot 24 h/d = 1.2 mAh/d }[/math]
- [math]\displaystyle{ \!\,\text{Betriebs-Stromaufnahme} \cdot \text{Betriebszeit pro Tag} = \text{Betriebs-Kapazitaetsbedarf pro Tag} }[/math]
- [math]\displaystyle{ 20 mA \cdot 0.25 h/d = 5 mAh/d }[/math]
- [math]\displaystyle{ \!\,\text{Standby-Kapazitaetbedarf pro Tag} + \text{Betriebs-Kapazitaetbedarf pro Tag} = \text{Gesamt-Kapazitaetsbedarf pro Tag} }[/math]
- [math]\displaystyle{ \!\,1.2 mAh/d + 5 mAh/d = 6.2 mAh/d }[/math]
Hieraus ergibt sich die Lebensdauer:
- [math]\displaystyle{ \frac{\text{Batteriekapazitaet}}{\text{Kapazitaetsbedarf pro Tag}} = \text{Batterielebensdauer} }[/math]
- [math]\displaystyle{ \frac{3000 mAh}{6.2 mAh/d} = 484 d = 1,3 a }[/math]
Tuning
Einfach nachbauen wird mancher langweilig finden. Ein Paar Knobelaufgaben lösen kann zusätzlichen Reiz bieten.
- 0,5 ... 9,9 Minute Feineinstellung im unteren Zeitbereich
- Überdrehen 1.. 199 Minuten durch missbrauch vom mittleren Punkt
- Implementierung mit 32,786 kHz Quarz
- Kompaktes Gehäuse finden
TODO
Ein paar Kleinigkeiten sind noch unerledigt geblieben:
- Prozessorauslastung messen
- Materialliste
- EMV-gerechtes Layout vergessen
Download
- EEU Schaltplan und Quellcode Version 1.3SW + 1.3HW
- Kalibrierten 1 MHz RC-Oszillator statt 128 kHz für Prozesssortakt
- Nutzung des Pin-Change-Interrupts (PCI)
- EEU Version 1.2SW+1.2HW
Weblinks
- SMD-Lötkurse (Online)
- Vergleichbare Projekte
- Für Elektroniker
- Mit poor-mans Drehimpulsgeber
- Simpelst
- Nettes Design
- LED-Sanduhr
- LED-Sanduhr II
- Mechanische Lösung für alle Schwerhörigen, die das Piepsen nicht mehr mitkriegen
- Datenblätter
- Mignonzelle (Panasonic)
- Produktseite für ATmega48