Hallo,
ich steh mal wieder total aufm Schlauch.
Folgendes Programm funktioniert einwandfrei (ISR für Timer auch, hab ich
aber jetzt weggelassen), die Warteleuchte schaltet ein, wenn INT0 auf
Masse gezogen wird:
1 | int main(void)
|
2 | {
|
3 | DDRC = (1<<PC0); // Warteleuchte Ausgang
|
4 |
|
5 | // Pullup an PIN2 aktivieren. (Als eingang geschaltet INT0)
|
6 | PORTD = (1<<PIND2);
|
7 |
|
8 | // Set Timer mit Interrupt für LEDs und Sekunden zähler
|
9 | // Comparewert errechnet mit Prescaler 1024 -> 14399
|
10 | TCCR1B = (1<<WGM12) | (1<<CS10) | (1<<CS12);
|
11 | OCR1A = 14399;
|
12 | TCNT1 = 0;
|
13 | TIMSK1 = (1<<OCIE1A);
|
14 |
|
15 | // Interrupt für RI einrichten
|
16 | EICRA = (1<<ISC01); // Erkenne fallende Flanke an RI
|
17 | EIMSK = (1<<INT0); // Löse bei INT0 Interrupt aus
|
18 |
|
19 | sei();
|
20 |
|
21 | while (1)
|
22 | {
|
23 |
|
24 | }
|
25 |
|
26 | }
|
27 |
|
28 | ISR(INT0_vect) // Interrupt Vector für RI Pin
|
29 | {
|
30 | PORTC |= ( 1 << PC0 ); // Warteleuchte an
|
31 | }
|
Sobald ich Das ding aber schlafen lege in der while-Endlosschleife,
Schaltet die Warteleuchte nicht mehr ein, bzw. wird die ISR nicht mehr
ausgeführt:
1 | .
|
2 | .
|
3 | .
|
4 | while (1)
|
5 | {
|
6 | sleep_sek = 0;
|
7 | set_sleep_mode(SLEEP_MODE_PWR_DOWN);
|
8 | sleep_mode();
|
9 | }
|
10 | .
|
11 | .
|
12 | .
|
Mit diesem Code wird die ISR nie ausgeführt...
Wieso?
Kann mir jemand helfen? "Verpasst" der Controller die ISR beim
Aufwachen?
Dank und Gruß
Chris