Forum: Mikrocontroller und Digitale Elektronik Sleep Modus: Power-save, aufwachen durch Timer2


von devil13 (Gast)


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

von error (Gast)


Lesenswert?

Ist überhaupt ein Uhrenquarz an TOSC1/TOSC2 angeschlossen?

von devil13 (Gast)


Lesenswert?

error schrieb:
> Ist überhaupt ein Uhrenquarz an TOSC1/TOSC2 angeschlossen?

Ja, mit einem 16 MHz Quarz

von Ingo L. (Gast)


Lesenswert?

Möööp, eine Ubrenquarz hat eine Frequenz von 2^15 Hz, nicht 16MHz, dass 
packt der Oszillator garnicht...


Ingo

von Sascha W. (sascha-w)


Lesenswert?

@devil13

den Power Save Mode benutzt man mit einem Uhrenquarz an TOSC1/2 
(32.768kHz), dies bedingt jedoch, das der AVR im Normalbetrieb mit dem 
internen Oszillator (1MHz o. 8MHz) läuft.

Sascha

von devil13 (Gast)


Lesenswert?

Danke für die Antwort!

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?

Also ich verwende einen externen 16MHz Oszi

Grüße

von Purzel H. (hacky)


Lesenswert?

Den externen Quarz an XTAL1 & XTAL2, und den 32.768KHz-Uhrenquarz an 
TOSC1 & TOSC2. Das ist ja nur eine kleine Bestueckungsaenderung.

von error (Gast)


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.

von Purzel H. (hacky)


Lesenswert?

>>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.

Autsch. Die Ersparnis von 60 cents eines Mega8 gegenueber einem Mega32 
lohnt sich hier...

von devil13 (Gast)


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

von (prx) A. K. (prx)


Lesenswert?

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.

von (prx) A. K. (prx)


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.

von devil13 (Gast)


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?

von (prx) A. K. (prx)


Lesenswert?

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.

von devil13 (Gast)


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 ...

von Falk B. (falk)


Lesenswert?

@  devil13 (Gast)

>synchron --> einen externen Takt, der nicht mit dem internen zusammen
>hängt?

>Ist das richtig?

Ja.

von devil13 (Gast)


Lesenswert?

Vielen Dank :)

von (prx) A. K. (prx)


Lesenswert?

devil13 schrieb:

> 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 ...

Aber Tante Gugel kennst du? Die wirft beispielsweise auf der ersten 
Seite dies aus: 
http://www.avr-modelleisenbahn.de/atmega8/13-11-2-asynchroner-betrieb-timer-2-atmega8.htm

von error (Gast)


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.

von (prx) A. K. (prx)


Lesenswert?

error schrieb:

> Ohne das Datenblatt lesen zu können ein fast unmögliches unterfangen.

Beim AVR hat er sogar gewisse Chancen. Der Modelleisenbahn-Link verweist 
auf eine deutsche Übersetzung des Datasheets vom Mega8.

PS: Der Link findet sich auch im AVR Tutorial. An exakt der richtigen 
Stelle.

von devil13 (Gast)


Lesenswert?

error schrieb:
> Ohne das Datenblatt lesen zu können ein fast unmögliches unterfangen.

Ehrlich gesagt, komme ich bisher eigentlich ganz gut klar.

@ A. K.
vielen Dank für den Link, den kannte ich noch nicht und der ist wirklich 
gut :)

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
Noch kein Account? Hier anmelden.