Atmega168 Power Down und Int0 ISR

Gast #2446220
Lesenswert?

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
Gast #2446295
Lesenswert?

Mmm, also gut, was ich verstanden habe bzw. im DB gefunden habe ist, 
dass ich nicht auf den Flankenwechsel reagieren kann sondern nur auf 
einen Low-Level.

Der PIN2 (INT0) wird durch mein Modem 120ms low gehalten. Reicht das 
überhaupt um einen Interrupt auszulösen?

Also setzte ich nur EIMSK = (1<<INT0); um einen Interrupt bei Low-Level 
an INT0 auszulösen?!

Das scheint allerdings genau so wenig zu funktionieren.

Bitte etwas ausführlichere Antworten mit etwas Erklärung.

Dank und Gruß
Chris

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren