Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » Технический флейм » Посоветуйте методику программного подавления дребезга клавы |
<<Назад Вперед>> | Печать |
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 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 13 августа 2017 13:02 Сообщение отредактировано: 13 августа 2017 13:13
Я делал подпрограмму которая опрашивая клавиатуру сравнивает 3-4 (подбирается по скорости опроса) результата опроса подряд если они одинаковые то считается клавиша нажата, если меньше то дребезг и игнорирует результат и сравнение идет сначала с обнулением промежуточного результата. Если следующие 3-4 опроса повторяют результат первых опросов то считается длительное нажатие (или повторное, смотря что требуется по логике работы девайса). Для сравнения хранилось только байт - предыдущее значение и байт - счетчик числа совпадений, Цикл сканирования заканчивался проверкой количества совпадений когда оно достигало нужного значения в моем случае 3-4 то происхоила выдача результатат и цикл запускался по новой. Для нескольких линий опроса по такому алгоритму надо опрашивать каждую линию, а потом вычислять по результату опроса какие клавиши на каких линиях считать нажатыми. попутно шунтирование выхода клавиатуры небольшими емкостями на землю. |
MM
Advanced Member
Откуда: Павловский Посад Мск.обл. Всего сообщений: 3418 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 2 авг. 2013 |
Mildi написал: Спасибо за совет ! Я делал... Предполагаю реализовать матрицу на 128 слов ( по 2 байта ) , т.к. кнопок всего 128 ( 8 х 16 ) , где старший байт - маркер "нажата/отжата", а младший байт - счетчик попыток/сканов. Необходимо получение сигнала как нажатой кнопки, так и отжатой. Например, при первом проходе ( сканировании ) нажатой кнопки просто добавляется единица в счетчик проходов ( младший байт слова состояния кнопки ), а при достижении значения, например, "5", выставляется флаг "нажата" в старшем байте и идет передача данных. Дальше, соответственно, при сканировании этой кнопки, если она нажата - ничего не делается, а при отжатии - начинается декремент байта значения, и при достижении значения "1" в старшем байте слова состояния кнопки ставится маркер "отжата", и идет передача сигнала "отжата кнопка N". Т.к. клава предполагается с полным функционалом, необходимо отслеживать несколько одновременно нажатых кнопок. Быстродействие 1806ВМ2 - 1 млн рег-рег., сканирвание будет основной задачей ( не подпрограммой ). По мере испытаний выставлю время ожидания дребезга в 0.05 сек примерно. |
Кай
Гость
Divine Assassin Откуда: извне (from beyond) Всего сообщений: 13709 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 8 авг. 2010 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 13 августа 2017 15:33 Сообщение отредактировано: 13 августа 2017 15:37
...аппаратно дребезг кнопок ведь решался включением КМ-ок? |
Anonymous
Advanced Member
Откуда: Москва(Россия) Всего сообщений: 2537 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 22 нояб. 2011 |
Аппаратно он решался установкой н1806хм1->какая_прошивка_не_помню>, по крайней мере в самолётных пультах 1990х годов. |
Mildi
Advanced Member
Откуда: Мончегорск Всего сообщений: 342 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 3 сен. 2016 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 13 августа 2017 19:16 Сообщение отредактировано: 13 августа 2017 19:18
Кай написал: Не обязательно КМ, любые емкости которые с резисторами подтяжки образуют RC цепочку. постоянная времени которой больше времени дребезга. ...аппаратно дребезг кнопок ведь решался включением КМ-ок? в идеале конечно еще и тригеры шмидта в цепь включить, но не обязательно. |
MM
Advanced Member
Откуда: Павловский Посад Мск.обл. Всего сообщений: 3418 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 2 авг. 2013 |
Mildi написал: Лет 20 назад делали экспериментальный мод клавы-скрипучки для БК0010 - от кнопок ПКН111 отсоединялось всё, на плату скрипучки навешивались макетные тонкие длинные платочки с 564ТЛ1В и 564КТ3В, некотрое к-во резисторов НР1-4-9 , ИК светики АЛ107 ( ??? ) и фотодиоды. К подвижным элементам ПКН-111 приделывались булавки швейные, которые через отверстия в ДПП скрипучки перекрывали свет между оптопарами. ...тригеры шмидта в цепь включить... Вся конструкция работала, но со скрипом ( т.к. кнопки остались те же ) И в корпус БКшки, конечно, потребовалось ставить дополнительные 2 комплекта рамочек. Зато никакого дребезга ! |
<<Назад Вперед>> | Печать |
Полигон-2 » Технический флейм » Посоветуйте методику программного подавления дребезга клавы |
1 посетитель просмотрел эту тему за последние 15 минут |
В том числе: 1 гость, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |