Sleep Modus und Pin-Change Interrupt

Gast #3469990
Lesenswert?

Hallo Leute,

ich habe folgendes Problem:

Ich setze einen Atmega88 in den Power-Down Modus. Im Datenblatt steht, 
dass er aus diesem mit einem Pin Change Interrupt aufwachen kann. das 
funktioniert leider nicht. Den Interrupt hab ich getestet. Der 
funktioniert.

Nachdem es im Powerdown nicht funktioniert hat, dachte ich mir ich machs 
mal mit dem Idle Modus. Selbes Problem. Der Atmega wacht nicht auf.

Das ist die Initialisierung des Sleepmodus
1
;ldi r16, (1<<SM1)
2
ldi r16, 0
3
out SMCR, r16
Und so aktiviere ich den Sleepmodus:
1
lds r16, SMCR
2
ori r16, (1<<SE)
3
out SMCR, r16
4
sleep

Ich hab da noch ne Frage:
Ich habe in diesem Code anstatt out zuerst sts verwendet und es hat 
nicht funktioniert. Warum funktioniert sts bei diesem Register nicht?


M.H.
(Firma: matzetronics) #3470035
Lesenswert?

M. H. schrieb:
> Im Datenblatt steht,
> dass er aus diesem mit einem Pin Change Interrupt aufwachen kann.

Nein, das steht da nicht. Wen  du dir Fussnote 3 durchliest, geht 
Aufwachen bis auf Idle nur mit INT0 und INT1 mit Level Interrupt.
PinChange-Wakeup geht nur, wenn die I/O Clock aktiv ist - und das ist 
sie nur im Idle. Im Powerdown, PowerSave und ADC Noise Redu. Modus ist 
diese Clock inaktiv, deswegen gehen keine flankengetriggerten 
Interrupts.
SMCR befindet sich auf Adresse 0x33 und wird deswegen mit OUT 
angesprochen.

Wenn es in Idle auch nicht geht, ist vermutlich der Interrupt irgendwo 
nicht freigegeben. PCMSKn, PCIE und globale Freigabe müssen alle 
beschrieben werden.
#3470099
Lesenswert?

Matthias Sch. schrieb:
> M. H. schrieb:
>> Im Datenblatt steht,
>> dass er aus diesem mit einem Pin Change Interrupt aufwachen kann.
>
> Nein, das steht da nicht. Wen  du dir Fussnote 3 durchliest, geht
> Aufwachen bis auf Idle nur mit INT0 und INT1 mit Level Interrupt.
> PinChange-Wakeup geht nur, wenn die I/O Clock aktiv ist - und das ist
> sie nur im Idle. Im Powerdown, PowerSave und ADC Noise Redu. Modus ist
> diese Clock inaktiv, deswegen gehen keine flankengetriggerten
> Interrupts.
> SMCR befindet sich auf Adresse 0x33 und wird deswegen mit OUT
> angesprochen.
>
> Wenn es in Idle auch nicht geht, ist vermutlich der Interrupt irgendwo
> nicht freigegeben. PCMSKn, PCIE und globale Freigabe müssen alle
> beschrieben werden.

Kompletter Unsinn. Pinchange weckt den Controller aus jedem Sleepmode 
auf. Und das steht auch genau so im Datenblatt.

mfg.
#3470118
Lesenswert?

M. H. schrieb:
> Thomas Eckmann schrieb:
>> Kompletter Unsinn. Pinchange weckt den Controller aus jedem Sleepmode
>> auf. Und das steht auch genau so im Datenblatt.
>
> Richtig. Habe gerade das angehängte Programm getestet. Es funktioniert
> mit Power Down Mode und Pin change interrupt. Nur in meinem anderen
> Programm wacht er nicht auf...

Was macht denn dein anderes Programm?
Ist der Pin richtig konfiguriert? Maske, Pullup usw.
Ist die richtige ISR vorhanden?
Sind die Interrupts global freigegeben?

mfg.
(Firma: matzetronics) #3470123
Lesenswert?

Thomas Eckmann schrieb:
> Kompletter Unsinn. Pinchange weckt den Controller aus jedem Sleepmode
> auf. Und das steht auch genau so im Datenblatt.

Jaja, jetzt habe ich die Stelle auch gefunden. Ich frage mich nur, warum 
Atmel diese verwirrende Fussnote drin hat, die Einschränkung gilt also 
wirklich nur für INT0 und INT1 flankengetriggert.
#3470133
Lesenswert?

Matthias Sch. schrieb:
> Thomas Eckmann schrieb:
>> Kompletter Unsinn. Pinchange weckt den Controller aus jedem Sleepmode
>> auf. Und das steht auch genau so im Datenblatt.
>
> Jaja, jetzt habe ich die Stelle auch gefunden. Ich frage mich nur, warum
> Atmel diese verwirrende Fussnote drin hat, die Einschränkung gilt also
> wirklich nur für INT0 und INT1 flankengetriggert.

So verwirrend ist das auch nicht.
>> 3. For INT1 and INT0, only level interrupt.

Du hast nur falsch verstanden:
>> 3. Only for INT1 and INT0, only level interrupt.

Shit happens.

mfg.

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