Hallo, ich denke dass ich meinen ATmega88 erfolgreich schlafen gelegt habe und befürchte das er nun nicht mehr aufwacht. Folgenden Code habe ich dareingebastelt:
1 | C-Code |
2 | |
3 | void Fehlerroutine(void) |
4 | {
|
5 | Spg = Messung(Spannung); |
6 | if (Spg >= 120) // Wenn Wert überschritten dann setze Fehler in EEPROM zurück |
7 | {
|
8 | eeprom_write_byte(&ee_Fehlerspg, false); // Fehler in EEPROM aufheben |
9 | Unterspg = eeprom_read_byte(&ee_Fehlerspg); // Fehler aus EEPROM auslesen |
10 | }
|
11 | else
|
12 | {
|
13 | //Ausgang ausschalten;
|
14 | set_sleep_mode(SLEEP_MODE_PWR_DOWN); |
15 | sleep_mode(); |
16 | _delay_ms(250); |
17 | }
|
18 | }
|
19 | |
20 | void main(void) |
21 | {
|
22 | Unterspg = eeprom_read_byte(&ee_Fehlerspg); // Fehler aus EEPROM ermitteln |
23 | |
24 | if (Unterspg == true) //Wenn Fehler vorliegt springe in Fehlerroutine |
25 | {
|
26 | Fehlerroutine(); |
27 | break; |
28 | }
|
29 | else // Wenn nicht (z.B.leeres EEPROM) |
30 | { // dann schreibe False ins EEPROM |
31 | eeprom_write_byte(&ee_Fehlerspg,false); |
32 | Unterspg = false |
33 | }
|
34 | |
35 | while(1) //Programmschleife |
36 | {
|
37 | // programm läuft
|
38 | // bei einem Fehler gehts in die Fehlerroutine
|
39 | }
|
40 | }
|
Das Hauptprogramm läuft - wenn ein Fehler auftritt (Spannungswert wird unterschritten) werden die Ausgänge abgeschaltet und der Prozessor schlafen geschickt - um Strom zu sparen. Später wird die Versorgungsspannung abgeschaltet Der Prozessor soll durch erneutes anlegen der Spannungsversorgung wieder aufwachen (ich dachte durch Reset beim Einschaltvorgang) Das EEPROM mit dem abgespeicherten Fehler wird ausgelesen. Erst wenn ein Wert überschritten wird, wird dieser Fehler überschrieben und das Hauptprogramm soll wieder "rennen". Heißt: Ich wecke den Prozessor nicht durch einen Interrupt sondern durch Anlegen der Versorgungsspannung - geht das?