Messung VCC (Batteriespannung) mit XMega - E

OP #6597202
Lesenswert?

Hallo,
ich möchte meine Speisespannung (2 x AA 1.5V) messen.

uC: ATxMega32 E5

Dazu hab ich für die referenz die interne Ref 1V und die zu messende 
Spannung VCC/10 ausgewählt. 12Bit (eigentlich nur 11Bit, da in signed 
mode). Das sollte dann bei 3.0V etwa 614 counts als "Messwert" ergeben.

Bei manchen boards funktioniert das (Messwert von 3V auf 2V: ca 600 auf 
400)

Bei manchen leider nicht (Misst nur von 3V auf 2.8V korrekt (600 auf 
560).

Unter 2.8V ist der Output sehr schwankend zwischen ca 600 und 230.<br />

Unter 2.6V ist der Output dann geleich nur noch so um 230 rum.

Wieso dass manche Boards funktionieren und manche nicht, ist mir ein 
Rätsel.
Es sind die genau gleichen uCs drauf. Und von der Schaltung kann es ja 
auch nicht abhängen, da dies ja interne Signale sind. Sonst müsste ja 
die Speisung auf ca. 1.12V absinken, was sie aber nicht tut. Dann würde 
der Prozessor eh nicht mehr tun.

Hier mal der Code, ich hab alles schon zehnmal durchstudiert, finde aber 
den Fehler nicht. Vielleicht sieht ihn ja jemand anders?
1
void adc_init_1V_ref() {
2
  ADCA.CTRLA = ADC_FLUSH_bm | ADC_ENABLE_bm; // Flush and Enable ADC
3
  ADCA.CTRLB = ADC_SIGNED_MODE_bm | ADC_RESOLUTION_12BIT_gc; 
4
  ADCA.REFCTRL = ADC_REFSEL_INT1V_gc | ADC_BANDGAP_bm;
5
  ADCA.PRESCALER = ADC_PRESCALER_DIV4_gc;
6

7
  ADCA.CH0.CTRL = ADC_CH_GAIN_1X_gc | ADC_CH_INPUTMODE_INTERNAL_gc;
8
  ADCA.CH0.MUXCTRL = ADC_CH_MUXINT_SCALEDVCC_gc;
9
  ADCA.CH0.INTCTRL = ADC_CH_INTMODE_COMPLETE_gc | ADC_CH_INTLVL_OFF_gc;
10
  ADCA.CH0.AVGCTRL = ADC_CH_SAMPNUM_1X_gc;
11
}
12

13
uint16_t ubat_read_1V_ref(void) {
14
  uint16_t adc_res;
15
  ADCA.CH0.INTFLAGS = ADC_CH_IF_bm;
16
  ADCA.CH0.CTRL |= ADC_CH_START_bm;
17
  while (!(ADCA.CH0.INTFLAGS & ADC_CH_IF_bm)) {
18
    asm("NOP");
19
  }
20
  adc_res = ADCA.CH0.RES;
21
  return adc_res;
22
}

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