Sleep Mode Power Down und INT0 funktioniert nicht

Gast #1143432
Lesenswert?

Ich habe am PD2 (INT0) des ATmega32 (16MHz ext. Quarz) ein IR Empfänger. 
Das empfangen funktioniert auch alles problemlos. Wenn ich aber in den 
Sleep gehe und irgend etwas höheres als IDLE eingestellt habe (wollte 
eigentlich POWER DOWN), dann wacht mein µC nicht mehr auf. Woran kann 
das liegen?
1
...
2
  TCCR0 = 1<<CS02;      // Teiler 256
3
  TIMSK = 1<<TOIE0;      // Timer Interrupt freigeben
4
  GIMSK = (1 << INT0);      // externen Interrupt freigeben, bei anderen µC "GICR"
5
  //MCUCR = (1 << ISC00)|(1 << ISC01);  // steigende Flanke löst ext. Interrupt aus
6
  MCUCR = (1 << ISC01);          // fallende Flanke löst ext. Interrupt aus
7
...
8
...
9
  sei();          // ISR aktivieren
10
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
11
  sleep_mode();             // in den Schlafmodus wechseln
12
  // hier wieder aufwachen bei ext. Interrupt
13
  GIMSK &= ~(1 << INT0);    // externen Interrupt sperren, durch Timer werden jetzt alle 14 Bits eingelesen
14
  while(1)          
15
  {  
16
...
17
...
18
    GIMSK = (1 << INT0);    // externen Interrupt freigeben, damit wieder aufgewacht werden kann
19
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
20
    sleep_mode(); 
21
    // hier wieder aufwachen bei ext. Interrupt
22
    GIMSK &= ~(1 << INT0);    // externen Interrupt sperren, durch Timer werden jetzt alle 14 Bits eingelesen
23
  }
24
...
25
...
26
ISR(INT0_vect) {
27
  // 3 Takte warten, dass Oszillator einschwingen kann
28
  //__asm volatile ("nop");
29
  //__asm volatile ("nop");
30
  //__asm volatile ("nop");
31
  DDRD|=(1<<PD6);
32
  PORTD^=(1<<PD6);
33
}
Gast #1143449
Lesenswert?

Nix steigende oder fallende Flanke! Zum Aufwachen aus dem Power Down 
Schlafmodus musst Du den INT0 auf _Pegel_triggerung konfigurieren. Denn 
im Power Down hat der Controller keinen Takt, und ohne diesen kann er 
keine Flanke detektieren.

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