Habe gerade mit den verschiedenen Sleep-Modes beim ATMEGA8 experimentiert. Also zunächst den Sleepmodus enabld im MCUCR-Register. Kann es sein, dass der Controller entgegen den Angaben im Atmega8-Datenblatt auch bei Timer1 (compare-Modus)Interupts ganz normal aus dem Sleep-Modus aufwacht? In der Tabelle S.33 ist als Wake-Up-Quelle im Idle-Modus von den drei Timern nur der Timer2 aufgeführt. Weil mein Programm scheint im Idle-Modus vom Timer1 aufgeweckt zu werden. Oder er schläft garnicht wirklich ein. Leider habe ich kein so empfindliches Messgerät, um festzustellen, dass der Controller tatsächlich schläft. Danke für Eure Info Karl
Habe es gerade mal probiert. Habe die LEDs, die ohnehin schon an sind, in der Hauptschleife invertieren lassen. (Alle, die an sind gehen aus und umgekehrt) Einmal habe ich den Sleep VOR diese Invertierung gestellt und einmal danach. loop: sleep com LEDs out PORTB, LEDs rjmp loop loop: com LEDs out PORTB, LEDs sleep rjmp loop Kein Unterschied. Der Controller scheint nicht einzuschlafen. :( Den Sleep-Modus Enabled habe ich so: ldi temp1, (1 << SE) | (1 << ISC00) | (1 << ISC10) out MCUCR, temp1 Also nur Sleep enablend und die Sleep-Mode-Bits so gelassen wie sie sind. Das müsste laut Datenblatt dann der Idle-Mode sein.
wenn sie jetzt aber mit mehr als 1Mhz blinken, dann wirst du es vermutlich nicht von einem dauerleuchten unterscheiden könne. Mach mal eine Zeitverzögerrung rein. (oder mal die Frequenz an der LED messen)
>In der Tabelle S.33 ist als Wake-Up-Quelle im Idle-Modus von den drei >Timern nur der Timer2 aufgeführt. Indirekt sind auch Timer0 und Timer1 aufgeführt: sie fallen unter "Other I/O" (ganz rechts in der Tabelle).
Ergänzung: "Idle" ist der "leichteste" Sleep Mode. Daraus kann der Controller von allen Interruptquellen wieder aufgeweckt werden.
> wenn sie jetzt aber mit mehr als 1Mhz blinken, dann wirst du > es vermutlich nicht von einem dauerleuchten unterscheiden könne. > Mach mal eine Zeitverzögerrung rein. (oder mal die Frequenz an der > LED messen) In dem Programm wurden die LEDs vom Timer1-Interupt hochgezählt. Die Hauptschleife hat die LEDs nur invertiert. Das Invertieren hat auch geklappt. Leider hatte der Sleep-Befehl keine Auwirkungen. Es ohne und mit Sleep invertiert. Habe nun einen 24-Bit-Zähler in die Hauptschleife eingebaut Dieser Zaehler steht, wenn ich sleep vor der Schleife stehen habe und läuft, wenn ich es auskommentiere. Also scheint der Idle doch irgendwie zu funktionieren. loop: sleep inc zaehlerL cpi zaehlerL,255 brne EndeZaehlerIncrementieren inc zaehlerM cpi zaehlerM,255 brne EndeZaehlerIncrementieren inc zaehlerH EndeZaehlerIncrementieren: mov LEDs, ZaehlerH out PortB, LEDs rjmp loop Es scheint so, also ob es paar Takte oder einen oder mehrere Schleifendurchläufe dauert, bis der Controller einschläft. Muss das aber gleich nochmal austüfteln. >Indirekt sind auch Timer0 und Timer1 aufgeführt: sie fallen >unter "Other I/O" (ganz rechts in der Tabelle). Sehr allgemein formuliert in der Tabelle, aber das scheint wohl so gemeint zu sein.
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.