Forum: Mikrocontroller und Digitale Elektronik Problem bei ADC mit AREF bei xMega


von Highii H. (highii)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte die ADC beim xMega nutzen, und zwar im unsigned-mode, mit 
einer externen Spannungsreferenz (AREF).
Den xMega betreibe ich ich mit 3.3V. Als externe Referenzspannung möchte 
ich ebenfalls 3.3V haben. Laut Datenblatt ist die Referenzspannung 
jedoch die extern (an Pin PA0) angelegte, MINUS 0.6V. Also will ich 
einen Spannungsteiler machen, der mit den Widerständen R1 (100kOhm) und 
R2 (330kOhm), siehe Anhang, 3.9V ergibt. Diesen schließe ich mit C1 
(100n) über GND an PA0 an. PA0 habe ich als Eingang deklariert.
Das Problem ist nun, dass, sobald ich PA0 an den Spannungsteiler 
anschließe, die Spannung von 3.9V auf 1.55V abfällt. Woher kommt das?

Ich möchte, dass, wenn ich an PA4 0V anlege, ADC_result 0 ergbibt (bzw. 
den Standard-Offset von ca. 200) und bei 3.3V ADC_result 4096 ergbt.

Anbei der Code:
1
#define F_CPU 32000000
2
#include <asf.h>
3
4
uint16_t ADC_result;
5
6
int main (void)
7
{  
8
  PORTA.DIR &=~(1<<0); // PA0 als Eingang
9
  ADCA.CTRLB |= ADC_RESOLUTION_12BIT_gc;  // 12 bit left adjust unsigned
10
  ADCA.REFCTRL |= ADC_REFSEL_AREFA_gc;  // AREF als externe Spannung
11
  ADCA.PRESCALER |= ADC_PRESCALER_DIV4_gc; // Vorteiler von 4
12
  ADCA.CTRLA |= ADC_ENABLE_bm;      // ADC enablen
13
14
  //Oszillator auf 32Mhz stellen
15
  OSC.CTRL |= OSC_RC32MEN_bm;
16
  // Warten bis der Oszillator bereit ist
17
  while(!(OSC.STATUS & OSC_RC32MRDY_bm));
18
  //Schützt I/O Register, Interrupts werden ignoriert
19
  CCP = CCP_IOREG_gc;
20
  //aktiviert den internen Oszillator
21
  CLK.CTRL = CLK_SCLKSEL_RC32M_gc;
22
23
  while(1)
24
  {  // ADC lesen
25
    ADCA.CH0.CTRL |= ADC_CH_INPUTMODE_SINGLEENDED_gc; //Single-Ended
26
    ADCA.CH0.MUXCTRL |= ADC_CH_MUXPOS_PIN4_gc; // PA4 als ADC-Eingang
27
    ADCA.CH0.CTRL |= ADC_CH_START_bm;
28
    while(!ADCA.CH0.INTFLAGS); // Warten bis Messung abgeschlosse
29
    ADC_result= ADCA.CH0.RES;
30
    delay_ms(100);
31
  }
32
}

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

ARef beim XMega darf höchstens 2.4V bzw. VCC minus 0.6V betragen. Bei 
2.5V Betriebsspannung dürfen also nur 1.9V angelegt werden. Das Absacken 
Deiner Spannungsteilerspannung liegt am Innenwiderstand des ARef-Pins.

von Highii H. (highii)


Lesenswert?

Knut B. schrieb:
> ARef beim XMega darf höchstens 2.4V bzw. VCC minus 0.6V betragen. Bei
> 2.5V Betriebsspannung dürfen also nur 1.9V angelegt werden. Das Absacken
> Deiner Spannungsteilerspannung liegt am Innenwiderstand des ARef-Pins.

Das mit 0.6V versteh ich anders. So wie ich das Datenblatt verstehe, 
beträgt die Referenzspannung 0.6V weniger, als ich anlege. Wo steht, 
dass sie höchstens VCC minus 0.6V betragen darf?
Wie kann ich dann eine Referenzspannung von 3.3V realisieren, wenn ich 
den ADC mit 3.3V betreibe?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Highii H. schrieb:
> Das mit 0.6V versteh ich anders. So wie ich das Datenblatt verstehe,
> beträgt die Referenzspannung 0.6V weniger, als ich anlege.

Dann verstehst Du das Datenblatt falsch.

Highii H. schrieb:
> Wie kann ich dann eine Referenzspannung von 3.3V realisieren, wenn ich
> den ADC mit 3.3V betreibe?

Gar nicht.

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.