Да, об этом всем написано в даташите. Например у меня в меги таймер-счетчик 1 (16-ти битный). Есть куча режимов работы таймера... Самый простой:isx писал(а):Таймеру плохо не будет, если изменять регистр ARR при счете.
Установили предделитель и больше его не трогаем.
Меняем регистра сравнения (OCR)... Получим разные периоды прерывания...
TCNT - Регистр 16-разр. таймер-счетчик 1.
OCR - регистр порога сравнения. Можно менять OCR в процессе работы таймера. Флаг устанавливается при совпадении TCNT и OCR. Поэтому надо следить, чтобы значение OCR было больше TCNT, иначе влаг установиться на сделующем цикле таймера... т.е. через лишние 65535 отсчетов...
С таймерами разобрались))
Вот тут косяк)) На выходе приёмника у нас импульсы имеют не чёткий фронт. А при слабом сигнале импульсы могут содержать несколько коротких импульсов. Это аналогично такому явлению, под названием - https://ru.wikipedia.org/wiki/Дребезг_контактовisx писал(а):Включаем прерывание по восходящему фронту и после его срабатывания запускаем таймер (настраиваем прерывание таймера на 65мс.) и включаем прерывание по спадающему фронту. После срабатывания прерывания смотрим сколько натикало. Если больше 60мс., то отключаем внешнее прерывание и
После срабатывания прерывание по восходящему фронту, следующе прерывание по спадающему фронту может быть через любое (произвольное) время. Может через несколько микросекунд... может больше... может меньше...)) Можем получить несколько первываний подряд... и .т.д. и т.п.
Цитата:
Методы решения проблемы дребезга:
1. Установка временной задержки. Программы такого типа отслеживают состояние контакта и временно запрещают его опрос на тот отрезок времени, который превышает длительность переходного процесса.
2. Второй вариант – метод подсчета числа значений сигнала. Программа считывает многократные щелчки с контакта, и если количество удачных запросов совпадает с количеством щелчков контакта (определяется экспериментальным путем), то контакт считается успешно замкнутым.
Вот поэтому например в аппаратном UART после появления низкого уровня (0) на входе, внутренний тактовый счётчик UART отсчитывает 8 (или больше) тактов и затем проверяет состояние входа. Если через восемь (или больше) тактов состояние входа подтверждается (0), то аппаратный UART переходит к записи битов. Если состояние входа через восемь (или больше) тактов не подтверждается (1), то UART сбрасывает внутренний тактовый счётчик и переходит к поиску следующего старт-бита. Аналогичным образом работает схема подавителя шума в таймер-счетчик 1 в режиме захвата.
Цитата:
Таймер-счетчик содержит блок захвата, который запоминает состояние счетчика при возникновении внешнего события, тем самым определяя время его возникновения. В качестве события/событий выступает внешний сигнал, подключенный к выводу...
Вот схема блока захвата таймер-счетчик 1: Там есть интересный блок - подавитель шума. Работает он очень просто.
Цитата:
Хорошая идея. В простых протоколах я так и делаю.))isx писал(а):Единственное, что пока приходит в голову - сделать по несколько отсчетов на каждый импульс принятый приемником, и вычислять наиболее продолжительное состояние (надеюсь, это может устранить влияние помех).
Ну а вы как думали... за всё надо платить))isx писал(а): Однако, такое решение даст увеличение нагрузки на процессор в несколько раз.


