Gast
#2139182
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;
}