Forum: Mikrocontroller und Digitale Elektronik ADC von xmega misst nicht korrekt


von Weller (Gast)


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!

von Weller (Gast)


Lesenswert?

Nachtrag: Das Potentiometer regelt von 0-3.3V. Es müsste also zumindest 
auf einem kleinen Weg etwas passieren oder?

von Analogdepp (Gast)


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.

von Weller (Gast)


Lesenswert?

Bzgl. des Kondensators: Laut Datenblatt gibt es zwei AREF Eingänge. Wo 
kann ich denn auswählen, welchen ich nehmen möchte, finde dazu kein 
Register oder ähnliches.. :(.

von Alex W. (a20q90)


Lesenswert?

Weller schrieb:
> Bzgl. des Kondensators: Laut Datenblatt gibt es zwei AREF
> Eingänge. Wo kann ich denn auswählen, welchen ich nehmen möchte, finde
> dazu kein Register oder ähnliches.. :(.

Welches Datenblatt? Gibt es nur ein XMega? Was sagt das Datenblatt zu 
AVref? Wie muss der laut Hersteller für deine Schaltung beschaltet 
werden?

von Weller (Gast)


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.

von Analogdepp (Gast)


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

von Weller (Gast)


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. :(

von Analogdepp (Gast)


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....

von Alex W. (a20q90)


Lesenswert?

Weller schrieb:
> laut Datenblatt

Weilches denn? Das ohne AVref oder das mit Abblock-C?

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.