Hallo zusammen,
Ich hab ein ominöses Problem und komm nicht auf den Fehler ...
Ich hab eine Funktion geschrieben die den MEGA168 runterfährt wenn die
Batteryspannung kritisch wird. Siehe unten.
Es gibt z.B. eine 3V Schwelle, funktioniert super: bei Unterschreiten
wird Berieb eingestellt.
Auch z.B. die 3,6V Schwelle funktioniert super.
Jetzt gibt es aber auch eine 6,0V Schwelle. Hier wirds komisch:
Anstatt dass der uC abschaltet, hängt er sich auf und wiederholt das
Blinken einer LED die das "Runterfahren" anzeigt unendlich lange.
Da hilft nur ein kompletter Neustart.
AB JETZT tritt das Problem aber NIE MEHR auf - ab jetzt wird bei
Unterschreiten auch sofort runtergefahen. Nur das erste Mal hängt er
sich auf - und schützt so natürlich nicht die batterie. So und jetzt??
Hab alles mögliche probiert.
Ich messe Spannungen von 3 bis 10V und versorge den uC und ADC mit 3V.
Hier der Code. Woran kann es liegen??
1 | void guard(void)
|
2 | {
|
3 | if(supplyLevel_ui < voltageLevel_ui[0])
|
4 | {
|
5 | shutDown();
|
6 | }
|
7 | }
|
1 | void shutDown(void)
|
2 | {
|
3 | cli();
|
4 |
|
5 | // Watchdog abschalten um autom. Reset (=Neustart) zu vermeiden
|
6 | wdt_disable();
|
7 |
|
8 | clearLEDs();
|
9 |
|
10 | //Info LED
|
11 | infoShutdown();
|
12 |
|
13 | //Herunterfahren
|
14 | set_sleep_mode(SLEEP_MODE_PWR_DOWN);
|
15 | sleep_enable();
|
16 | sleep_cpu();
|
17 | }
|
Hat vielleicht jemand eine Idee? Ich verzweifle ^^