Forum: Mikrocontroller und Digitale Elektronik AtXMEGA32A4U + ADC


von Simon (Gast)


Lesenswert?

Guten Morgen,

hat hier jemand schonmal mit dem ADC der relative neuen XMEGA-A4U-Serie 
gearbeitet? Wir haben hier einen 32A4U und können die interne 
Bandgap-Spannung sowie VCC/10 korrekt messen.
Die Messung der externen Pins aber ergibt bei jeweils gleicher 
ADC-Konfiguration immer quasi den selben Wert (+-3LSB), unabhängig 
davon, welche Spannung am PIN anliegt. Erhöht man den ADC-Takt, zeigt 
sich das selbe Verhalten, nur liegt der durchschnittliche ADC-Wert 
deutlich höher.

Hat vieleicht jemand eine Idee, was da schief laufen könnte? Hatte 
jemand schon ein ähnliches Problem? Und hat schon jemand den A4U-ADC 
erfolgreich benutzt?

Vielen dank und herzliche Grüße,

von Stefan (Gast)


Lesenswert?

>> Hat vieleicht jemand eine Idee, was da schief laufen könnte?
vielleicht das Programm.
>> Hatte jemand schon ein ähnliches Problem?
ja war das Programm.
>> Und hat schon jemand den A4U-ADC erfolgreich benutzt?
ja nachdem das Programm sauber lief.

Vielleicht irgenwas vergessen zu posten ?
Stefan

von Simon (Gast)


Lesenswert?

Hallo Steffan,

danke für die Antwort. Kannst Du uns sagen, wo in deinem Programm das 
Problem gelegen hat?

Vielen Dank,

von Jens (Gast)


Lesenswert?

Da ihr nicht alles postet, habe ich meine Glaskugel bemüht.
Die ist sich fast sicher, dass ihr die Eingänge nicht direkt als 
Eingänge eingestellt habt.
Der XMega ist von den EIngängen her nicht wie die Atmegas. Das ist bei 
denen wesentlich komplexer und flexibler.
Die analogen EIngänge müssen meines Wissens nach auch noch als solche 
definiert und initialisiert werden.

Grüße, Jens

von Flo L. (florian_l)


Lesenswert?

Hey,

ich hab als einstige für den Xmega das Tutorial hier benutzt 
http://www.stromflo.de/dokuwiki/doku.php?id=xmega-c-tutorial

Es ist zwar nicht fehlerfrei aber hat mir den Einstieg sehr erleichtert 
und in Kombination mit dem Datenblatt lief es dann.

MfG

von Simon (Gast)


Lesenswert?

Hallo zusammen,

mit dem folgenden Ausschnitt konfigurieren wir den ADC:
1
uint16_t t;
2
3
PORTA_PIN0CTRL |= PORT_ISC_INPUT_DISABLE_gc;
4
5
ADCA_CTRLA = ADC_ENABLE_bm;
6
7
ADCA_REFCTRL |= ADC_REFSEL_VCC_gc;
8
ADCA_CTRLB = ADC_RESOLUTION_12BIT_gc;
9
ADCA_PRESCALER = ADC_PRESCALER_DIV128_gc;
10
11
// Configuring channel 0
12
ADCA_CH1_CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;
13
ADCA_CH1_MUXCTRL = ADC_CH_MUXPOS_PIN0_gc;
14
15
ADCA_CH1_CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;
16
ADCA_CH1_MUXCTRL = ADC_CH_MUXPOS_PIN0_gc;

Die Systemclock ist der halbe 32MHz DFLL, auf 48MHz USB-SOF-kalibriert.

Die Konversion starten wir wie folgt:
1
ADCA_INTFLAGS = ADC_CH0IF_bm;
2
ADCA_CH0_CTRL = ADC_CH_START_bm;
3
while(!(ADCA_INTFLAGS & ADC_CH0IF_bm));
4
t = ADCA_CH0RES;

Habt ihr noch weitere Tips, was fehlen oder warum es nicht funktionieren 
könnte ?

Danke und viele Grüße,

von Simon (Gast)


Lesenswert?

Hallo Flo und Jens,

vielen Dank für eure Hinweise, wir haben unseren ADC-Code mal gepostet.
Das Tutorial haben wir ebenfalls angesehen. Das Problem besteht leider 
weiterhin. Habt Ihr außer dem PORT_ISC_INPUT_DISABLE noch weitere 
Pin-Konfigurationen vorgenommen?

Danke und viele Grüße,

von Gerhard G. (xmega)


Lesenswert?

Hallo,

im Prinzip ist alles iO.
aber..


ADCA_REFCTRL |= ADC_REFSEL_VCC_gc;
ADCA_CTRLB = ADC_RESOLUTION_12BIT_gc;
ADCA_PRESCALER = ADC_PRESCALER_DIV128_gc;

// Configuring channel 0
ADCA_CH1_CTRL |= ADC_CH_INPUTMODE_SINGLEENDED_gc;
ADCA_CH1_MUXCTRL |= ADC_CH_MUXPOS_PIN0_gc;

ADCA_CH1_CTRL |= ADC_CH_INPUTMODE_SINGLEENDED_gc;
ADCA_CH1_MUXCTRL = ADC_CH_MUXPOS_PIN0_gc;

ADCA_CTRLA = ADC_ENABLE_bm;




ADCA_INTFLAGS = ADC_CH0IF_bm;
ADCA_CH0_CTRL |= ADC_CH_START_bm;
while(!(ADCA_INTFLAGS & ADC_CH0IF_bm));
t = ADCA_CH0RES;



wenn ihr zB. ADCA_CH1_CTRL |=

von Gerhard G. (xmega)


Lesenswert?

Hallo,

nochmals...

da ist was schief gelaufen..

Wenn ihr den Befehl verwendet ADCA_CH1_CTRL =

wird das Register wieder mit den neuen Daten überschrieben!

also: ADCA_CH1_CTRL |=

ADCA_CTRLA |= ADC_ENABLE_bm; immer am Ende eingeben.

Der ADC im neuen ATxmega32A4U unterscheidet sich in keienr Weise von 
seinen Artgenossen.


Gruß xmega

von Stefan (Gast)


Lesenswert?

Lass mich raten der Wert liegt irgendwo zwichen 1600 und 1700.
Ist mir auch schon passiert.

>> // Configuring channel 0

Ist das wirklich Channel 0?

>> ADCA_CH1_CTRL |= ADC_CH_INPUTMODE_SINGLEENDED_gc;
>> ADCA_CH1_MUXCTRL |= ADC_CH_MUXPOS_PIN0_gc;

Stefan

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


Lesenswert?

Gerhard G. schrieb:
> Der ADC im neuen ATxmega32A4U unterscheidet sich in keienr Weise von
> seinen Artgenossen.

Aber sicher doch: Dieser ADC funktioniert gemäß seiner Spezifikationen!

von Stefan (Gast)


Lesenswert?

@travelrec
Selbst getestet? Das wäre ja zu schön! So richtig mit Referenz bis AVCC? 
Ich hatte leider noch keinen in der Hand.
Stefan

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


Lesenswert?

Stefan schrieb:
> Selbst getestet?

Ja.

Stefan schrieb:
> Das wäre ja zu schön!

Ist es!

Stefan schrieb:
> So richtig mit Referenz bis AVCC?

Ja.

Stefan schrieb:
> Ich hatte leider noch keinen in der Hand.

Ineltek hat welche, wenn Du einige Stück benötigst. Mengen ab Q2-2012.

von Stefan (Gast)


Lesenswert?

@travelrec
Mouser hat auch irgendwas um die 900 auf Lager aber ich muss erst mal 
die alten alle kriegen bevor ich neue bestellen darf.
Ist der DAC im unteren Bereich jetzt etwa auch sauber (das Rauschen bis 
ca 600 mV)? Der DAC war für mich einer der Hauptgründe neben dem DMA den 
XMEGA zu wählen.
BTW, die Dinger kann man doch problemlos statt der ATxmega32A4 nehmen?
Stefan

von Ingolf (Gast)


Lesenswert?

Hi Leute,

Wo sieht ihr die Features im neuen xmega adc und dac zb gegenueber stm32 
oder msp430f5? Bisher hatte ti recht gute adc implementierung aber kein 
gain stage, dafuer musste ich immer nen externen adc nehmen der um die 
4$ kosten kann.
Der xmega ist hier sehr weit fortgeschritten und die inl dnl error 
stabil ueber die ganze temp liest sich sehr gut. Irgendwelche erfahrung?

von Simon (Gast)


Lesenswert?

Hallo zusammen!

Danke an xmega... grml... das sind so Fehler, die man übersieht, wenn 
man den Code schon zu auswendig kennt ;)

Vielen Dank für eure Hilfe.
Gruß,

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


Lesenswert?

Knut Ballhause schrieb:
> Stefan schrieb:
>> So richtig mit Referenz bis AVCC?
>
> Ja.

Also ähem, nein. 1V...AVcc-0.6V. Aber in dem Bereich ohne Probleme.

Stefan schrieb:
> Ist der DAC im unteren Bereich jetzt etwa auch sauber (das Rauschen bis
> ca 600 mV)? Der DAC war für mich einer der Hauptgründe neben dem DMA den
> XMEGA zu wählen.

DAC habe ich noch nicht getestet, kommt aber noch. In den Errata taucht 
nichts diesbezüglich auf.

Stefan schrieb:
> BTW, die Dinger kann man doch problemlos statt der ATxmega32A4 nehmen?

Ja. Nur dass die USB-Pins vom alten Design abweichen.

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.