Sleep Modus: Power-save, aufwachen durch Timer2

Gast #2637140
Lesenswert?

Hallo,

kämpfe mich immer noch durch das Tutorial hier und bin nun endlich beim 
letzten Punkt angekommen 
(http://www.mikrocontroller.net/articles/AVR-Tutorial:_Power_Management) 
und probiere mich gerade am Sleep Modus ... allerdings erfolglos ... 
wärend es im Simulator von AVR Studio wie erwartet funktioniert, 
funktioniert es auf dem ATmega 8 leider nicht :(

Da ich mich nicht so gut mit auskenne, bin ich wieder mal Ratlos ... und 
weiß nicht, was ich falsch gemacht habe ...

Würde mich sehr freuen, könnte sich das mal wer angucken, der davon 
Ahnung hat ;)

Vielen Dank!



.include "m8def.inc"

.org 0x0000
        rjmp    init                  ; Reset Handler
.org OVF2addr
        rjmp    timer2_overflow       ; Timer Overflow Handler


init:

    ; Stackpointer initialisieren
    ldi    r16,  LOW(RAMEND)
    out    SPL,  r16
    ldi    r16,  HIGH(RAMEND)
    out    SPH,  r16

    ; AS2-Bit in ASSR, damit Timer2 im Sleep Mode aktiv
    ldi    r16,  (1<<AS2)
    out    ASSR,  r16

    ; Sleep aktivieren, Power-save
    ldi    r16,  (1<<SE) | (1<<SM1) | (1<<SM0)
    out    MCUCR,  r16


    ; Vorteiler = 1024 (hier startet auch der Counter)
        ldi     r16,  (1<<CS22) | (1<<CS21) | (1<<CS20)
        out     TCCR2,  r16


    ; Interrupt bei Overflow erlauben
        ldi     r16,  (1<<TOIE2) | (1<<OCIE2)
        out     TIMSK,  r16

    sei              ; Interrupts generell aktiviern

    sleep

    ; Port D Ausgang, LED an
    ldi    r16,  0b01100000
    out    DDRD,  r16
    out    PORTD,  r16

loop:  rjmp loop


; Timer 2 Overflow Handler
timer2_overflow:
        reti
Gast #2637974
Lesenswert?

>kann ich außer dem Idle Sleep Mode noch andere aus dieser Liste
>(http://www.mikrocontroller.net/articles/Sleep_Mode) zusammen mit dem
>Timer2 verwenden ohne meine Schaltung zu ändern?
Ja, den ADC Noise Reduction Mode.

Ansonsten kannst du aus dem Power Down/Save Mode auch mit dem Wachdog 
aufwachen.

>Den externen Quarz an XTAL1 & XTAL2, und den 32.768KHz-Uhrenquarz an
>TOSC1 & TOSC2.
Geht nicht, da der Atmega8 keine separaten Anschlüsse für XTAL und TOSC 
hat.
Gast #2638007
Lesenswert?

error schrieb:
> Ansonsten kannst du aus dem Power Down/Save Mode auch mit dem Wachdog
> aufwachen.

Dann habe ich gerade ein kleines Verständnis Problem ... soweit ich es 
bis jetzt verstanden habe, dient der Wachdog dazu, wenn ein Counter 
einen gewissen Wert überschreitet ein Reset auszulösen. Nun soll ich 
eben diesen Wachdog nutzen um die Auslösung des Resets zum Aufwachen zu 
nutzen?

Dann müsste ich ja den Reset verhindern ... oder müsste ich diesen 
(sofern gewollt) manuell ausführen? (dachte, der Reset wird vom Wachdog 
automatisch ausgelöst)


Grüße
#2638014
Lesenswert?

devil13 schrieb:

> Dann habe ich gerade ein kleines Verständnis Problem ... soweit ich es
> bis jetzt verstanden habe, dient der Wachdog dazu, wenn ein Counter
> einen gewissen Wert überschreitet ein Reset auszulösen.

Das ist die klassische Funktion.

> Nun soll ich
> eben diesen Wachdog nutzen um die Auslösung des Resets zum Aufwachen zu
> nutzen?

Der Watchdog kann auch einen Interrupt auslösen. Was allerdings 
voraussetzt, dass man nicht tief in die Mottenkiste greift, sondern 
statt dem ollen Mega8 einen pinkompatiblen Mega88 verwendet. Der Mega8 
kann das noch nicht.

Je nachdem was man vorhat ist insbesondere in Assembler allerdings auch 
der WD-Reset als Wakeup produktiv verwendbar. Prozessorregister und 
RAM-Inhalt bleiben ja erhalten und ob es ein WD-Reset war und kein 
anderer sagt das MCUCSR.
Gast #2641990
Lesenswert?

A. K. schrieb:
> NB: Bei Verwendung des asynchronen Timer-Modus wäre es naheliegend, die
> entsprechenden Hinweise aus dem Datasheet zu lesen und zu befolgen.
> Allein das Bit zu setzen reicht nicht.

Sorry, wenn ich dumm frage, aber was bedeutet asynchroner Timer-Modus?
Gast #2642050
Lesenswert?

A. K. schrieb:
> devil13 schrieb:
>
>> Sorry, wenn ich dumm frage, aber was bedeutet asynchroner Timer-Modus?
>
> Aus der Feder eines Programmierers, der das AS2 Bit im ASSR setzt, ist
> das schon eine etwas unerwartete Frage.
>
> Schon dran gedacht, diese Frage dem Datasheet zu stellen? Steht da
> nämlich recht ausführlich drin.
>
> Da auch:
> http://www.mikrocontroller.net/articles/AVR_-_Die_...

Hä? Den Link, den du gepostet hast, habe ich mir durchgelsenen ... 
schlau werde ich daraus jedoch nicht wirklich ... dort ist lediglich 
beschrieben, wie ich Genauigkeitsabweichungen einer Uhr ausbügeln kann.

Nichts desto trotz ... würde mir das so erklären: asynchron = nicht 
synchron --> einen externen Takt, der nicht mit dem internen zusammen 
hängt?

Ist das richtig?

P.S. das Datenblatt, was ich habe, ist auf Englisch und mein Englisch 
ist nicht sonderlich gut ... außerdem lerne ich erst mit dem AVR 
klarzukommen ...
Gast #2642096
Lesenswert?

>das Datenblatt, was ich habe, ist auf Englisch und mein Englisch
>ist nicht sonderlich gut
Dann würde ich als erstes an deinen Sprachkenntnissen arbeiten da fast 
alle Datenblätter in Englisch sind.

>außerdem lerne ich erst mit dem AVR klarzukommen ...
Ohne das Datenblatt lesen zu können ein fast unmögliches unterfangen.

>asynchron = nicht synchron --> einen externen Takt, der nicht mit dem >internen 
zusammen hängt?
Ja, der externe Uhrenquarz der den Timer2 versorgt läuft mit einer 
anderen Geschwindigkeit wie der interne Oszillator des Avr, sprich sie 
laufen asynchron.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren