ADC channel im interrupt umschalten (AVR Xmega)

Gast #2090243
Lesenswert?

Servus,


hillbilly schrieb:
> Muss man dabei etwas beachten oder sollte das grundsätzlich nur mit
> einem Wert im Muxregister gehen?

sicherlich funktioniert das.

Du musst nur die zeitliche Abfolge im Auge haben.

- Interrupt 1
- Channel wechseln
- AD-Wandlung abwarten
- Wert berechnen, sichern oder ausgeben usw.

- Interrupt 2
- usw.

Also während einer AD-Wandlung keinen Wechsel der Channel-Adresse 
zulassen.
Auch beachten, dass die Speicher-Variable durch den Interrupt nicht 
verbogen wird.

Gruß XMEGA
#2090251
Lesenswert?

Falls du nur max. 4 verschiedene Pins muxen möchtest dann geht das beim 
XMEGA komplett in Hardware. Jeder der max. 4 Channel eines ADCs wird 
statisch mit den Pins verbunden (mux). Des ADC Core wird so intiallisert 
das er alle Channels reihum sampelt. Das macht der ADC Core dann 
vollautom. in Hardware und du musst nur noch alles starten und abwrten 
bis die Daten gesampelt wurden. Nun noch mit DMA verknüpft und deine 
Daten werden sogar autom. in den SRAM Buffer geschrieben.

Ich gehe mal davon aus das die Reihenfolge der Channels immer gleich 
ist, also reihum und nicht wahlfrei.

Gruß Hagen
Gast #2092240
Lesenswert?

ja, Danke.

Ich möchte 8 Pins Muxen komme also mit 4 Channals nicht aus bzw muss 
Umschalten.
Ich hab mienen  Quellcode leider grade nicht hier, aber der Ablauf ist 
Folgender:

AD Wandlung Starten CH0-3 für pin 0-3

Interrupt wenn letzte Wandlung (CH3) abgeschlossen ist
In der Interruptroutine:
gewandelten wert speichern.
auf Pin4-7 muxen
Wandlung starten


Und beim nächsten Interrupt vise versa.

Ausgabe unter Interruptsperre.
(Firma: TravelRec.) Persönliche Seite #2092356
Lesenswert?

Das Umschalten der MUXe erfordert einige µs Zeit, das war auch schon bei 
den normalen Megas so. Direkt nach dem Umschalten zu messen, führt dazu, 
dass man entweder noch den vorher geschalteten Kanal misst oder halt 
irgendwas zwischen diesem und dem aktuellen Kanal. Im Manual bzw. der 
AppNote zum ADC steht, wann man die MUXe umschalten darf und wann man es 
lieber lässt. Mit dem Interrupt hat das nichts zu tun.
(Firma: TravelRec.) Persönliche Seite #2092462
Lesenswert?

hillbilly schrieb:
> dann muss ich den Neustart der Messung wohl aus dem Interrupt rausholen.

Nicht unbedingt. Da immer nur ein Kanal zu einer Zeit arbeitet, kannst 
Du den MUX für einen gerade abgearbeiten Kanal problemlos umschalten. Da 
Du 4 Kanäle hast, brauchst Du jeden Kanal nur 1x umzuschalten. Beim 
nächsten Sweep werden dann die neuen Werte eingelesen.
Persönliche Seite #3139990
Lesenswert?

Hallo

die von Hagen erwähnte Funktion "Input Source Scan" habe ich bei den 
Xmegas noch gar nicht gefunden. Aber das klingt sehr interessant.

Leider habe ich noch nicht ganz verstanden, wie ich diese automatische 
Umschaltung initialisieren, bzw. nutzen kann.
Kann mir hier jemand weiter helfen, bzw. ein Beispiel für die 
Initialisierung posten.

folgende Vorgang zum schnellen Auslesen des ADC stell ich mir vor.
- alle 8 ADC Eingänge werden zu 4 Differentiellen ADC Kanälen 
initialisiert
- Der Channel 0 liest nacheinander das Ergebnis der 4 Kanäle
- Das Ergebnis wird vom DMA ausgelesen und in ein Array gespeichert.

Vorteil, ich muss nur ein DMA Channel zum lesen der ADC Kanäle 
verwenden.
Wenn das so nicht realisiert werden kann, wi

Das Thema wurde auch hier kurz aufgegriffen...
Beitrag "Kann DMA beim XMega ADC den Muxer steuern?"

Grüße Martin

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren