www.mikrocontroller.net

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


Autor: Crest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Diensthabender Troll (Gast)
Datum:

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

MfG Spess

Autor: Crest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.