Hi,
ich habe da ein merkwürdiges Problem. Bin grade dabei eine Binär-Uhr mit
meinem ATmega48 zu bauen. Sobald der Akku leer ist soll das Ding in den
Low-Bat Modus gehen. Das soll so aussehen, dass es nur noch sehr wenig
Strom verbraucht und die 17 LEDs (6 für Sekunden, 6 für Minuten, 5 für
Stunden) der Reihe nach kurz aufblitzen. Die LEDs sind per
Charlieplexing angeschlossen, der Prozessor muss also die ganze Zeit
währenddessen mit den internen 8Mhz laufen (selbst wenn ich nur eine
einzelne LED an hab. Da diese viel zu hell werden würde, müsste ich sie
per pwm dimmen). Am Timer2 ist asynchron ein Uhrenquarz angeschlossen
und erzeugt 16 Interrupts die Sekunde.
Bei der sechzehnten bzw. nullten Timer2-OVF ISR in einer jeden Sekunde
wird die aufblitzen zu lassende LED aktiviert, bei der nächsten, also
der ersten OVF-ISR wird sie wieder abgeschaltet und das Flag gesetzt,
das der Main-Function signalisiert dass sie jetzt in den Power-Save Mode
gehen darf. D.h. der µC läuft jede Sekunde 1/16 dieser Zeit voll durch,
die übrigen 15/16 schläft er (abgesehen von den übrigen Timer-OVFs die
nur die Teilervariable um eins hochzählen).
Auf jeden Fall scheint mein µC das nicht mitzumachen. Er gerät ausser
Takt. Eine normale Sekunde scheint dann nur noch 375ms zu dauern, der
Timer2 muss offensichtlich wesentlich schneller schwingen, aber warum?
Verkraftet der µC den ständigen Sprung in den Sleep-Mode nicht? Brauch
ich einen externen Taktgenerator für den Uhrenquarz der unabhängig und
stabil arbeitet?
Ich hab das Programm mal auf das wesentliche reduziert und angehängt.
Wenn ich nicht in den Sleep-Modus geh läuft alles normal. Ansonsten
zirka 3 mal so schnell.
lg PoWl