Tonja schrieb:
> Wie genau klappt das miet diesen verflixten Power Down Modes?
Es gibt nur einen Power Down Mode. Den Power Down Mode.
Tonja schrieb:
> Wenn ich einen Timer INT auf Timer 2 aktiviere und DANACH den Sleepmode
> aktiviere, bleibt das Systems stehen, egal welchen mode ich verwende,
> auch IDE geht nicht.
Das löst man nicht durch rumprobieren. Nimm dir die Liste im Datenblatt
zur Hand. Da steht genau drin, welche Interruptquelle welchen Sleep Mode
beenden kann. Der Sleep Mode POWERSAVE ist speziell für das Aufwecken
durch einen Timer2-INT. Aber nur, wenn der Timer asynchron mit einem
Uhrenquarz getaktet wird. Der CPU-Takt wird in diesem Mode abgeschaltet.
Deswegen ist dein Controller stehen geblieben.
Tonja schrieb:
> Und wenn das dann irgendwann mal gehen sollte..
> muss ich dann nach jeder x beliebigen Anweisung ein sleep setzen?
Üblicherweise beinhaltet ein Programm eine Endlosschleife in der main.
1 | volatile unsigned char CanSleep = 0;
|
2 |
|
3 | int main(void)
|
4 | {
|
5 | //Init und sonstwas
|
6 | while(1)
|
7 | {
|
8 | //Tu was
|
9 | //...
|
10 |
|
11 | if(CanSleep)
|
12 | {
|
13 | CanSleep = 0;
|
14 | sleep_cpu();
|
15 | }
|
16 | }
|
17 | }
|
Am Ende der while-Schleife wird der Controller in den Sleep geschickt.
Dies kann über die Variable CanSleep gesteuert werden. Muß aber nicht.
Er kann auch grundsätzlich schlafen gehen.
Das Programm wird nach dem Aufwachen mit der nächsten Anweisung nach
sleep_cpu() fortgesetzt. In diesem fall ist es der Sprung auf den Anfang
der while-Schleife. Also fängt er vorn in der Schleife wieder an.