|
Датчик температуры DS18B20 и прерывания |
|
|
|
 |
Ответов
|
Jul 16 2013, 08:50
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(VAI @ Jul 16 2013, 12:36)  Для таймслотов существует диапазон значений, а не строго N микросекунд. Для STM32 можно при настройке контроллера прерываний задать приоритеты каждому прерыванию. Ну и в перрывании не надо сидеть слишком долго... Для STM32 вообще все делается на таймере прекрасно: один канал сравнения и второй канал захвата. Т.е. критичные тайминги формируются аппаратно, а расстояние между битами плюс-минус километр - можно и в другом прерывании поработать. Работает гирлянда из 8 датчиков без вопросов. Проверял один датчик через 200 метров от -30 до 120 C - тоже работает.
|
|
|
|
|
Jul 17 2013, 06:09
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(k000858 @ Jul 17 2013, 06:44)  здорово было бы увидеть пример кода под любую серию контроллера  Единственное нужно выбрать и настроить таймер. CODE //----------------------------------------------------------------------------- // void init_TIMER12(void) //----------------------------------------------------------------------------- void init_TIMER12(void) { TIM12->CR1 = 0; TIM12->CCER = 0;
if(rcc_state == RCC_STATE_PLL) TIM12->PSC = ((FPLL >> 1) / 1000000) - 1; else TIM12->PSC = (FHSI / 1000000) - 1;
TIM12->ARR = 1000;
TIM12->CCR1 = 2 - 1; TIM12->CCMR1 = (OC_MODE_PWM1 << TIM_CCMR1_OC1M) | (1 << TIM_CCMR1_CC2S);
TIM12->CCER = (1 << TIM_CCER_CC2E) | (0 << TIM_CCER_CC2P);
TIM12->DIER = (1 << TIM_DIER_UIE) | (1 << TIM_DIER_CC1IE) | (1 << TIM_DIER_CC2IE);
TIM12->CR1 = (0 << TIM_CR1_CEN); }
//----------------------------------------------------------------------------- // void TIM8_BRK_TIM12_IRQHandler(void) //----------------------------------------------------------------------------- void TIM8_BRK_TIM12_IRQHandler(void) __attribute__((interrupt("IRQ"))); void TIM8_BRK_TIM12_IRQHandler(void) { if(TIM12->SR & (1 << TIM_SR_UIF)) { TIM12->SR &= ~(1 << TIM_SR_UIF);
OW_on_data(TIM12->CCR2); }
if(TIM12->SR & (1 << TIM_SR_CC1IIF)) { TIM12->CCER &= ~(1 << TIM_CCER_CC1E); TIM12->SR &= ~(1 << TIM_SR_CC1IIF); }
if(TIM12->SR & (1 << TIM_SR_CC2IIF)) { TIM12->SR &= ~(1 << TIM_SR_CC2IIF); } }
|
|
|
|
Сообщений в этой теме
k000858 Датчик температуры DS18B20 и прерывания Jul 16 2013, 06:08 1113 вешать 1-wire на какой-то апаратный интерфейс, нек... Jul 16 2013, 06:13 firew0rker Цитата(1113 @ Jul 16 2013, 13:13) вешать ... Jul 16 2013, 07:34 k000858 я так понимаю, временные задержки интерфейс соблюд... Jul 16 2013, 07:45 1113 Цитата(k000858 @ Jul 16 2013, 10:45) я та... Jul 16 2013, 07:50      k000858 Цитата(adnega @ Jul 17 2013, 09:09) Единс... Jul 17 2013, 06:17 firew0rker Цитата(VAI @ Jul 16 2013, 15:07) Вот тут ... Jul 16 2013, 15:25 Golikov A. а можно ЦПЛД махонькую воткнуть чтобы она все соби... Jul 16 2013, 08:11 VAI Точка соединения R77, R74 - это питание. Jul 16 2013, 16:45 firew0rker Цитата(VAI @ Jul 16 2013, 23:45) Точка со... Jul 16 2013, 17:07  VAI Цитата(firew0rker @ Jul 16 2013, 21:07) О... Jul 16 2013, 17:18   firew0rker Цитата(VAI @ Jul 17 2013, 00:18) В данном... Jul 16 2013, 23:59 sidy У меня вопрос близкий к данной теме, по таймерам S... Jul 16 2013, 17:05 Golikov A. Цитата(sidy @ Jul 16 2013, 21:05) У меня ... Jul 16 2013, 18:24 toweroff Я использовал SSP (то, что от аппаратного осталось... Jul 16 2013, 22:52
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|