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 | }
 | 
 Thread beobachten
 Thread beobachten Seitenaufteilung abschalten
 Seitenaufteilung abschalten