Перейти к содержанию
    

stm32f1 ds18b20 на таймере.

Ну хорошо.А как вы настраиваете инициализация таймера.?И в прерывании этот же таймер используете  вместе с ШИМ?А при инициализации таймер отключён?

Изменено пользователем dimir

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 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 работали?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

C DS18b20 только с AVR.С STM32 только с таймерами.ШИМ а с захватом не сталкивался.А почему вы задействовали переход с HSE  на HSI.?Да ещё энкодер аппаратный.Ну и новогоднюю герлянду  с прерыванием по таймеру.Вы мне скажите.Вы подаёте шим одноврименно читаете с это го же пина переключая таймер в режим захвата?Так я понимаю.?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 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?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понял  один канал на RX .Второй на TX.Вот вы мне открываете глаза извините за нетехнический термин.То есть RX работает в режиме захвата а TX в ШИМе.?Анализатор у меня есть китайский.А герлянду новогоднюю (Звезду белую 16 канальную.) таймер задействован  в прерывании считаю тики и переключаю порты.Сделал цыкл с помощью операторов swich и ещё одного таймера который входит в прерывание и переключает эффекты.С помощью выходного порта и кнопки автоматической.Вообщем задействовано два таймера.Мечта детства.А как можно на одном пине сделать но каналов два? И всё равно алгоритм тот же?И ещё один вопрос а зачем мощный транзистор? DS18b20 разве потребляет большой ток?Или это что бы сделать уверенный "0".А при сбое программы Вач-дог таймер не поможет?.У меня была такая проблема .Оказался блок питания не очень хороший.Я поставил на высокой стороне фильтр с импульсного блока питания и проблема ушла.Вы меня заинтриговали .Я попробую сделать нечто.Хотя ворос в том что два режима в одном таймере? Ну значит нужно каждый раз переключать?А как вы  измеряите тайминги.Что бы совпало с даташитовскими?

Изменено пользователем dimir

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 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 сказал:

А как можно на одном пине сделать но каналов два?

image.thumb.png.334c4d9f91c3b927afe40b5b0e137d2a.png

В 17.02.2023 в 21:45, dimir сказал:

И ещё один вопрос а зачем мощный транзистор? DS18b20 разве потребляет большой ток?Или это что бы сделать уверенный "0".

Чтобы пин МК не торчал на улицу - иначе внешняя помеха убъет весь МК.

В 17.02.2023 в 21:45, dimir сказал:

А при сбое программы Вач-дог таймер не поможет?.У меня была такая проблема .Оказался блок питания не очень хороший.Я поставил на высокой стороне фильтр с импульсного блока питания и проблема ушла.

Я IWDG использую, но он на практике будет срабатывать только в случае ошибки в программе. Но HardFault (может) случится раньше и можно локализовать проблему.

В 17.02.2023 в 21:45, dimir сказал:

А как вы  измеряите тайминги.Что бы совпало с даташитовскими?

Настраиваю предделитель, чтоб частота счета была 1МГц - получаю все интервалы в микросекундах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 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.А где ваши?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 14.02.2023 в 20:36, adnega сказал:
(1 << TIM_CCMR1_CC2S);

И ещё бит интирисует.Я вижу один канал а где другой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 19.02.2023 в 17:37, dimir сказал:

А это в одиночном  режиме?

Да - одиночный импульс.

В 19.02.2023 в 18:07, dimir сказал:

И ещё бит интирисует.Я вижу один канал а где другой?

TIM_CCMR1_OC1M - задает тип сравнения для первого канала, TIM_CCMR1_CC2S - задает вход для захвата второго канала (1 = IC2 is mapped on TI2).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 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.Так перывание по захвату или по сравнению?Если по захвату то флаги не те.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 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 сказал:

Так перывание по захвату или по сравнению?Если по захвату то флаги не те.

Прерывание по переполнению таймера в режиме одиночного запуска.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А приём как вы выполняете? По захвату?Или по переполнению?Вобще таймер в Stm32 имеет большие возможности нежели в avr.

Изменено пользователем dimir

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 20.02.2023 в 07:14, dimir сказал:

А приём как вы выполняете? По захвату?Или по переполнению?Вобще таймер в Stm32 имеет большие возможности нежели в avr.

По фронту сигнала на втором канале в CCR2 попадает длительность низкого уровня. Затем при переполнении смотрю что там лежит.

Например, стартовый импульс и импульс присутствия дают два фронта на RX. И если устройств на шине нет, то будет маленькое значение CCR2 (длительность импульса присутствия),

а если есть хоть одно, то CCR2 будет гораздо больше (длительность импульса присутствия + длительность паузы/реакции датчиков + длительность самого долгого импульса присутствия).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...