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
@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
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
>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.
>>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...
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
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.
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.
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?
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.
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 ...
>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.
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.
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 :)