Gast
#1108975
Ich schon wieder: Ich benutze einen ATmega 88 und AVR-GCC Mein Programm läuft soweit. Ich habe BrownOut Detection auf 1,8V gesetzt und mein Watchdog läuft mit 500ms Ich werte Spannungen aus, und wenn eine Spannung unterschritten ist, wird ein Fehlerbit ins EEPROM geschrieben und danach springt das Programm in die Funktion Fehlerroutine(). Wenn das Fehlerbit nach dem Einschalten im EEPROM ausgelesen wird und ein Fehler vorhanden ist springt das Programm ebenfalls sofort (ohne über los zu gehen) in die Fehlerroutine: heißt: Wenn Fehler vorkommt oder noch im EEPROM steht gehe sofort in Fehlerroutine(). Hier ist die Fehleroutine:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
Wenn Spannung größer als 3,5V ist, setze den Fehler zurück (Für den Einschaltmoment des µC) Wenn Spannung alles andere - also kleiner - dann warte 5 Sekunden und gehe in Power Down - Sleep Mode Ja, es ist richtig: Der µC bleibt für immer im Sleep-Mode, außer er wird aus und wieder eingeschaltet (daher BrownOut auf 1,8V) Es sind keine Interrupts aktiv. Problem: Mein Programm läuft. Wenn die Spannung kleiner wird und das Prog in die Fehlerroutine springt, wird der gew. PortPin ausgeschaltet und 5 sek. später schaltet er sich wieder ein! Das soll er nicht, denn eigentlich sollte nun der Sleep-Mode eingeschaltet werden. Klingt mir erst einmal nach: Der Watchdog hat ausgelöst. Aber trotz meiner eingesetzten Resets werde ich das Gefühl nicht los, das etwas nicht stimmt.