Hallo, funktioniert es einen AVR aus einer Interrupt Service Routine in den SleepModus zu schicken? Bedingt das "nested" Interrupts? Weil der Interrupt der den Sleepmodus aktiviert ja noch nicht abgeschlossen ist.
der avr, geht doch erst schlafen wenn der Sleep befehl kommt. Ob er in einem Interrupt ist oder nicht sollte ihm egal sein.
Ok, ich dachte es gibt Probleme mit dem aufwachen. Da ein neuer Interrupt von der Hardware ja erst akzeptiert wird, wenn nicht gerade ein anderer IRQ aktiv ist. Und da ich dann ja in einem Interrupt sleep aufrufe, geht der avr schlafen und dieser irq ist nicht beendet, und dadurch kann er auch nicht durch einen z.b. externen Interrupt geweckt werden. Aber wenn diese Sorge unbegründet ist, ist ja alles gut :)
Das Problem ist eher dass du ihn dann nimmer geweckt bekommst, ausser vieleicht durch den Watchdog. Prinzipiell ist es bei AVR so, dass der Befehl nach dem Sleep noch ausgeführt wird, man kann also nach dem sleep noch ein reti machen. Wie man das in C hinbekommt weiss ich aber nicht. Lieber im Interrupt ein Flag setzen und im Main drauf reagieren. Gruß Fabian
Wie wäre es denn, das Programm nach jeder Mainloop-Runde sowiso in den Sleep fallen zu lassen. Im Normalbetrieb ist Sleep-Mode Idle vorgewählt, wodurch die Timer weiter laufen und den AVR regelmäßig wecken. Besteht die Notwendigkeit, den AVR in den stromsparenden Power-Down-Sleep zu versetzen, so aktiviert man den Weck-Interrupt, schaltet den Sleep-Mode (in mcucr) auf Power-Down um und kehrt wie gewöhnlich in die Mainloop zurück. An deren Ende fällt der AVR in den Tiefschlaf und schaltet selbsttätig seine Timer und ADC aus. In der Weck-ISR wird nur der Weck-Interrupt deaktiviert und der Sleep-Mode auf idle zurückgeschaltet und schon läuft der AVR wieder normal und kan per Timer-Interrupt Tasten abfragen (und entprellen) und auf seinen Mais-Teer hören. Hält man sich an diese Vorgehensweise, kann man die Deep-Sleep-Vorbereitungen auch in einer ISR treffen, z.B. in einer Timer-ISR, die neben anderen Aufgaben auch noch einen Nixtu-Timeout verwaltet, der den AVR dann in den Tiefschlaf schickt, wenn sein Mais-Teer lange nix mehr von ihm wollte. KH
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.