próbkowaniem ADC w STR755 za pom

Witam wszystkich, Czy komuś udało się ustalić częstotliwość próbkowania w tym mikrokontrolerze za pomocą timera TIM0? Ja próbuję, i nie bardzo mi wychodzi. Korzystam z biblioteki za pomocą której skonfigurowałem ADC i TIM0 jak poniżej - niestety przerwanie które wskazuje na to że próbkowanie się zakończyło nie jest generowane. Sam przetwornik oraz timer (konkretnie przerwanie od OC2) działa.

void adc_init () { ADC_InitTypeDef ADC_InitStructure; TIM_InitTypeDef tim_params; EIC_IRQInitTypeDef eic_params; GPIO_InitTypeDef io_params;

MRCC_PeripheralClockConfig ( MRCC_Peripheral_ADC | MRCC_Peripheral_TIM0, ENABLE );

//To jest wyraz aktu desperacji :| io_params.GPIO_Mode = GPIO_Mode_AF_PP; io_params.GPIO_Pin = GPIO_Pin_0; GPIO_Init (GPIO1, &io_params);

ADC_InitStructure.ADC_ConversionMode = ADC_ConversionMode_OneShot; ADC_InitStructure.ADC_ExtTrigger = ADC_ExtTrigger_RisingEdge; ADC_InitStructure.ADC_AutoClockOff = ADC_AutoClockOff_Disable;

//Szybkość próbkowania: 9523.8Hz / 2 ADC_InitStructure.ADC_SamplingPrescaler = 7; ADC_InitStructure.ADC_ConversionPrescaler = 7; ADC_InitStructure.ADC_ChannelNumber = 2;

ADC_InitStructure.ADC_FirstChannel = ADC_CHANNEL0; ADC_Init(&ADC_InitStructure);

ADC_ITConfig(ADC_IT_ECH, ENABLE); ADC_Cmd(ENABLE); ADC_StartCalibration(ADC_CalibAverage_Enable);

eic_params.EIC_IRQChannel = ADC_IRQChannel; eic_params.EIC_IRQChannelPriority = 2; eic_params.EIC_IRQChannelCmd = ENABLE; EIC_IRQInit (&eic_params);

tim_params.TIM_Mode = TIM_Mode_OCActive; tim_params.TIM_Polarity2 = TIM_Polarity2_High; tim_params.TIM_ClockSource = TIM_ClockSource_Internal; tim_params.TIM_CounterMode = TIM_CounterMode_Up; tim_params.TIM_Period = 7; tim_params.TIM_Prescaler = (PCLK / ((tim_params.TIM_Period + 1)

  • Fs)) - 1; tim_params.TIM_Channel = TIM_Channel_2; tim_params.TIM_Pulse2 = 4;

TIM_Init (TIM0, &tim_params); TIM_Cmd (TIM0, ENABLE); }

// funkcja obsługi przerwania: void ADC_IRQHandler(void) { ADC_ClearITPendingBit(ADC_IT_ECH); adc_interrupt_routine (); TIM_ForcedOCConfig ( TIM0, TIM_Channel_2, TIM_ForcedAction_InActive ); }

Reply to
Artur P
Loading thread data ...

Co prawda nie uzywalem tego procesora, ale mysle, ze moze byc podobnie (pracuje akurat z str912). Przejrzyj dokladnie zrodla biblioteki dostarczanej przez ST (niestety jest tam troche bledow). W momim przypdaku sytuacja wygladala w ten sposob ze konfigurujac najpierw wyjscia nastepnie timer i przetwornik, okazywalo sie, ze timer przestawal generowac przebiegi. Uruchamiajac kazde z osobna, np tylko timer albo tylko przetwornik wszystko dzialalo. Przyczyna byl blad w procedurze konfigurujacej wejscie portu jako wejscie przetwornika. Procedura ta zmieniala dodatkowo bit odpowiedzialny za kolejny pin odlaczajac timer od wyjscia.

Moze to cie naprowadzi.

Reply to
skrzydlaty

skrzydlaty napisał(a):

Jeśli dobrze Cię zrozumiałem, to sygnał OC2 musi być wyprowadzony na nogę IO procesorka, tak? Niestety w procesorze na którym pracuję, nie ma wyjścia TIM0_OC2, może to jest przyczyną czemu nie chce mi to działać. Mamy w pracy DevBoard na którym jest MCU w większej obudowie, która ma wyprowadzony potrzebny sygnał - jutro postaram się sprawdzić. Dzięki za pomoc.

Reply to
Artur P

nie do konca o o mi chodzilo, sprawdz czy inicjalizujac przetwornik nie przestawiasz ustawien timera i odwrotnie, u mnie problem polegal na tym ze wlaczajac jedno przestawialo sie drugie(oba peryferia na jednym porcie + blad w bibliotece)

Reply to
skrzydlaty

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.