Forum: Analoge Elektronik und Schaltungstechnik AVR, 3 analoge Ports nacheinander lesen


von Norbert (Gast)


Lesenswert?

Hallo,
arbeite mit einem Atmega8 (AVR) und möchte 3 analoge Kanäle nacheinander 
einlesen. Mit einem Kanal geht das super aber mit mehreren finde ich 
leider keine Lösung . Interruptverarbeitung wäre bevorzugt. In den 
Beispielen habe ich nichts gefunden. Ein Beispiel wäre toll.
Danke schon mal im voraus.

von Gast (Gast)


Lesenswert?

Wo ist den Dein Problem?
Der Interrupt holt nur die Werte aus den ADC und dazwischen
muss doch nur Multiplext werden.

von Norbert (Gast)


Lesenswert?

Hallo,
mein Problem ist wie ich die ausgelesenen Werte den Ports zuordnen kann. 
Das ADCH und ADCL Register ist doch Puffer für jeden Port.
Könntest du mir ein Beispiel geben ?
Danke

von ... .. (docean) Benutzerseite


Lesenswert?

>mein Problem ist wie ich die ausgelesenen Werte den Ports zuordnen kann.

Du weißt doch wohl was du vorher in ADMUX reingeschrieben hast? also!

von Norbert (Gast)


Lesenswert?

Hallo,
ja stimmt, werde ich gleich ausprobieren.
Danke

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>>mein Problem ist wie ich die ausgelesenen Werte den Ports zuordnen kann.
> Du weißt doch wohl was du vorher in ADMUX reingeschrieben hast? also!
Du könntest sogar ADMUX einfach wieder auslesen   :-o

von Benedikt K. (benedikt)


Lesenswert?

Lothar Miller schrieb:
>>>mein Problem ist wie ich die ausgelesenen Werte den Ports zuordnen kann.
>> Du weißt doch wohl was du vorher in ADMUX reingeschrieben hast? also!
> Du könntest sogar ADMUX einfach wieder auslesen   :-o

Wobei dieser Wert aber nicht zwingend der Kanal ist, der gerade gemessen 
wurde:
Wenn ADMUX hinterher (also nach dem Start der Messung) beschrieben 
wurde, dann wird der Wert in ADXMUX erst mit dem Start der nächstes 
Messung aktiv.
Dies kann man ausnutzen wenn man den ADC im Freerunning Mode betreibt 
und trotzdem mehrere Kanäle wandelt.
Davon würde ich aber erstmal abraten, sondern für den Anfang den ADC 
immer per Hand nach dem Setzen des ADMUX neu starten.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Wenn ADMUX hinterher (also nach dem Start der Messung) beschrieben
> wurde, dann wird der Wert in ADXMUX erst mit dem Start der nächstes
> Messung aktiv.
Oh, das ist ja extrem böse...  :-/

Zudem steht es genau invertiert im DB:
1
 the user cannot tell if the next conversion is based on 
2
 the old or the new settings.
Von der aktuellen Wandlung steht da gar nichts, diesen Umkehrschluss 
muß man selber implizieren.

von Benedikt K. (benedikt)


Lesenswert?

Lothar Miller schrieb:

> Zudem steht es genau invertiert im DB:
>
1
>  the user cannot tell if the next conversion is based on
2
>  the old or the new settings.
3
>

Ja, das ganze ist etwas tricky, daher rate ich, wie oben schon 
geschrieben, davon ab ADMUX im Freerunning Mode zu ändern, wenn man 
nicht genau weiß was man macht.
Der Haken ist nämlich dieser Satz:
1
ADMUX can be safely updated in the following ways: During conversion, minimum one ADC clock cycle after the trigger event.
Man muss ausreichend lange warten (nämlich mindestens einen ADC Takt 
nach dem Start der Umwandlung), allerdings kann man nicht exakt sagen 
wie lange das ist, denn man kennt den aktuellen Stand des ADC Prescaler 
nicht.

Bei dem ADC gibts noch mehr Gemeinheiten rund um ADMUX in denen das 
Datenblatt etwas abweichend von der Realität ist. Irgendwo hatte glaube 
ich Jörg Wunsch da mal etwas erwähnt, irgendwas was den Zeitpunkt des 
Samplevorgangs angeht.

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.