Forum: Mikrocontroller und Digitale Elektronik ADMUX ändern im ADC Interupt möglich?


von Crest (Gast)


Lesenswert?

Ich stehe vor dem Problem 8 Lego Lichtsensoren mit einem ATmega644 
ansprechen zu wollen. Über diese fand ich aus diversen Quellen 
zusammengesucht herraus:
- AVR mit AVcc = Vcc = +5V betreiben
- 10kOhm Pull-Up Widerstand gegen +5Volt an PORTAn
- DDRAn = 1, PORTAn = 1 für min. 3ms zum aufladen des Stützkondensators
- DDRAn = 0, PORTAn = 0 für min 5us bzw. max 0,1ms und während dessen 
mittels ADC die Spannung messen.

Meine Idee dazu ist es den ADC in den Free Running Mode zu versetzen und 
im ADC Interrupt ADMUX zu ändern um zwischen den bis zu 8 an PORTA 
angeschlossenen Sensoren zu wechseln.
Ist dies möglich oder läuft dann bereits die nächste Konvertierung (die 
den alten ADMUX Wert verwendet)?

MfG Crest

von Diensthabender Troll (Gast)


Lesenswert?

Ich verwerfe meist zur Sicherheit die jeweils erste Messung nach der 
ACMUX-Umschaltung. Ansonsten siehe hier:
Beitrag "Re: ADC: Zweiter Kanal misst nicht"

von spess53 (Gast)


Lesenswert?

Hi

Im Datenblatt S.238 ist ein schönes Timingdiagramm.

MfG Spess

von Crest (Gast)


Lesenswert?

Danke da muss ich wohl mit Blindheit geschlagen gewesen sein.
Demnach ist dies dies bei Beginn der Ausführung des Interrupts noch min. 
einen halben ADC Clock Zyklus bis ADMUX (genauer REFSn und MUXn) gelesen 
werden bei 20MHz / 1 und ADC Prescaler von 128 gut möglich.

MfG Crest

von Benedikt K. (benedikt)


Lesenswert?

Crest schrieb:
> Demnach ist dies dies bei Beginn der Ausführung des Interrupts noch min.
> einen halben ADC Clock Zyklus bis ADMUX (genauer REFSn und MUXn) gelesen
> werden bei 20MHz / 1 und ADC Prescaler von 128 gut möglich.

Wenn noch ein anderer Interrupt dazukommt, dann verpasst man das leicht. 
Ich würde es daher anders machen:
Verwende den ADC nicht im Freerunning Mode, sondern setze im ADC 
Interrupt zuerst ADMUX und starte dann erst die nächste Messung. So 
kannst du sicher sein, dass der ADMUX Wert übernommen wird.

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.