Среда, 04.12.2024, 00:14
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта
Реклама Google
Форма входа
Категории раздела
Это нужно знать! [17]
Изучаем AVR [30]
Программаторы [12]
Необходимое ПО [8]
Готовые устройства [73]
Справочная [38]
Инструмент [0]
Технология [8]
Литература [0]
Arduino скетчи [18]
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Микроконтроллеры - это просто!
Главная » Статьи » Это нужно знать!

Дребезг контактов
Одним из важных физических процессов, которому необходимо уделить внимание при разработке устройств на микроконтроллере AVR и не только, является дребезг контактов. Игнорирование принятия мер по его устранению может привести к некорректному выполнению программы и неправильной работе устройства.

Что же такое дребезг контактов и чем он так неприятен?

Давайте рассмотрим подробнее такой, казалось бы, обыкновенный процесс как нажатие кнопки. Дело в том, что при нажатии переход из одного состояния в другое происходит не сразу, а с некоторым переходным процессом, в течение которого состояние кнопки хаотично изменяется с одного на другое. Это будет происходить как при нажатии, так и при отпускании кнопки. Данный процесс изображен на рисунке 1.


Рисунок 1 - Процесс дребезга контактов

Допустим, программой отслеживается уровень напряжения на выводе порта B - PB0, и когда он становится нулевым, запускается определенная подпрограмма. Но как видно из рисунка 1, данная ситуация случается несколько раз за период переключения. Что же в этом случае произойдет? А произойдет вот что: как только напряжение на выводе PB0 достигнет нулевого уровня во время первого импульса дребезга, то сразу же запустится подпрограмма обработки. Если длительность выполнения подпрограммы обработки меньше чем длительность процесса дребезга, то она вполне может выполниться повторно и не один раз, пока напряжение не примет однозначного постоянного значения. Причем если значение останется нулевым (как мы условились), то есть кнопка осталась в нажатом состоянии, то подпрограмма будет запускаться бесконечно по кругу пока хватит питания. 

Кнопку можно использовать не только для установки логического уровня на выводе порта, но и для инициализации внешнего прерывания (выводы INT0, INT1). А как мы помним из теории, внешнее прерывание может быть вызвано не только нулевым уровнем на выводе INTx, но и по фронту или спаду импульса. Однако, таких фронтов и спадов при дребезге возникает предостаточно для неоднократного запуска обработки прерывания.

Итак, главную неприятность, вызываемую дребезгом контактов определили - это выполнение подпрограммы обработки не один раз, как требуется, а несколько, случайное количество раз подряд.

Способы устранения дребезга контактов, а точнее его последствий, можно разделить на аппаратные и программные. Аппаратные средства нас мало интересуют, так как для их реализации необходимы дополнительные элементы, которые в конечном итоге требуют дополнительных затрат и занимают место на печатной плате, что не очень приятно, когда хочешь разработать миниатюрное устройство. Да и зачем решать проблему аппаратно если ее можно решить программно, тем более что это не так уж и сложно.

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

В случае подключения кнопки к порту ввода/вывода алгоритм обработки может выглядеть следующим образом.


Рисунок 2 - Алгоритм отслеживания состояния кнопки


При достижении напряжением на выводе порта необходимого уровня выполняется подпрограмма, а затем идет блок задержки. Цикл задержки можно реализовать на инкрементировании до определенного числа или декрементировании до нуля нескольких регистров.

Если кнопка используется для инициализации внешнего прерывания, то структура обработки прерывания может быть реализована по следующему алгоритму.


Рисунок 3 - Алгоритм обработки внешнего прерывания

В обработке прерывания мы запрещаем внешнее прерывание и запускаем таймер. По прерыванию таймера мы вновь разрешим внешние прерывания.

Время необходимой задержки зависит от длительности процесса дребезга контактов. В среднем процесс дребезга может длиться 0,01 - 0,3 секунд. Можно выполнить задержку интервалом в 0,5 секунд, чего хватит с головой. В критичных по времени случаях необходимо подгонять это время на этапе отладки.
Категория: Это нужно знать! | Добавил: Alex (29.12.2013)
Просмотров: 6757 | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright MyCorp © 2024