Forum: Mikrocontroller und Digitale Elektronik Sleep Modus und Pin-Change Interrupt


von M. Н. (Gast)


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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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.

: Bearbeitet durch User
von M. Н. (Gast)


Lesenswert?

Er ist freigegeben. Wenn ich den Sleep Befehl rausnehme springt er in 
die ISR. Der Interrupt funktioniert

von adenin (Gast)


Lesenswert?

Matthias Sch. schrieb:
>SMCR befindet sich auf Adresse 0x33 und wird deswegen mit OUT
>angesprochen.

M. H. schrieb:
>lds r16, SMCR

SMCR sollte hier mit IN angesprochen werden.

Nunja, lds und sts gehen immmer (auch für Register :) ), aber die 
Adressierung ist anders und das sollte nicht durcheinander gewürfelt 
werden.

von M. Н. (Gast)


Lesenswert?

Das Problem ist ja, dass sts nicht funktioniert. Wenn ich sts benutze, 
geht der chip nicht in den Sleepmodus. Sobald ich aber sts mit out 
tausche geht alles bis auf das aufwachen

von M. Н. (Gast)


Lesenswert?

Sorry das mit sts und out hat sich geklärt. ich muss da ja noch die $20 
draufaddieren.

Es bleibt aber das Problem, dass der uC nicht aufwacht.

von Thomas E. (thomase)


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.

von M. Н. (Gast)


Lesenswert?

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...

von Thomas E. (thomase)


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.

von M. Н. (Gast)


Lesenswert?

Ich habe das Problem gefunden. Ich habe einen Befehl falsch verwendet.


Ich danke aber allen für die Hilfe.

Also ist jetzt auch geklärt, ob der Power-down Modus mit dem Pin-Change 
funktioniert: JA!

von Thomas E. (thomase)


Lesenswert?

M. H. schrieb:
> Ich habe das Problem gefunden. Ich habe einen Befehl falsch verwendet.
>
>
> Ich danke aber allen für die Hilfe.
>
> Also ist jetzt auch geklärt, ob der Power-down Modus mit dem Pin-Change
> funktioniert: JA!

das ist geklärt seit es Pinchange gibt.

mfg.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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.

von Thomas E. (thomase)


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.

: Bearbeitet durch User
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.