Интерфейсы периферийных устройств. Ключев А.О - 246 стр.

UptoLike

245
При работе с механическими кнопками возникает одна проблемадребезг
контактов. Суть его в том, что при нажатии на кнопку напряжение не сразу
устанавливается на уровне 0В, а «скачет» в течение некоторого времени
(десятки миллисекунд), пока цепь надежно не замкнется. После того, как
кнопка будет отпущена, напряжение также «скачет», пока
не установится на
уровне логической «1» (рис. 136). Такое многократное замыкание/размыкание
контактов вызвано тем, что контакты пружинят, обгорают и тому подобное.
U
t
1-10мс 100 мс 1-10 мс
Рис. 136. Эффект дребезга контактов
Поскольку процессор обладает высоким быстродействием, то он может
воспринять эти скачки напряжения за несколько нажатий. Решить эту проблему
можно как аппаратно с помощью RS-триггера, триггера Шмитта, так и
программно посредством небольшой задержки перед следующим опросом
кнопки. Задержка подбирается такой, чтобы дребезг успел прекратиться к ее
окончанию.
У приведенной схемы клавиатурной матрицы
есть недостатокэффект
фантомного нажатия кнопки, который проявляется следующим образом: при
нажатии определенной группы кнопок ПЛИС (микроконтроллер) считает еще
несколько кнопок нажатыми, хотя никто этого не делал. На рис. 137 синими
квадратами обозначены линии, на которых присутствует низкий логический
уровень. Соответственно, красными квадратами обозначены линии с высоким
логическим уровнем. В замкнутом
состоянии находятся кнопки PB1, PB5 и
PB6. В текущий момент сканируется столбец COL1, так как на выводе 85 ПЛИС
присутствует низкий логический уровень, а на всех остальных сканирующих
линиях высокий. В столбце COL1 в замкнутом состоянии находится только
одна кнопка – PB1, и она подтягивает всю строку ROW2 к земле. Прочитав
низкий логический уровень на линии ROW2, микроконтроллер через ПЛИС
определит, что кнопка PB1 нажата, и это нормально. Однако в строке ROW2
есть еще одна нажатая кнопка – PB5. Она расположена в столбце COL2, а это
значит, что и весь этот столбец окажется подтянутым к нулю. Сам по себе этот
факт был бы не страшен, если бы в столбце COL2 не оказалась нажатой еще
одна кнопка – PB6. Вот
тут-то и начинаются неприятности. Эта кнопка
подтянет к земле строку ROW3. Микроконтроллер через ПЛИС, прочитав со
строки ROW3 низкий логический уровень, распознает кнопку PB2 нажатой
(напомню, идет сканирование столбца COL1), а ее никто не нажимал.