ADC von xmega misst nicht korrekt

Gast #4898753
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
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
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.. :(.
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?
Gast
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.