ADC von xmega misst nicht korrekt

Gast #4898753
Lesenswert?
• ▲
▼
Bzw. gar nicht.

Hallo erstmal,

ich möchte lediglich drei Potentiometer am ADC (Kanal 9,8,7) messen. 
Dazu sei vorweg gesagt, dass ich hierfür auf einen Kondensator am AREF 
Eingang verzichtet habe, da es nicht so genau sein muss. Wenn der jedoch 
zwingend da sein muss, werde ich das noch ändern. Ich schmeisse eh die 
letzten 4 bit über Bord :).

Ich initialisiere den ADC mit folgenden Zeilen und starte auch gleich 
die ersten Wandlungen:
1
ADCA.REFCTRL = ADC_REFSEL_INTVCC_gc;    
2
ADCA.CTRLB = ADC_RESOLUTION_12BIT_gc;
3
ADCA.PRESCALER = ADC_PRESCALER_DIV512_gc;
4
ADCA.CTRLA = ADC_ENABLE_bm;
5
ADCA.CH0.MUXCTRL = 9;  
6
ADCA.CH1.MUXCTRL = 8;  
7
ADCA.CH2.MUXCTRL = 7;  
8
ADCA.CH0.CTRL = ADC_CH_START_bm | ADC_CH_INPUTMODE_SINGLEENDED_gc;  ADCA.CH1.CTRL = ADC_CH_START_bm | ADC_CH_INPUTMODE_SINGLEENDED_gc;  ADCA.CH2.CTRL = ADC_CH_START_bm | ADC_CH_INPUTMODE_SINGLEENDED_gc;

Mit folgenden Zeilen prüfe ich auf jeden Kanal, ob eine Wandlung fertig 
ist und starte die nächste. Laut Debugger wird jede If Anweisung in 
jedem zyklus ausgeführt?
1
if(ADCA.CH0.INTFLAGS & 1){
2
  ADCA.CH0.INTFLAGS |= 1;
3
  ADCA.CH0.CTRL = ADC_CH_START_bm | ADC_CH_INPUTMODE_SINGLEENDED_gc;
4
}
5
if(ADCA.CH1.INTFLAGS & 1){
6
  ADCA.CH1.INTFLAGS |= 1;
7
  ADCA.CH1.CTRL = ADC_CH_START_bm | ADC_CH_INPUTMODE_SINGLEENDED_gc;
8
}
9
if(ADCA.CH2.INTFLAGS & 1){
10
  ADCA.CH2.INTFLAGS |= 1;
11
  ADCA.CH2.CTRL = ADC_CH_START_bm | ADC_CH_INPUTMODE_SINGLEENDED_gc;
12
}

Die Messung liefert jedoch immer 0x0b :(. Weiß einer Rat? Ich habe mit 
Multimeter durchgemessen, dass die Spannungen am Portpin ankommen. Diese 
sind ebenfalls als Eingänge definiert!
Gast #4898763
Lesenswert?
• ▲
▼
Weller schrieb:
> Wenn der jedoch
> zwingend da sein muss, werde ich das noch ändern.

Ja, wegen des erheblichen Aufwands so einen Kondensator
in die Schaltung einzubringen würde ich mir das sehr gut
überlegen bevor ich das tun würde. Und der Nutzen des
ganzen Aufwands ist ja doch sehr fraglich.
Gast #4898790
Lesenswert?
• ▲
▼
In Doc8077 fällt das Wort "Aref" nicht einmal im Zusammenhang mit 
Kondensator. Deswegen habe ich diesen erstmal weggelassen, da der 
Eingang dafür scheinbar gar nicht vorgesehen ist und ich den gar nicht 
benötige.
Gast #4898840
Lesenswert?
• ▲
▼
Weller schrieb:
> Laut Datenblatt gibt es zwei AREF Eingänge.

Du widersprichst dir selbst:

Weller schrieb:
> da der Eingang dafür scheinbar gar nicht vorgesehen ist


Wenn du schon keinen ARef Eingang benutzen willst musst du
trotzdem dafür sorgen dass deine AVcc möglichst frei von
Störungen ist. Das geschieht natürlich am Besten durch
Weglassen von Abblock-Kondensatoren.

Weller schrieb:
> dass ich hierfür auf einen Kondensator am AREF
> Eingang verzichtet habe
Gast #4898852
Lesenswert?
• ▲
▼
Ich habe natürlich einen Abbockkondensator von AVCC nach GND ganz nah am 
Pin.  Ich wiederhole mich aber, laut Datenblatt scheinen die Aref nur 
dazu da zu sein, eine externe Referenzspannung anzulegen, aber keine 
Kondensatoren bei interner Referenzspannungen zu verwenden. Das kenne 
ich z.B. von den normalen Atmegas, bei denen steht das aber auch 
explizit im Datenblatt drin.

Und wenn schon, wenn es etwas wabern würde ist egal, es steht aber 
felsenfest auf dem selben Wert. :(
Gast #4898878
Lesenswert?
• ▲
▼
Weller schrieb:
> Ich wiederhole mich aber, laut Datenblatt scheinen die Aref nur
> dazu da zu sein, eine externe Referenzspannung anzulegen, aber keine
> Kondensatoren bei interner Referenzspannungen zu verwenden.

Ja, so interpretiere ich das auch.

Und nach sorgfältigem Studium deines Code-Schnipsels stelle
ich fest dass du eine interne Referenz verwendest.

Versuch doch mal dein Wissen aus einem Atmel-Beispiel zu
verbessern....

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