Forum: Mikrocontroller und Digitale Elektronik Sleep-Funktion


von Thomas H. (Gast)


Lesenswert?

Hallo,

um Wandlungsfehler durch den Takt zu vermeiden moechte ich gerne meinen 
Controller waehrend der Wandlung in den sleep-Modus versetzten. Leider 
"haengt" er sich an dieser Stelle immer auf und setzt seine Arbeit nicht 
weiter fort. Ich habe den Modus im Idle-Status initialisiert.

Weiss da jemand Rat? Hier ein vereinfachter Programmauszug:

ldi  temp, Kanal  ; Kanalauswahl
out  ADMUX, temp

sbi  ADCSR, ADFR  ; Free Run einschalten

sbi  ADCSR, ADSC  ; Start der Wandlung

sleep                                       ; soll bei Wandlung in 
sleep-Modus gehen

wait:
sbis  ADCSR, ADIF  ; warten bis Flag gesetzt
rjmp  wait    ; weiter, wenn Flag gesetzt

in             wert1, ADCL             ; auslesen der H und L-Bits
in             wert2, ADCH

Tschuess,

Thomas H.

von Lothar (Gast)


Lesenswert?

Im SLEEP-MODUS führt der Prozessor bekanntlich keine weiteren Befehle 
aus.
Daher auch nicht deine Abfrage des Flags. Er Schläft einfach tief und 
fest.
Um ihn zu wecken, muss schon jemand recht kräftig an die Tür klopfen und 
einen
Interrupt des Schläfers auslösen.

Und hier liegt die Lösung.
Der ADC kann durch setzen des Bit ADIF im Controll- und Statusregister 
ADCSR zu dieser
Aktion veranlasst werden. In der entsprechenden Interruptroutine "ADC 
Conversation complete"
$00E       RJMP   ADC_Int
braucht hierbei nur ein IRET stehen. Hauptsache der Prozessor wacht auf.

Sinnvollerweise legt man hier die Abfrage "Welcher Kanal" und "Welcher 
Wert"
hin und speichert die Werte entsprechend.

- Lothar

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.