Forum: Mikrocontroller und Digitale Elektronik Mega164 - Idle Sleep Mode richtig mit PWM?


von Elias R. (e-ra)


Lesenswert?

Hallo,

wie schon im Betreff beschrieben möchte ich meinen Mega164 effizient 
betreiben und wenn nichts zutun ist schlafen legen.

Das Programm ist recht einfach und wartet nur ob an INT0 ein "Rising 
Edge Interrupt" ausgelöst wird und reagiert dann entsprechend. Sobald 
alles abgearbeitet worden ist soll er wieder schlafen gehen.

Die Einschränkung liegt hier wohl am Timer1 der im FastPWM Mode 
betrieben wird und niemals abgeschalten werden soll!

Laut Datenblatt (Full, S.43 Table7-1) kommt hier wohl nur der Idle Mode 
in Frage? Bei allen anderen kann ich nicht auf "Rising Edge" triggern 
bzw. wird sogar der Clock für den Timer abgeschaltet.

Jetzt stellt sich mir noch die Frage wie das mit den WakeUp Sources 
aussieht? Wacht er durch irgendwelche Interrupts durch Timer1 (FastPWM) 
auf, oder kann ich das auf INT0 begrenzen? Bzw. läuft PWM weiter wenn er 
sich aktiv im Idle-Mode befindet?

Vielen Dank

e-Ra

von Falk B. (falk)


Lesenswert?

@  Elias R. (e-ra)

>Laut Datenblatt (Full, S.43 Table7-1) kommt hier wohl nur der Idle Mode
>in Frage?

Ja.

>Jetzt stellt sich mir noch die Frage wie das mit den WakeUp Sources
>aussieht?

Siehe Interrupt.

>Wacht er durch irgendwelche Interrupts durch Timer1 (FastPWM)
>auf,

Kann man einstellen.

> oder kann ich das auf INT0 begrenzen?

Ja.

> Bzw. läuft PWM weiter wenn er
>sich aktiv im Idle-Mode befindet?

Sicher, siehe Sleep Mode.

MfG
Falk

von Elias R. (e-ra)


Lesenswert?

Hallo,

und wie kann ich das genau auf INT0 begrenzen?

Reicht es einfach keine andere ISR als meine "Rising Edge Interrupt" 
(INT0_vect) ISR im Code zu verwenden? Oder muss ich irgendwelche 
Register beschreiben aus denen dann folgt bei welchem Event er aufwachen 
soll.

Vielen Dank

e-Ra

von Falk B. (falk)


Lesenswert?

@  Elias R. (e-ra)

>Reicht es einfach keine andere ISR als meine "Rising Edge Interrupt"
>(INT0_vect) ISR im Code zu verwenden?

ja.

MFg
Falk

von Elias R. (e-ra)


Lesenswert?

Hallo,

funktioniert soweit alles, danke!

Rein aus Interesse:

Was passiert wenn ich zwei oder mehrere ISR's verwende? Aus Idle Mode 
kann er ja nich nur durch INT0 aufwachen. In welche ISR wird dann 
gesprungen?

Gruß

e-Ra

von Falk B. (falk)


Lesenswert?

@  Elias R. (e-ra)

>kann er ja nich nur durch INT0 aufwachen. In welche ISR wird dann
>gesprungen?

ISR0?
Nach dem Aufwachen wird der Interrupt bearbeitet, welcher das Aufwachen 
ausgelöst hat. Danach geht es normal im Hauptprogramm weiter.

MfG
Falk

von Elias R. (e-ra)


Lesenswert?

Hallo,

ich dachte das ist komplexer....aber das ist ja nun wirklich schön 
gelöst.

Vielen Dank für die Antworten, schönes Bergfest!

e-Ra

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.