Christoph wrote:
> Wenn ich in einem normalen Prgramm Wert = Getadc(channel) schreibe ist
> das ja klar. Aber wenn ich den ADC oder den IDLE-sleep mode verwende,
> dann startet dieser sleep mode den ADC automatisch. Nur wie werte ich
> den ADC dann aus? Mit Getadc würde ich den Vorgang ja nochmals starten.
> Das hat ja keinen Sinn.
Genau, es macht keinen Sinn, die ADC-Quelle erst dann einzustellen, wenn
man das Ergebnis haben möchte. Denn dann muss man warten, bis das
Ergebnis da ist.
> Muß ich da dann ADCL und ADCH auswerten und wie
Ja, ADCL und ADCH in eine Variable einlesen, wenn Du 10 Bit Auflösung
brauchst. Reichen Dir 8 Bit Auflösung, dann kannst Du mittels ADLAR in
ADMUX auf linksbündige Ausgabe umschalten und brauchst dann nur ADCH
auslesen.
> stelle ich den aktuellen Kanal ein?
Das machst Du, bevor Du in den Sleep gehst. Oder noch besser, wenn Du
das Ergebnis ausgelesen hast (in der ISR ADC-Complete), dann gleich
(vorausschauend) die Quelle für die nächste Messung einstellen.
Alternativ kannst Du den ADC auch im Free-Run-Mode klappern lassen und
im Timer-Interrupt (der meist noch andere Dinge zu tun hat) ganz
nebenbei mit abfragen. Nach der Abfrage (dem Einlesen von ADCH) dann
gleich die als nächstes benutzte Quelle in ADMUX eintragen. Und
insgesamt darauf achten, dass der ADC-Takt so schnell eingestellt wird,
dass immer mindestens zwei neue Messungen fertig sind, ehe die Timer-ISR
zuschlägt. Dann hast Du nämlich stabile Werte, der erste Messwert nach
Start oder Quellenumschaltung ist nicht immer korrekt (liest man öfters
mal).
Wenn Du dann noch mit Sleep (Idle) arbeitest, dann erfolgt die letzte
Wandlung vor dem Auslesen auch noch im Sleep, was Störungen etwas
unterdrückt und somit genauere (rauschärmere) Werte liefert.
> Übrigens ich verwende den Mega8
Ich auch manchmal, allerdings in ASM, deshalb bekommst Du auch keine
BASCOM-Codebeispiele von mir...
...