Kein Aufwachen aus Power Down

Gast #1958352
Lesenswert?

Hallo,

wollte den Power Down modus nutzen. Habe den code aus dem Tutorial 
übernommen, für einen ATmega32.
Setze das DDRD Register auf 226 (PD2=0) Eingang.
PORTD 255.

Nun falle ich in den Schlafmodus und komm nicht mehr raus. Habe am INT0 
immer ein HIGH Pegel, bis ich diesen auf Masse lege.

Der Code ohne die "sleep_mode();" Funktion wird einwandfrei ausgeführt, 
auch die INT0 Interrups.

Woran könnte es liegen?
1
MCUCR = (1<<ISC00);//any (falling) edge -> interrupt
2
PORTD=255;
3
DDRD=226;//INT0==0, input
4
ACSR = 0x80;    // Analogcomparator ausschalten
5

6
while(1) 
7
  {
8
 
9
        GICR |= (1 << INT0);            // externen Interrupt freigeben
10
 
11
        set_sleep_mode(SLEEP_MODE_PWR_DOWN);
12
        sleep_mode();                   // in den Schlafmodus wechseln
13
 
14
        // hier wachen wir wieder auf
15
        GICR &= ~(1 << INT0);           // externen Interrupt sperren
16
                                        // WICHTIG! falls der externe LOW Puls an INT0
17
                    // sehr lange dauert
18
    _delay_ms(100);
19
    sprintf(txbuf,"T%sSYNC",source_ID);
20
    rf12_txmode();
21

22
    tx_cnt=strlen(txbuf);  //
23
    uart_puts(txbuf);
24
    uart_puts("\r\n");
25
    tx_status=0;            // zu sendender Status
26
    tx_packet(0);
27
  } //while (1)
28

29
ISR(INT0_vect) 
30
{
31

32
  external_int0=5;//send ID five times
33

34
  uart_puts("\t\t\tint0\r\n");
35
}
Gast #1958384
Lesenswert?

Also, wie gesagt, ich habe mich nach dem Tutorial gerichtet. Dor steht 
geschlieben

MCUCR &= ~0x3;              // levelgesteuerter Interrupt an INT0

also, ISC01 und ISC00 auf 1 gesetzt.

um aus dem Power Down Modus aufzuwachen, bin jetzt bissi verwirrt. Aber 
danke, habe jetzt alles auf 0 gesetzt, und INT0 funktioniert nun.

Gruß

Dennis

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