Посоветуйте методику программного подавления дребезга клавы (Можно в блок-схемах. Матрица - 8 х 16 кнопок.)
-
- Advanced Member
- Сообщения: 5894
- Зарегистрирован: 02.08.2013,22:13
- Откуда: Павловский Посад Мск.обл.
- Контактная информация:
-
Вклад в сообщество
Посоветуйте методику программного подавления дребезга клавы
Можно в блок-схемах. Матрица - 8 х 16 кнопок.
Прошу уважаемых кодеров посоветовать методику ( или алгоритм ) программного подавления дребезга клавы, матрица - 8 х 16 кнопок ( 128 шт.). Допускаются одновременные нажатия нескольких кнопок .
Девайс - внешняя клава для компа.
Кнопки могут быть не очень надежными.
Быстродействие проца клавы - 1 млн рег-рег.
Прошу уважаемых кодеров посоветовать методику ( или алгоритм ) программного подавления дребезга клавы, матрица - 8 х 16 кнопок ( 128 шт.). Допускаются одновременные нажатия нескольких кнопок .
Девайс - внешняя клава для компа.
Кнопки могут быть не очень надежными.
Быстродействие проца клавы - 1 млн рег-рег.
Коллекционирование радиодеталей : http://collectingrd.kxk.ru/
-
- Advanced Member
- Сообщения: 2727
- Зарегистрирован: 22.11.2011,09:41
- Откуда: Москва(Россия)
-
Вклад в сообщество
-
- Advanced Member
- Сообщения: 2820
- Зарегистрирован: 05.07.2003,15:30
- Откуда: Питер
- Контактная информация:
-
Конкурсы
Вклад в сообщество
Три (например) ячейки для хранения трех одновременно нажимаемых кнопок.
В каждой ячейке два байта - код кнопки и счетчик.
При периодическом опросе происходит определение нажатой кнопки и скан среди этих трех ячеек. Если нажатая кнопка в одной из ячеек уже нажималась, то увеличить ей счетчик. Если счетчик дошел до значения X, то выработать признак нажатой кнопки. Если кнопка не нажималась, то уменьшить ей счетчик, пока не дойдет до нуля. Как дойдет до нуля, то очистить код кнопки (освободить ячейку).
Как-то так
В каждой ячейке два байта - код кнопки и счетчик.
При периодическом опросе происходит определение нажатой кнопки и скан среди этих трех ячеек. Если нажатая кнопка в одной из ячеек уже нажималась, то увеличить ей счетчик. Если счетчик дошел до значения X, то выработать признак нажатой кнопки. Если кнопка не нажималась, то уменьшить ей счетчик, пока не дойдет до нуля. Как дойдет до нуля, то очистить код кнопки (освободить ячейку).
Как-то так
Собираю в коллекцию советские калькуляторы и компьютеры.
Мой сайт: http://www.leningrad.su/museum/ ICQ=12370106 https://t.me/retrocomps
Мой сайт: http://www.leningrad.su/museum/ ICQ=12370106 https://t.me/retrocomps
- F0lken
- Advanced Member
- Сообщения: 1259
- Зарегистрирован: 07.11.2006,10:48
- Контактная информация:
-
Конкурсы
Вклад в сообщество
Вот тут с картинками https://github.com/thomasfredericks/Bounce2/wiki
Использовал либу не раз, и тоже на матричной клавиатуре.
Вот еще проще http://wikihandbk.com/wiki/Arduino:%D0% ... B/Debounce
Использовал либу не раз, и тоже на матричной клавиатуре.
Вот еще проще http://wikihandbk.com/wiki/Arduino:%D0% ... B/Debounce
Я делал подпрограмму которая опрашивая клавиатуру сравнивает 3-4 (подбирается по скорости опроса) результата опроса подряд если они одинаковые то считается клавиша нажата, если меньше то дребезг и игнорирует результат и сравнение идет сначала с обнулением промежуточного результата. Если следующие 3-4 опроса повторяют результат первых опросов то считается длительное нажатие (или повторное, смотря что требуется по логике работы девайса). Для сравнения хранилось только байт - предыдущее значение и байт - счетчик числа совпадений, Цикл сканирования заканчивался проверкой количества совпадений когда оно достигало нужного значения в моем случае 3-4 то происхоила выдача результатат и цикл запускался по новой.
Для нескольких линий опроса по такому алгоритму надо опрашивать каждую линию, а потом вычислять по результату опроса какие клавиши на каких линиях считать нажатыми.
попутно шунтирование выхода клавиатуры небольшими емкостями на землю.
Для нескольких линий опроса по такому алгоритму надо опрашивать каждую линию, а потом вычислять по результату опроса какие клавиши на каких линиях считать нажатыми.
попутно шунтирование выхода клавиатуры небольшими емкостями на землю.
Ищу SRAM 16кб х 4бит DIP-24 например 7C166-15(20) и подобные.
-
- Advanced Member
- Сообщения: 5894
- Зарегистрирован: 02.08.2013,22:13
- Откуда: Павловский Посад Мск.обл.
- Контактная информация:
-
Вклад в сообщество
Спасибо за совет !Mildi писал(а):Я делал...
Предполагаю реализовать матрицу на 128 слов ( по 2 байта ) , т.к. кнопок всего 128 ( 8 х 16 ) , где старший байт - маркер "нажата/отжата", а младший байт - счетчик попыток/сканов. Необходимо получение сигнала как нажатой кнопки, так и отжатой.
Например, при первом проходе ( сканировании ) нажатой кнопки просто добавляется единица в счетчик проходов ( младший байт слова состояния кнопки ), а при достижении значения, например, "5", выставляется флаг "нажата" в старшем байте и идет передача данных. Дальше, соответственно, при сканировании этой кнопки, если она нажата - ничего не делается, а при отжатии - начинается декремент байта значения, и при достижении значения "1" в старшем байте слова состояния кнопки ставится маркер "отжата", и идет передача сигнала "отжата кнопка N".
Т.к. клава предполагается с полным функционалом, необходимо отслеживать несколько одновременно нажатых кнопок.
Быстродействие 1806ВМ2 - 1 млн рег-рег., сканирвание будет основной задачей ( не подпрограммой ). По мере испытаний выставлю время ожидания дребезга в 0.05 сек примерно.
Коллекционирование радиодеталей : http://collectingrd.kxk.ru/
-
- Advanced Member
- Сообщения: 2727
- Зарегистрирован: 22.11.2011,09:41
- Откуда: Москва(Россия)
-
Вклад в сообщество
Не обязательно КМ, любые емкости которые с резисторами подтяжки образуют RC цепочку. постоянная времени которой больше времени дребезга.Кай писал(а):...аппаратно дребезг кнопок ведь решался включением КМ-ок?
в идеале конечно еще и тригеры шмидта в цепь включить, но не обязательно.
Ищу SRAM 16кб х 4бит DIP-24 например 7C166-15(20) и подобные.
-
- Advanced Member
- Сообщения: 5894
- Зарегистрирован: 02.08.2013,22:13
- Откуда: Павловский Посад Мск.обл.
- Контактная информация:
-
Вклад в сообщество
Лет 20 назад делали экспериментальный мод клавы-скрипучки для БК0010 - от кнопок ПКН111 отсоединялось всё, на плату скрипучки навешивались макетные тонкие длинные платочки с 564ТЛ1В и 564КТ3В, некотрое к-во резисторов НР1-4-9 , ИК светики АЛ107 ( ??? ) и фотодиоды. К подвижным элементам ПКН-111 приделывались булавки швейные, которые через отверстия в ДПП скрипучки перекрывали свет между оптопарами.Mildi писал(а):...тригеры шмидта в цепь включить...
Вся конструкция работала, но со скрипом ( т.к. кнопки остались те же )
И в корпус БКшки, конечно, потребовалось ставить дополнительные 2 комплекта рамочек.
Зато никакого дребезга !
Коллекционирование радиодеталей : http://collectingrd.kxk.ru/