Moin Leute, ich möchte ADC Werte über USB ausgeben. Mein aktuelles Programm nimmt ADC-Werte auf und gibt diese auch über USB aus. Das Problem ist, dass die ADC-Werte nicht stimmen. Das Programm ohne Timer1 und USB gibt allerdings richtige ADC-Werte aus. Unten sind die wichtigsten Zeilen meines Programmes. Init:
1 | static void EFM32_Init(void) |
2 | {
|
3 | |
4 | CDC_Init(); |
5 | SegmentLCD_Init(false); |
6 | |
7 | CMU_OscillatorEnable(cmuOsc_HFXO, true, false); |
8 | CMU_ClockSelectSet( cmuClock_HF, cmuSelect_HFXO ); |
9 | |
10 | CMU_ClockEnable(cmuClock_HFPER, true); |
11 | CMU_ClockEnable(cmuClock_ADC0, true); |
12 | CMU_ClockEnable(cmuClock_TIMER1, true); |
13 | |
14 | USBD_Init(&usbInitStruct); |
15 | |
16 | TIMER_Init(TIMER1, &timerInit); |
17 | |
18 | TIMER_IntEnable(TIMER1, TIMER_IF_OF); |
19 | |
20 | NVIC_EnableIRQ(TIMER1_IRQn); |
21 | |
22 | TIMER_TopSet(TIMER1, TOP); |
23 | |
24 | TIMER1->CNT=0; |
25 | |
26 | }
|
sowie:
1 | static void ADCConfig(void) |
2 | {
|
3 | ADC_Init_TypeDef init = ADC_INIT_DEFAULT; |
4 | ADC_InitSingle_TypeDef singleInit = ADC_INITSINGLE_DEFAULT; |
5 | |
6 | init.timebase = ADC_TimebaseCalc(0); |
7 | |
8 | init.prescale = ADC_PrescaleCalc(7000000, 0); |
9 | |
10 | ADC_Init(ADC0, &init); |
11 | |
12 | singleInit.reference = adcRef5VDIFF; |
13 | singleInit.input = adcSingleInputCh0;/ |
14 | singleInit.resolution = adcRes12Bit; |
15 | |
16 | init.warmUpMode = adcWarmupKeepScanRefWarm; |
17 | |
18 | singleInit.acqTime = adcAcqTime32; |
19 | |
20 | ADC_InitSingle(ADC0, &singleInit); |
21 | |
22 | }
|
sowie:
1 | void TIMER1_IRQHandler(void) |
2 | {
|
3 | |
4 | TIMER_IntClear(TIMER1, TIMER_IF_OF); |
5 | |
6 | ADC_Start(ADC0, adcStartSingle); |
7 | |
8 | while (ADC0->STATUS & ADC_STATUS_SINGLEACT); |
9 | |
10 | ergebnis = ADC_DataSingleGet(ADC0); |
11 | }
|