Forum: Mikrocontroller und Digitale Elektronik ADC XMega256 CTRL Register


von henk (Gast)


Lesenswert?

Hallo,

habe ein problemchen den ADC am Xmega zu konfigurieren. Ich möchte 
Inputmode Diff, Diff with gain funktioniert. Was muss ich da noch 
ändern? oder worauf ist zu achten?


void init_adc_A_frun(char gain)  {
ADCA.CTRLA = 0x01;       //0000 0001
ADCA.CTRLB = 0x18;       //0001 1000
ADCA.REFCTRL = 0x10;     //0001 0000
ADCA.PRESCALER =0x03;    //ADC_PRESCALER_DIV32_gc;  //
ADCA.CH0.CTRL = 0x02;    // hier ist das Problem, mit 0x03 für Diffw 
gain02 geht es;)
ADCA.EVCTRL = 0x40;
ADCA.CH0.MUXCTRL = 0x00;
ADCA.CH1.MUXCTRL = 0x00;  //0000 0000


}

Danke

von Gerhard G. (g_g)


Lesenswert?

Hallo,

Schau dir doch das mal an:
Wichtig: AVR1300: Using the XMEGA ADC

Bei der Einstellung "Diff mit oder ohne Gain" sind die MUX Positive 
Input and MUX Negative Input (MUXPOS and MUXNEG) zu berücksichtigen.

// ADC channel 0 positive input: ADC4 pin
// ADC channel 0 negative input: ADC0 pin


ADCA.CH0.CTRL |= ADC_CH_GAIN_1X_gc | ADC_CH_INPUTMODE_DIFF_gc;

ADCA.CH0.MUXCTRL |= ADC_CH_MUXPOS_PIN4_gc | ADC_CH_MUXNEG_PIN0_gc;

So viel ich mich erinnere, sind die negativen Pin's ADC0-ADC3
Könnte aber auch der Hinweis bei Diff-Gain gewesen sein!

Sonst tausche halt die Port's

Gruß G.G.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

henk schrieb:
> void init_adc_A_frun(char gain)  {
> ADCA.CTRLA = 0x01;       //0000 0001
> ADCA.CTRLB = 0x18;       //0001 1000
> ADCA.REFCTRL = 0x10;     //0001 0000
> ADCA.PRESCALER =0x03;    //ADC_PRESCALER_DIV32_gc;  //
> ADCA.CH0.CTRL = 0x02;    // hier ist das Problem, mit 0x03 für Diffw
> gain02 geht es;)
> ADCA.EVCTRL = 0x40;
> ADCA.CH0.MUXCTRL = 0x00;
> ADCA.CH1.MUXCTRL = 0x00;  //0000 0000
>
>
> }

Wer soll den das verstehen? Mach es doch bitte in Klarschrift, z.B. so:
1
#define ADC  ADCA
2
static void ADCInit(void)
3
{
4
  ADC.CTRLA = 0x01;
5
  ADC.CTRLB = ADC_RESOLUTION_12BIT_gc | (ADC_MODE << 4) ;  // 12 bit right adjusted
6
  ADC.PRESCALER = ADC_PRESCALER_DIV256_gc;
7
  ADC.REFCTRL = ADC_REFSEL_VCC_gc;
8
  ADC.EVCTRL = ADC_SWEEP_012_gc ;
9
  // speed input
10
  ADC.CH0.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;
11
  ADC.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN0_gc;
12
//
13
  ADC.CH1.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;
14
  ADC.CH1.MUXCTRL = ADC_CH_MUXPOS_PIN1_gc;
15
// diff. channel
16
// gain32 for weak KMZ magnetic field sensor
17
  ADC.CH2.CTRL = ADC_CH_INPUTMODE_DIFFWGAIN_gc | ADC_CH_GAIN_32X_gc;
18
  ADC.CH2.MUXCTRL = ADC_CH_MUXPOS_PIN4_gc | ADC_CH_MUXNEG_PIN5_gc;
Das ist wesentlich einfacher zu warten und auch mal zu ändern. Nicht 
umsonst gibts doch die ganzen defines. Kanal 2 ist hier einer mit 
Verstärkung und Diferenzeingängen.

von henk (Gast)


Lesenswert?

Hallo,

Ja Matthias du hast schon recht. Werde es mir merken und bei Zeiten 
umbauen.

@G.G.   Vielen lieben Dank. Hab die Pins mit

ADCA.CH0.MUXCTRL = 0x20;

getauscht und es läuft.

Eigentlich hatte ich gehofft, das Spikes auf dem digitalisieren Signal 
verschwinden. Die Verbesserung scheint zwar da zu sein aber noch immer 
ein paar spikes.

von henk (Gast)


Lesenswert?

Hallo,

muss mich hier noch mal zu Wort melden. Im Netz habe ich folgendes thema 
gefunden.

http://www.google.de/imgres?q=datasheet+atxmega+a1+u+errata&um=1&safe=active&sa=N&hl=de&biw=1280&bih=841&tbm=isch&tbnid=fgFBr21ewZuSaM:&imgrefurl=http://www.avrfreaks.net/index.php%3Fname%3DPNphpBB2%26file%3Dviewtopic%26t%3D95536&docid=nuHUbeS-3kZxdM&imgur

Das Fehlerbild kommt meinem zeimlich nahe. Da bis jetzt alles nichts 
genutzt hat werde ich versuchen einen ATXmega128a1u-ua zu besorgen. hat 
damit schon jemand Erfahrungen. süezielle mit dem ADC? Die Errata 
scheinen ja deutlich reduziert zu sein.

von henk (Gast)


Lesenswert?

Hallo und nochmal auf deutsch,

muss mich hier noch mal zu Wort melden. Im Netz habe ich folgendes Thema 
gefunden.

Titel - 
http://www.google.de/imgres?q=datasheet+atxmega+a1+u+errata&um=1&safe=active&sa=N&hl=de&biw=1280&bih=841&tbm=isch&tbnid=fgFBr21ewZuSaM:&imgrefurl=http://www.avrfreaks.net/index.php%3Fname%3DPNphpBB2%26file%3Dviewtopic%26t%3D95536&docid=nuHUbeS-3kZxdM&imgur

Das Fehlerbild kommt meinem ziemlich nahe. Da bis jetzt alles nichts
genutzt hat, werde ich versuchen einen ATXmega128a1u-ua zu besorgen. Hat
damit schon jemand Erfahrungen. Speziell mit dem ADC? Die Errata
scheinen ja deutlich reduziert zu sein.

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.