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!