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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.