Forum: Mikrocontroller und Digitale Elektronik ADC channel im interrupt umschalten (AVR Xmega)


von hillbilly (Gast)


Lesenswert?

hallo,

ich möchte die Channel bei einem xmega die Channel im interrupt auf 
andere Pins muxen leider fürt das zu Falschen werten.
Geht das überhaupt so?
Muss man dabei etwas beachten oder sollte das grundsätzlich nur mit 
einem Wert im Muxregister gehen?

von Purzel H. (hacky)


Lesenswert?

Sicher ist das Problem loesbar, sonst wuerde kein XMega verkaufbar. Was 
sagt dennn das Datenblatt ? Das Datenblatt von Atmel, nicht das 
Gekuerzte von einem Trittbrett Anbieter.

von Knut (Gast)


Lesenswert?

Das ist kein Problem, aber meine Glaskugel sagt das in Zeile 57 ein Der 
MUX falsch gesetzt wird...


Gruß Knut

von XMEGA (Gast)


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

von Hagen R. (hagen)


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

von hillbilly (Gast)


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.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


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.

von hillbilly (Gast)


Lesenswert?

Ah Ja! Dass ist eine Erkärung.

dann muss ich den Neustart der Messung wohl aus dem Interrupt rausholen.


Danke !!

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


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.

von Martin J. (bluematrix) Benutzerseite


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

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.