Xmega64D3 ADC funktioniert nicht

Gast #2139182
Lesenswert?

Hallo ich habe einen Atxmega64 D3 und möchte ein analoges Signal von PA2 
digitalisieren.

Leider wandelt mein ADC nichts und bleibt hier stecken: 
while(!ADCA.CH0.INTFLAGS);

Was habe ich falsch gemacht?


void adc_init(void)
{
  PORTA.DIR = 0;
  ADCA.CTRLA |= ADC_ENABLE_bm;        // enable adc
  ADCA.CTRLB |= ADC_RESOLUTION_8BIT_gc;    // 8 bit unsigned conversion 
(pos 11bits)
  ADCA.REFCTRL = ADC_REFSEL_INT1V_gc | 0x02;           // internal 1V 
bandgap reference
  ADCA.PRESCALER = ADC_PRESCALER_DIV512_gc;             // peripheral 
clk/16 (2MHz/16=125kHz)
  ADCA.CH0.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;
  ADCA.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN2_gc ;      // PORTA:2
  ADCA.CH0.INTCTRL = ADC_CH_INTLVL_MED_gc;              // ME level 
interrupt
}



int main(void)
{
adc_init();

// Alle Interrupt Levels aktivieren
PMIC.CTRL = PMIC_HILVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_LOLVLEN_bm;

// Interrupts global an
sei();

while(1)
{

  int16_t result;
  ADCA.CH0.CTRL |= ADC_CH_START_bm;
   while(!ADCA.CH0.INTFLAGS);
  result = ADCA.CH0RES;


}
Gast #2139389
Lesenswert?

Hallo,


>NEU schrieb:

Der Code  sollte eigentlich ok sein.

Außer: ADCA.CH0.INTCTRL = ADC_CH_INTLVL_MED_gc;

Hier sollte dann noch eine ADCA-Interrupt-Funktion folgen.

Oder mit ADC_CH_INTLVL_OFF_gc den Interrupt ausschalten.

Ob das der Fehler ist kann ich nicht sagen.

Gruß XMEGA
Gast #2140911
Lesenswert?

Ich habe den Fehler gefunde. Es war eine "alte" header- Datei 
eingebunden. Dort hat der MUX- des ADCs wohl noch nicht funktioniert. 
Durch das einbinden des neuen Header iox64d3.h funktioniert der ADC.

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