Forum: Mikrocontroller und Digitale Elektronik XMEGA128A1, ADC Input Problem


von Alexander H. (ill_son)


Lesenswert?

Hallo,

ich versuche gerade mit dem oben genannten Controller einen Analogwert 
an POARTA:0 mit dem ADCA zu wandeln. Meine Initialisierung sieht wie 
folgt aus:
1
uint8_t ADCA_Init()
2
{
3
  ADCA.CALL = ReadCalibrationByte( offsetof(NVM_PROD_SIGNATURES_t, ADCACAL0) );
4
  ADCA.CALH = ReadCalibrationByte( offsetof(NVM_PROD_SIGNATURES_t, ADCACAL1) );
5
  
6
  PORTA.DIRCLR = 0xFF;
7
  ADCA.CTRLA = ADC_ENABLE_bm;
8
  ADCA.CTRLB = ADC_RESOLUTION_12BIT_gc;
9
  ADCA.REFCTRL = ADC_REFSEL_INT1V_gc | ADC_BANDGAP_bm;
10
  ADCA.PRESCALER = ADC_PRESCALER_DIV512_gc;
11
  
12
  ADCA.CH0.CTRL = ADC_CH_GAIN_1X_gc | DC_CH_INPUTMODE_SINGLEENDED_gc;
13
  ADCA.CH0.MUXCTRL = 0x00;
14
  ADCA.CH0.INTCTRL = ADC_CH_INTLVL_LO_gc;
15
16
  return(1);
17
}
18
19
ISR(ADCA_CH0_vect)
20
{
21
  uint8_t tmp;
22
  tmp = ADCA.CH0.RESL;
23
  adc_result = (ADCA.CH0.RESH << 8) | tmp;
24
}

Nun lege ich den PIN auf GND und trotzdem wird etwas ungleich 0 (etwa 
180) angezeigt. Ich habe das Gefühl, dass der Eingang noch auf der 
Temperaturreferenz hängt, denn wenn ich die zuschalte und den Controller 
"beföne", funktioniert das (es ändert sich der Wert etwa um 2000 herum). 
Kann mir bitte jemand sagen, was ich nicht beachtet habe.

Grüße, Alex

: Bearbeitet durch User
von Nobby Nic (Gast)


Lesenswert?

Figure 25-11 aus dem XMega A Manual?

von Alexander H. (ill_son)


Lesenswert?

Hallo Nobby,

danke für die schnelle Antwort. Ich verstehe aber nicht, dass sich etwas 
ändert, wenn ich die Temp-Referenz zuschalte. Wenn der Eingang auf den 
PORT-PIN gemuxt ist, dürfte das ja keine Auswirkung haben. Es passiert 
auch nichts, wenn ich den Spannungswert am PORT-PIN ändere.

: Bearbeitet durch User
von Nobby Nic (Gast)


Lesenswert?

Wie schaltest du die zu? Code?

von Alexander H. (ill_son)


Lesenswert?

Ich aktivuiere die Temp-Ref.
1
ADCA.REFCTRL = ADC_REFSEL_INT1V_gc | ADC_BANDGAP_bm | ADC_TEMPREF_bm;

Wie gesagt, es ändert sich auch nichts, wenn ich die PIN-Spannung 
ändere. Ich habe mal versuchsweise den Mux auf PIN1 gelegt und sofort 
4095 erhalten. Das deutet für mich darauf hin, dass nun die Bandgap als 
Eingang zu geschaltet ist. Irgenwie bin ich nicht im SingleEndedMode, 
sondern noch auf intern, habe ich das Gefühl.

Grüße, Alex

von Alexander H. (ill_son)


Lesenswert?

Hallo,

ich habe den (extrem dummen) Fehler gefunden.

Statt mit
1
ADCA.CH0.CTRL |= ADC_CH_START_bm;

eine Wandlung zu starten, habe ich das mit
1
ADCA.CH0.CTRL = ADC_CH_START_bm;

getan und damit natürlich jedes mal die Eingangsquelle zurückgesetzt. 
Dämlich!

Grüße, Alex

: Bearbeitet durch User
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.