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; }
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.