Привет! Не прошло и пары месяцев и это снова я. В прошлой статье всё закончилось на том, что индикатор на таймере мигал, но делал это не стабильно. Всё дело было в условии сброса таймера. Иногда опрос просто не попадал на нужный счет. Проблему решит немного другое условие. Расширим область охвата и сделаем не поиск точного значения, а значения большего или равного указанному.
Но тогда возникает ещё одна проблема - автоперезагрузка.
if(TIM_GetCounter(TIM1)==0){} //тут мы отслеживали начало каждого периода, а настройка производилась в установке периода перезагрузки.
При условии >=0 результат всегда будет - истина.
При условии >="интервал перезагрузки" мы всегда будем отслеживать только одно граничное значение и опять же не попадать
При условии >="интервал перезагрузки -несколько значений для гарантии попадания" мы будем гарантированно сокращать интервал и будем вынуждены вводить дополнительные условия для срабатывания функции только 1 раз за интервал.
Всё это говорит о том, что автоперезагрузка нам только мешает(или нет, но об этом позже). Выходом будет "ручная" перезагрузка по условию >="интервал перезагрузки" . Делается это при помощи функции TIM_SetCounter(TIM1, 0); - тут мы указываем таймер, к которому обращаемся и новое значение счетчика. Так просто можно заменить автоперезагрузку.
Работа стала значительно более стабильной.
Но автоперезагрузка нам дана не просто так. Это довольно удобный инструмент, который позволяет быстро настроить таймер и не мудрить с условиями, а просто отслеживать флаг статуса функцией TIM_GetFlagStatus( TIM1, TIM_FLAG_Update ). Может возвращать значения SET и RESET в зависимости от состояния таймера и эту функцию в дальнейшем можно использовать в прерываниях.
Теперь напишем небольшую функцию, которая будет выводить нужную нам цифру на индикатор:
Для того, чтобы символы выглядели как нужно сделал световод на 3д принтере и рассеиватель из бумажки для принтера, промазанной маслом. Снимать пришлось в темноте, слишком уж тускло светят диоды с резисторами 1 килоОм, а перепаивать смысла на прототипе нет.
На этом на сегодня всё. Следующим шагом будет динамическая индикация для двух таких индикаторов, оформление функции в полноценную библиотеку, и размещение исходников библиотеки на GIT. Буду рад комментариям.
Спасибо за внимание!