AVR Sleepmode nur zu bestimmten Zeiten verlassen

OP #1811320
Lesenswert?

Hallo ich verwende einen AT90CAN128 dort wollte ich den Sleepmode 
verwenden damit der Prozessor zwischen zwei schleifendurchgängen 
schlaffen geht.
Die Schleifen sollen immmer zu definierten zeitpunkten durchlaufen 
werden.
Dazu soll der Sleepmode von einem bestimmten Timer aufgeweckt werden. 
Alle anderen Interrupte welche ich verwende sollen den Sleepmode nicht 
beenden.
Ich habe also den mir den IDEL Mode eingestellt und den Prozessor 
schlafen gelegt. Nun habe ich aber festgestellt das der Sleepmode immer 
serh viel früher verlassen wird als er soll, und zwar immer dann wenn 
ein anderer Interrupt vor dem Timerinterrupt auftrat. Ist das normal?
Beim MSP kenne ich das so das der Sleepmode erst deaktiviert werden muss 
damit der Prozessor aufwacht. Dort können andere Interrupte auftretten 
aber der Sleepmode wird erst verlassen wenn ich das will (und 
einprogrammiert habe) und nicht nach jedem Interrupt.

Wie kann ich dem AVR das beibiegen das der Sleepmode nur bei meinem 
Timerinterrupt veralssen wird nicht aber bei anderen Interrupten? Die 
anderen Interrupte müssen aktiviert sein.
#1811354
Lesenswert?

@  Tobias Korrmann (kurzschluss81)

>Ich habe also den mir den IDEL Mode eingestellt und den Prozessor

>serh viel früher verlassen wird als er soll, und zwar immer dann wenn
>ein anderer Interrupt vor dem Timerinterrupt auftrat. Ist das normal?

Ja, siehe Sleep Mode.

>Beim MSP kenne ich das so das der Sleepmode erst deaktiviert werden muss
>damit der Prozessor aufwacht. Dort können andere Interrupte auftretten
>aber der Sleepmode wird erst verlassen wenn ich das will (und
>einprogrammiert habe) und nicht nach jedem Interrupt.

Der MSP430 ist da halt anders.

>Wie kann ich dem AVR das beibiegen das der Sleepmode nur bei meinem
>Timerinterrupt veralssen wird nicht aber bei anderen Interrupten? Die
>anderen Interrupte müssen aktiviert sein.

Muss man in deine State Machine in der Hauptschleife einarbeiten, 
siehe auch Interrupt.

MfG
Falk
#1811369
Lesenswert?

Ich glaube, Du bringst da einiges durcheinander.

Aus dem Sleep als Zustand wird der AVR von jedem Interrupt geweckt, 
sofern dieser Interrupt das Recht hat, den AVR aus diesen Sleepmodus zu 
wecken (siehe Datenblatt, Sleep-Modi). In den Sleep gelegt wird der AVR 
nicht durch Einstellen eines Sleep-Modus, sondern durch Aufruf des 
ASM-Befehls "sleep".

Mit dem Sleep-Modus wird vorgewählt, in welchen Sleep-Mode der AVR 
fallen soll, wenn der ASM-Befehl "sleep" auftritt. Idle legt nur den 
CPU-Takt still und kann von jedem Interrupt geweckt werden. 
ADC-Noise-red. legt auch den Takt für die Timer still und kann daher 
nicht vom Timer geweckt werden. Power-Down legt auch andere Takte 
(Timer, I/O, ADC) still und kann nur von Low-Level-Int, TWI, Timer2 im 
Async-Mode und PinChange geweckt werden, wobei das von AVR-Typ zu 
AVR-Typ unterschiedlich ist, siehe Datenblatt.

MfG
OP #1811398
Lesenswert?

@Klugscheißender Consulter
nein ich bringe dort nichts durcheinander
"Lästern an"
bei einem Vernüftigen Controller ala MSP430
"Lästern aus"

schaltet man den Sleep modus ein und wieder aus.
Interupte werden auch im Sleepmodus bearbeitet.
Aber das abschalten des Sleeps Modus muss durch das setzen eines Bits in 
einem Hardwareregister geschehen, und nicht dadurch das "nur" ein 
Interrupt ausgelöst wird.
das heist das der Controller nach der abarbeitung eines Interruptes 
wieder automatisch in den Sleepmode geht solange dieser aktiviert ist.
#1811443
Lesenswert?

Tobias Korrmann schrieb:
> "Lästern an"
> bei einem Vernüftigen Controller ala MSP430
> "Lästern aus"

Das ist höchstens Geschmackssache.
Der AVR macht eben das automatisch, was man beim MSP noch händisch 
machen muß. Und oftmals ist das richtig.

Und wenn man es mal anders haben will, macht man es eben mitm Flag 
(siehe oben).
Und wer dafür kein Byte verschwenden will, kann auch das SE-Bit nehmen.


Peter

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