Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
06.10.2011, 15:41
|
#31
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: Как устранить дребезг на вход INT0
Опять про тоже самое и в который раз.. людям что ли искать лень )))) всё давно придумано и написано.. и на форумах выложено ))
Всегда делаю опрос кнопок, как впрочем и другие обслужавающие функции в прерывании таймера... Уже лет 12 успешно применяется этот алгоритм. Сначала на АСМ теперь на СИ.
Код:
|
//------------------------
if (exspreskey==1){return;} //клавиши не обработаны
if (statkey==0){ //
goto loadnackey;}
else
if (statkey!=prevkey){ //считаное состояние‹›предыдущему?
prevkey=statkey;//считаное состояние=предыдущему
loadnackey: cunkey=timnacpreskey;//счётчик совпадений=начальному срабатыванию
return;} //выход
else
if (--cunkey==0){//счётчика совпадений-1,счётчика совпадений=0?
exspreskey=1;//флаг срабатывания клавиш
cunkey=timpreskey;}//счётчика совпадений=повторному срабатыванию
return;} //выход |
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
Последний раз редактировалось picavr; 06.10.2011 в 15:43.
|
|
|
|
10.10.2011, 00:43
|
#32
|
Вид на жительство
Регистрация: 03.06.2006
Адрес: Израиль
Сообщений: 388
Сказал спасибо: 2,067
Сказали Спасибо 337 раз(а) в 156 сообщении(ях)
|
Re: Как устранить дребезг на вход INT0
Сообщение от Easyrider83
|
Zoosman, где и что вы собрались зацикливать?
|
Может я чего-то недопонимаю но для меня эта конструкция "тупо"
ждёт пока я отпущу кнопку и предотвращает "дребезг"
|
|
|
|
10.10.2011, 09:27
|
#33
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Как устранить дребезг на вход INT0
Сообщение от Zoosman
|
Может я чего-то недопонимаю но для меня эта конструкция "тупо"
ждёт пока я отпущу кнопку и предотвращает "дребезг"
|
Я поэтому и спросил. Как она предотвращает дребезг - не понятно. Зато четко видно, что будет за петрушка, когда такая конструкция будет работать по прерыванию.
|
|
|
|
10.10.2011, 10:11
|
#34
|
Прописка
Регистрация: 31.12.2008
Сообщений: 104
Сказал спасибо: 5
Сказали Спасибо 48 раз(а) в 23 сообщении(ях)
|
Re: Как устранить дребезг на вход INT0
Я эту проблему так решил. Надо было по инт0 (кнопке) два бита поменять. При повторном нажатии вернуть обратно как было. Дребезг ДОСТАЛ. Начал с кондеров на кнопке. Помогло как-то не очень. Потом в обработке прерывания сделал следующее:
Жду 30 миллисек, потом проверяю состояние пина (инт0) на предмет не отпущена ли кнопка. Если оказалось что отпущена (дребезг) сваливаю из инта ничего не делая. В противном случае делаю свои дела и ретурнюсь. Кондер на кнопке 1-2 мф оставил на всякий случай. Кругом локаторы сёрут.
Проц ат89S8252. Кнопка древняя (КМ-3 кажись)
Последний раз редактировалось koms45; 10.10.2011 в 10:27.
|
|
|
|
20.12.2016, 13:01
|
#35
|
Прохожий
Регистрация: 07.04.2007
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как устранить дребезг на вход INT0
А я понижаю напряжение подтяжки до 3.3.в и вместе использую rc фильтр для устранения дребезга. все вместе работает один раз одно нажатие.
|
|
|
|
20.12.2016, 13:24
|
#36
|
Частый гость
Регистрация: 20.05.2015
Сообщений: 45
Сказал спасибо: 41
Сказали Спасибо 26 раз(а) в 14 сообщении(ях)
|
Re: Как устранить дребезг на вход INT0
интересно, а как ТС планирует бороться со статикой? Я пробовал делать разные варианты опроса кнопок. И с прерыванием, и по таймеру. Больше всего мне понравился вариант с таймером. Алгоритм следующий- прерывание таймера срабатывает каждые 10 мс. Если пин, на котором висит кнопка, изменил своё состояние, запускаю счётчик. Если счётчик досчитал до какого-то значения (например в моём случае до 5), то устанавливаю флаг смены состояния кнопки и запоминаю это состояние, чтобы в теле программы отработать факт нажатия/отпускания.
По поводу статики я спросил не просто так, т.к. в определённых условиях возникают импульсы, которые приводят к ложным срабатываниям пиновых прерываний.
|
|
|
|
20.12.2016, 23:07
|
#37
|
Прохожий
Регистрация: 07.04.2007
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как устранить дребезг на вход INT0
ну, а если использовать режим idle для МК. то как опрашивать кнопки?
|
|
|
|
21.12.2016, 03:32
|
#38
|
Частый гость
Регистрация: 20.05.2015
Сообщений: 45
Сказал спасибо: 41
Сказали Спасибо 26 раз(а) в 14 сообщении(ях)
|
Re: Как устранить дребезг на вход INT0
в этом случае INT использовать для пробуждения МК, а обратно в идл вгонять после отработки алгоритма антидребезга
|
|
|
|
22.12.2016, 13:57
|
#39
|
Прохожий
Регистрация: 07.04.2007
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как устранить дребезг на вход INT0
но тогда при нажатии будет несколько раз срабатывать int. вот моя схема.
|
|
|
|
23.12.2016, 11:32
|
#40
|
Частый гость
Регистрация: 20.05.2015
Сообщений: 45
Сказал спасибо: 41
Сказали Спасибо 26 раз(а) в 14 сообщении(ях)
|
Re: Как устранить дребезг на вход INT0
что мешает на время отработки антидребезга отключить обработку INT? Если религия не позволяет на время отключить прерывание, то можно установить флаг в переменной и пропускать обработку этого прерывания, пока не выяснится- это срабатывание кнопки, помеха, или дребезг. После выяснения причины срабатывания-сбросить флаг или включить прерывание.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:17.
|
|