mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Sleep Mode beim ATMEGA8


Autor: Karl-alfred Römer (karl-alfred_roemer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dann lass doch einfach eine LED in der main blinken, wenn sie nicht mehr 
blink schläft er.

Autor: Franke Michael (appletree)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
10 Punkte für Peter. :-)

Autor: Karl-alfred Römer (karl-alfred_roemer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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).

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ergänzung: "Idle" ist der "leichteste" Sleep Mode. Daraus kann der 
Controller von allen Interruptquellen wieder aufgeweckt werden.

Autor: Karl-alfred Römer (karl-alfred_roemer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe Sleep Mode

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.