dimir 2 17 февраля, 2023 Опубликовано 17 февраля, 2023 (изменено) · Жалоба Ну хорошо.А как вы настраиваете инициализация таймера.?И в прерывании этот же таймер используете вместе с ШИМ?А при инициализации таймер отключён? Изменено 17 февраля, 2023 пользователем dimir Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 17 февраля, 2023 Опубликовано 17 февраля, 2023 · Жалоба В 17.02.2023 в 17:52, dimir сказал: Ну хорошо.А как вы настраиваете инициализация таймера.? Функция init_TIMER12() В 17.02.2023 в 17:52, dimir сказал: И в прерывании этот же таймер используете вместе с ШИМ? Я не понимаю о чем вы говорите. В прерывании (TIM8_BRK_TIM12_IRQHandler) используется значение регистра захвата TIM12->CCR2, которое передается в функцию OW_on_data, где идет основной разбор. В 17.02.2023 в 17:52, dimir сказал: А при инициализации таймер отключён? При инициализации чего? Видно, что внутри init_TIMER12() первая инструкция отключает таймер, а затем полностью перенастраивает. У меня init_TIMER12() может вызываться несколько раз - если возникает сбой HSE/PLL, то аппаратные блоки переходят на HSI, когда PLL/HSE восстанавливаются, то возвращается все на высокую частоту. В эти моменты периферия полностью переинициализируется. Вам на это не стоит обращать внимание - а нужно сосредоточится на сути - причем, я не настаиваю, что мое решение хорошее и/или единственно верное. Скорее наоборот, я знаю фатальные недостатки и их невозможно обойти в моей реализации. Например, подавать питание на DQ в момент преобразования температуры. Я не подаю, поэтому некоторые датчики с паразитным подключением - не работают. Вы до этого с DS18B20 каким-то образом работали? А с таймерами STM32 работали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 17 февраля, 2023 Опубликовано 17 февраля, 2023 · Жалоба C DS18b20 только с AVR.С STM32 только с таймерами.ШИМ а с захватом не сталкивался.А почему вы задействовали переход с HSE на HSI.?Да ещё энкодер аппаратный.Ну и новогоднюю герлянду с прерыванием по таймеру.Вы мне скажите.Вы подаёте шим одноврименно читаете с это го же пина переключая таймер в режим захвата?Так я понимаю.? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 17 февраля, 2023 Опубликовано 17 февраля, 2023 · Жалоба В 17.02.2023 в 20:23, dimir сказал: C DS18b20 только с AVR.С STM32 только с таймерами.ШИМ а с захватом не сталкивался. Я настраиваю таймер с частотой 1МГц. Т.е. каждый тик таймера - ровно 1 мкс. Первый канал в режиме сравнения у меня управляет транзистором, который сажает шину на общий. Т.к. при 1 на выходе первого канала, на шине формируется нулевой потенциал (схема с открытым коллектором). На второй канал через резистор подается потенциал шины. Второй канал настроен на захват по фронту. Когда нужно передать/считать бит - в регистр сравнения (первый канал) я записываю нужную длительность в мкс, затем принудительно выставляю выход канала в 1, и настраиваю, чтобы выход сбросился в 0 при совпадении. Потом жду события UPDATE. В обработчике прерывания/события UDPATE получаю в CCR2 длительность нахождения шины в нулевом состоянии. В 17.02.2023 в 20:23, dimir сказал: А почему вы задействовали переход с HSE на HSI.? Если будет сбой внешнего кварца, то контроллер автоматом переходит на HSI - и может ограничено продолжить работу пока кварц не восстановит генерацию. Это к 1-wire отношения не имеет, просто у меня в проектах везде так. В 17.02.2023 в 20:23, dimir сказал: Да ещё энкодер аппаратный.Ну и новогоднюю герлянду с прерыванием по таймеру. Это не понял В 17.02.2023 в 20:23, dimir сказал: Вы мне скажите.Вы подаёте шим одноврименно читаете с это го же пина переключая таймер в режим захвата?Так я понимаю.? Неа. У меня два канала - первый на передачу, второй на прием. Т.к. нужно управлять мощным/внешним транзистором. Но можно и на одном пине сделать, хотя каналов все равно будет два. У вас осциллограф или логический анализатор есть, чтоб посмотреть активность на шине 1-wire? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 17 февраля, 2023 Опубликовано 17 февраля, 2023 (изменено) · Жалоба Понял один канал на RX .Второй на TX.Вот вы мне открываете глаза извините за нетехнический термин.То есть RX работает в режиме захвата а TX в ШИМе.?Анализатор у меня есть китайский.А герлянду новогоднюю (Звезду белую 16 канальную.) таймер задействован в прерывании считаю тики и переключаю порты.Сделал цыкл с помощью операторов swich и ещё одного таймера который входит в прерывание и переключает эффекты.С помощью выходного порта и кнопки автоматической.Вообщем задействовано два таймера.Мечта детства.А как можно на одном пине сделать но каналов два? И всё равно алгоритм тот же?И ещё один вопрос а зачем мощный транзистор? DS18b20 разве потребляет большой ток?Или это что бы сделать уверенный "0".А при сбое программы Вач-дог таймер не поможет?.У меня была такая проблема .Оказался блок питания не очень хороший.Я поставил на высокой стороне фильтр с импульсного блока питания и проблема ушла.Вы меня заинтриговали .Я попробую сделать нечто.Хотя ворос в том что два режима в одном таймере? Ну значит нужно каждый раз переключать?А как вы измеряите тайминги.Что бы совпало с даташитовскими? Изменено 17 февраля, 2023 пользователем dimir Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 17 февраля, 2023 Опубликовано 17 февраля, 2023 · Жалоба В 17.02.2023 в 21:45, dimir сказал: То есть RX работает в режиме захвата а TX в ШИМе.? Каналы сравнения могут работать в разных режимах, один из них ШИМ - я его не использую, а использую OC_MODE_SET_INACTIVE. Т.е. при совпадении таймера со значением в регистре CCR1, выход OC1 будет сброшен. До запуска таймера я принудительно устанавливаю OC1 в 1 записью OC_MODE_FORCE_ACTIVE. В 17.02.2023 в 21:45, dimir сказал: Анализатор у меня есть китайский. Вполне сойдет. В 17.02.2023 в 21:45, dimir сказал: А как можно на одном пине сделать но каналов два? В 17.02.2023 в 21:45, dimir сказал: И ещё один вопрос а зачем мощный транзистор? DS18b20 разве потребляет большой ток?Или это что бы сделать уверенный "0". Чтобы пин МК не торчал на улицу - иначе внешняя помеха убъет весь МК. В 17.02.2023 в 21:45, dimir сказал: А при сбое программы Вач-дог таймер не поможет?.У меня была такая проблема .Оказался блок питания не очень хороший.Я поставил на высокой стороне фильтр с импульсного блока питания и проблема ушла. Я IWDG использую, но он на практике будет срабатывать только в случае ошибки в программе. Но HardFault (может) случится раньше и можно локализовать проблему. В 17.02.2023 в 21:45, dimir сказал: А как вы измеряите тайминги.Что бы совпало с даташитовскими? Настраиваю предделитель, чтоб частота счета была 1МГц - получаю все интервалы в микросекундах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 19 февраля, 2023 Опубликовано 19 февраля, 2023 · Жалоба В 17.02.2023 в 22:41, adnega сказал: OC_MODE_FORCE_ACTIVE. В 17.02.2023 в 22:41, adnega сказал: OC_MODE_SET_INACTIVE. Я этих модов ненашёл в референсе мануал.Есть input capture output compare,PWM input.PWM output.One pulce mode.А где ваши? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 19 февраля, 2023 Опубликовано 19 февраля, 2023 · Жалоба Цитата 14.4.7 TIM1&TIM8 capture/compare mode register 1 (TIMx_CCMR1) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 19 февраля, 2023 Опубликовано 19 февраля, 2023 · Жалоба В 14.02.2023 в 20:36, adnega сказал: 1 << TIM_CR1_OPM А это в одиночном режиме? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 19 февраля, 2023 Опубликовано 19 февраля, 2023 · Жалоба В 14.02.2023 в 20:36, adnega сказал: (1 << TIM_CCMR1_CC2S); И ещё бит интирисует.Я вижу один канал а где другой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 19 февраля, 2023 Опубликовано 19 февраля, 2023 · Жалоба В 19.02.2023 в 17:37, dimir сказал: А это в одиночном режиме? Да - одиночный импульс. В 19.02.2023 в 18:07, dimir сказал: И ещё бит интирисует.Я вижу один канал а где другой? TIM_CCMR1_OC1M - задает тип сравнения для первого канала, TIM_CCMR1_CC2S - задает вход для захвата второго канала (1 = IC2 is mapped on TI2). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 19 февраля, 2023 Опубликовано 19 февраля, 2023 · Жалоба В 19.02.2023 в 21:16, adnega сказал: Да - одиночный импульс. TIM_CCMR1_OC1M - задает тип сравнения для первого канала, TIM_CCMR1_CC2S - задает вход для захвата второго канала (1 = IC2 is mapped on TI2). Но ведь настройка захвата состоит из двух битов 1 и 0.Если две единички то вроде не попадаем туда куда вы говорите.Что настройка захвата не настроена.Да и на рисунке нарисован захват с первого канала а не со второго.И всё таки мне не понятно hig active или lov?Там 3 бита 2 1 0.Так перывание по захвату или по сравнению?Если по захвату то флаги не те. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 19 февраля, 2023 Опубликовано 19 февраля, 2023 · Жалоба В 19.02.2023 в 23:14, dimir сказал: Но ведь настройка захвата состоит из двух битов 1 и 0.Если две единички то вроде не попадаем туда куда вы говорите.Что настройка захвата не настроена. А где у меня две единички? В поле CC2S у меня пишется 1 - это 01. В 19.02.2023 в 23:14, dimir сказал: Да и на рисунке нарисован захват с первого канала а не со второго. Рисунок - это ответ на ваш вопрос "а можно ли с одного пина и прием и передачу". Я нарисовал, что можно. Но в коде у меня два пина задействованы, т.к. первый канал управляет транзистором. В 19.02.2023 в 23:14, dimir сказал: И всё таки мне не понятно hig active или lov?Там 3 бита 2 1 0. Сначала принудительно устанавливаем OC1 записью "101: Force active level". Затем настраиваем "010: Set channel 1 to inactive level on match" и запускаем одиночный цикл. В момент сравнения OC1 сбросится. В 19.02.2023 в 23:14, dimir сказал: Так перывание по захвату или по сравнению?Если по захвату то флаги не те. Прерывание по переполнению таймера в режиме одиночного запуска. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimir 2 20 февраля, 2023 Опубликовано 20 февраля, 2023 (изменено) · Жалоба А приём как вы выполняете? По захвату?Или по переполнению?Вобще таймер в Stm32 имеет большие возможности нежели в avr. Изменено 20 февраля, 2023 пользователем dimir Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 20 февраля, 2023 Опубликовано 20 февраля, 2023 · Жалоба В 20.02.2023 в 07:14, dimir сказал: А приём как вы выполняете? По захвату?Или по переполнению?Вобще таймер в Stm32 имеет большие возможности нежели в avr. По фронту сигнала на втором канале в CCR2 попадает длительность низкого уровня. Затем при переполнении смотрю что там лежит. Например, стартовый импульс и импульс присутствия дают два фронта на RX. И если устройств на шине нет, то будет маленькое значение CCR2 (длительность импульса присутствия), а если есть хоть одно, то CCR2 будет гораздо больше (длительность импульса присутствия + длительность паузы/реакции датчиков + длительность самого долгого импульса присутствия). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться