Forum: Mikrocontroller und Digitale Elektronik Messung VCC (Batteriespannung) mit XMega - E


von Thomas L. (delfinis)


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
}

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.