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