Forum: Mikrocontroller und Digitale Elektronik Kann DMA beim XMega ADC den Muxer steuern?


von F. K. (superpcfan)


Lesenswert?

Hallo

Ich habe überlegt, ob es Sinn macht, für meine ADC Anwendung die Daten 
per DMA in den RAM zu schreiben.

Meine Frage ist, kann die DMA Hardware den Multiplexer des ADC 
umschalten?

Momentan schreibt der Prozessor die Daten in den RAM mit einer Routine, 
die 50 Mal pro Sekunde aufgerufen wird. Die Routine schaltet auch den 
ADC Multiplexer um. Ich benötige nur recht "langsam" Werte vom ADC. Ich 
nutze alle Pins und benötige nur eigentlich nur 4 Werte pro Sekunde.

Wenn ich nun den DMA verwenden würde, müsste ich den Conversion Complete 
Interrupt nutzen, um den Multiplexer umzuschalten. Bei der minimalen 
Taktrate von 128kHz würde das ja mehr Prozessorlast bedeuten als vorher.

Ist DMA hier möglich/sinnvoll?

von Gerhard G. (g_g)


Lesenswert?

Hallo,

ich verwende z.B. folgendes Beispiel (Code wurde verkürzt)

// ADC Init

ADCA.EVCTRL=ADC_SWEEP_01_gc | ADC_EVACT_NONE_gc; // CH0 und CH1

// Free Running mode: On
ADCA.CTRLB|=ADC_FREERUN_bm;

// Enable the ADC
ADCA.CTRLA|=ADC_ENABLE_bm;


//DMA INIT

DMA.CH0.TRIGSRC   =  0x10; // ADCA CH0 is trigger source

DMA.CH1.TRIGSRC   =  0x11; // ADCA CH1 is trigger source

Das funktioniert ohne einen Interrupt.

Man hat aber nur 4 DMA-Channel

DMA kann alle Modis des ADC verarbeiten.

Gruß G.G.

von Hagen R. (hagen)


Lesenswert?

Die neue XMega U Serie, zB. ATXMega32A4U kann auf ADC Kanal 0 
automatisch nach jeder Messung die ADC Eingangspins durchschalten.

Gruß hagen

von F. K. (superpcfan)


Lesenswert?

Mein ATXMega ist ein ATXMega32A4AU.
Ist das "U" Serie genug?
Ich habe nämlich im XMega A Manual diese Funktion nicht gesehen.

Oder steht das zufällig auch in einer Appnote?

von Basti (Gast)


Lesenswert?

Wohl eher nicht, er meint wohl den XMega mit USB...

Dachte es gibt kaum Unterschiede zwischen den XMegas ohne und mit u, 
außer kleineres Erreta und USB?!

von F. K. (superpcfan)


Lesenswert?

Ich habe gerade das hier gefunden:

http://www.ineltek.com/de/news/Atmel_AVR_XMEGA_USB.php

Da muss ich mal schauen, ob ich diese neuen U-Typen von gängigen 
Distrubutoren beziehen kann.

btw. Habt ihr einen Geheimtipp, um günstig an Dip-Adapterplatinen wie 
die hier zu kommen?

http://www.reichelt.de/Laborkarten/RE-903/3/index.html?;ACTION=3;LA=2;ARTICLE=105491;GROUPID=3374;artnr=RE+903;SID=11UIfDN38AAAIAAF-mE4Q667d892947e9bd93b4b43c6687d8ccd6

Für TQFP, SOT, usw.?

Ich finde 5 Euro für so eine Platine, wenn der Prozessor schon nur 5 
Euro kostet, ein bischen heftig.

von mephistopheles (Gast)


Lesenswert?

Schau mal bei ANVILEX vorbei; die haben alle mögliche Adapterplatinen zu 
günstigen Preisen

mfg

von F. K. (superpcfan)


Lesenswert?

TQFP44 für 1 Euro bei 2€ Versand!

Die sind ja genial!

Danke für den Tip!

von Hagen R. (hagen)


Lesenswert?

F. K. schrieb:
> Mein ATXMega ist ein ATXMega32A4AU.
> Ist das "U" Serie genug?
> Ich habe nämlich im XMega A Manual diese Funktion nicht gesehen.
>
> Oder steht das zufällig auch in einer Appnote?

Ist nicht die gleiche Serie, aber du kannst sie 1 zu 1 ersetzen. Ich 
meinte ATXmega32A4U-AU ist vergleichebar zu deinem ATXmega32A4-AU

Sieh in das "XMega AU Manual.pdf" 
http://www.atmel.com/devices/ATXMEGA32A4U.aspx?tab=documents

Distries:

http://de.mouser.com/Search/Refine.aspx?Keyword=atxmega32a4u
http://de.farnell.com/jsp/search/browse.jsp;jsessionid=IT4RS1ZTQALAUCQLCIRJK0Q?N=0&Ntk=gensearch&Ntt=atxmega32a4u&Ntx=mode+matchallpartial&exposeLevel2Refinement=true&suggestions=false&ref=globalsearch&_requestid=97024

Gruß hagen

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.

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.