Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС.

Полигон-2 »   Технический флейм »   Посоветуйте методику программного подавления дребезга клавы
RSS

Посоветуйте методику программного подавления дребезга клавы

Можно в блок-схемах. Матрица - 8 х 16 кнопок.

<<Назад  Вперед>> Печать
 
MM
Advanced Member


Откуда: Павловский Посад Мск.обл.
Всего сообщений: 3418
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
2 авг. 2013
Прошу уважаемых кодеров посоветовать методику ( или алгоритм ) программного подавления дребезга клавы, матрица - 8 х 16 кнопок ( 128 шт.). Допускаются одновременные нажатия нескольких кнопок .

Девайс - внешняя клава для компа.

Кнопки могут быть не очень надежными.

Быстродействие проца клавы - 1 млн рег-рег.
Anonymous
Advanced Member


Откуда: Москва(Россия)
Всего сообщений: 2537
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
22 нояб. 2011
Совершенно такой же, что и при аппаратном подавлении - сравниваем предыдущее и текущее состояние кнопки во времени и если оно перестало несовпадать в течении определённого времени - фиксируем это состояние. Для работы процесс опроса хорошо бы в таймерное прерывание подсадить.
Sergei Frolov
Advanced Member
Коллекционер

Откуда: Питер
Всего сообщений: 2719
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 июля 2003
Три (например) ячейки для хранения трех одновременно нажимаемых кнопок.
В каждой ячейке два байта - код кнопки и счетчик.

При периодическом опросе происходит определение нажатой кнопки и скан среди этих трех ячеек. Если нажатая кнопка в одной из ячеек уже нажималась, то увеличить ей счетчик. Если счетчик дошел до значения X, то выработать признак нажатой кнопки. Если кнопка не нажималась, то уменьшить ей счетчик, пока не дойдет до нуля. Как дойдет до нуля, то очистить код кнопки (освободить ячейку).

Как-то так
F0lken
Advanced Member


Всего сообщений: 762
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
7 нояб. 2006
Вот тут с картинками https://github.com/thomasfredericks/Bounce2/wiki
Использовал либу не раз, и тоже на матричной клавиатуре.

Вот еще проще http://wikihandbk.com/wiki/Ard...B/Debounce
Mildi
Advanced Member


Откуда: Мончегорск
Всего сообщений: 342
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
3 сен. 2016
Я делал подпрограмму которая опрашивая клавиатуру сравнивает 3-4 (подбирается по скорости опроса) результата опроса подряд если они одинаковые то считается клавиша нажата, если меньше то дребезг и игнорирует результат и сравнение идет сначала с обнулением промежуточного результата. Если следующие 3-4 опроса повторяют результат первых опросов то считается длительное нажатие (или повторное, смотря что требуется по логике работы девайса). Для сравнения хранилось только байт - предыдущее значение и байт - счетчик числа совпадений, Цикл сканирования заканчивался проверкой количества совпадений когда оно достигало нужного значения в моем случае 3-4 то происхоила выдача результатат и цикл запускался по новой.
Для нескольких линий опроса по такому алгоритму надо опрашивать каждую линию, а потом вычислять по результату опроса какие клавиши на каких линиях считать нажатыми.
попутно шунтирование выхода клавиатуры небольшими емкостями на землю.
MM
Advanced Member


Откуда: Павловский Посад Мск.обл.
Всего сообщений: 3418
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
2 авг. 2013
Mildi написал:
[q]
Я делал...
[/q]
Спасибо за совет !

Предполагаю реализовать матрицу на 128 слов ( по 2 байта ) , т.к. кнопок всего 128 ( 8 х 16 ) , где старший байт - маркер "нажата/отжата", а младший байт - счетчик попыток/сканов. Необходимо получение сигнала как нажатой кнопки, так и отжатой.
Например, при первом проходе ( сканировании ) нажатой кнопки просто добавляется единица в счетчик проходов ( младший байт слова состояния кнопки ), а при достижении значения, например, "5", выставляется флаг "нажата" в старшем байте и идет передача данных. Дальше, соответственно, при сканировании этой кнопки, если она нажата - ничего не делается, а при отжатии - начинается декремент байта значения, и при достижении значения "1" в старшем байте слова состояния кнопки ставится маркер "отжата", и идет передача сигнала "отжата кнопка N".
Т.к. клава предполагается с полным функционалом, необходимо отслеживать несколько одновременно нажатых кнопок.
Быстродействие 1806ВМ2 - 1 млн рег-рег., сканирвание будет основной задачей ( не подпрограммой ). По мере испытаний выставлю время ожидания дребезга в 0.05 сек примерно.
Кай
Гость
Divine Assassin

Откуда: извне (from beyond)
Всего сообщений: 13709
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
8 авг. 2010
...аппаратно дребезг кнопок ведь решался включением КМ-ок?
Anonymous
Advanced Member


Откуда: Москва(Россия)
Всего сообщений: 2537
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
22 нояб. 2011
Аппаратно он решался установкой н1806хм1->какая_прошивка_не_помню>, по крайней мере в самолётных пультах 1990х годов.
Mildi
Advanced Member


Откуда: Мончегорск
Всего сообщений: 342
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
3 сен. 2016
Кай написал:
[q]
...аппаратно дребезг кнопок ведь решался включением КМ-ок?
[/q]
Не обязательно КМ, любые емкости которые с резисторами подтяжки образуют RC цепочку. постоянная времени которой больше времени дребезга.
в идеале конечно еще и тригеры шмидта в цепь включить, но не обязательно.
MM
Advanced Member


Откуда: Павловский Посад Мск.обл.
Всего сообщений: 3418
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
2 авг. 2013
Mildi написал:
[q]
...тригеры шмидта в цепь включить...
[/q]
Лет 20 назад делали экспериментальный мод клавы-скрипучки для БК0010 - от кнопок ПКН111 отсоединялось всё, на плату скрипучки навешивались макетные тонкие длинные платочки с 564ТЛ1В и 564КТ3В, некотрое к-во резисторов НР1-4-9 , ИК светики АЛ107 ( ??? ) и фотодиоды. К подвижным элементам ПКН-111 приделывались булавки швейные, которые через отверстия в ДПП скрипучки перекрывали свет между оптопарами.
Вся конструкция работала, но со скрипом ( т.к. кнопки остались те же ;) )
И в корпус БКшки, конечно, потребовалось ставить дополнительные 2 комплекта рамочек.
Зато никакого дребезга !
<<Назад  Вперед>> Печать
Полигон-2 »   Технический флейм »   Посоветуйте методику программного подавления дребезга клавы
RSS

0 посетителей просмотрели эту тему за последние 15 минут
В том числе: 0 гостей, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS