Forum: Mikrocontroller und Digitale Elektronik Kein Aufwachen aus Power Down


von Dennis M (Gast)


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
}

von Oliver (Gast)


Lesenswert?

Dennis M schrieb:
> MCUCR = (1<<ISC00);//any (falling) edge -> interrupt

Das Datenblatt schreibt:
>an External level interrupt on INT0 or INT1

Was wollen uns diese Worte sagen??

Oliver

von Falk B. (falk)


Lesenswert?

@  Dennis M (Gast)

>Woran könnte es liegen?

>MCUCR = (1<<ISC00);//any (falling) edge -> interrupt

Beim Mega32 muss man auf low LEVEL Interrupt konfigurieren! Siehe 
Artikel Sleep Mode.

MFG
Falk

von Timmo H. (masterfx)


Lesenswert?

ein "sei()" wäre nicht schlecht :D, dann klappts auch mit dem Interrupts

von Peter (Gast)


Lesenswert?

>Kein Aufwachen aus Power Down

Das kenne ich, geht mir jeden Morgen so ähnlich....

von Dennis M (Gast)


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

von Dennis M (Gast)


Lesenswert?

Nein. löscht meinen letzten Beitrag... ich habs verpeilt!!!

von Timo P (Gast)


Lesenswert?

ist schon klar, wenn du nicht richtig aufwachen kannst, dann bist du 
verpeilt...

von Timo P (Gast)


Lesenswert?

double   sin (double __x)

von Timmo H. (masterfx)


Lesenswert?

und es geht auch ohne "sei()"? komisch

von Falk B. (falk)


Lesenswert?

@Timmo H. (masterfx)

>und es geht auch ohne "sei()"? komisch

Nöö, ich vermute mal, dass der Code oben weder vollständig noch direkt 
kopiert ist, sonder halb kopiert und halb neu eingetippt. :-(

MFG
Falk

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.