ну это довольно смелое утверждение,
если дребезг длился все время между точками опроса то алгоритм может считать непредсказуемую последовательность из 4х вариантов при 2х последовательных опросах.
если же тупо увеличивать время опроса то могут быть пропущены короткие нажатия. или двойное нажатие будет интерпритировано как одиночное и наоборот, или возникнет существенная задержка реакции. (100mS например это уже заметно и часто неприятно)
я всегда принимаю решение по фиксации изменения дребезжащего сигнала когда 2-3 семпла с таймера дали одинаковое значение после последнего изменения.
это тривиально делается сразу для группы сигналов простейшим кодом из битовых операций. букавльно 3-6 инструкций в таймерном прерывании.[/uquote]
давайте мало-мало определимся.
1. мы делаем устройство тренировки мастера кун-фу? только специально тренированный человек способен совершать ОСОЗНАННО нажатия на кнопку с периодом меньше 0,1 с (100 мс), у остальных это либо механическое тыканье, которое невозможно своевременно остановить или начать, либо просто случайное везение. то есть смею предположить, что нет, мы рассчитываем на обычного человека.
2. мы делаем систему управления пуском ядерных ракет или на худой конец систему дистанционного управления роботизированным хирургом-кардиологом? случайный пропуск нажатия или случайное нажатие кнопки приведет к катастрофическим последствиям? предположу, что нет и в этом случае.
итак, опрос состояния битов порта 1 раз в 50 мс обеспечит реакцию на нажатие не хуже, чем 1 раз за 100 мс (Брюс Ли ликует), и не допустит пропуска или случайного срабатывания из-за дребезга (поскольку если у вас кнопка дребезжит более 50 мс - это говно, а не кнопка).
для справки: все учебники по защите от дребезга учат, что дребезг длится около 10-15 мс у среднестатистической кнопки.
зачем вы сами себе придумываете проблемы?! чтобы героически их решать? из мазохизма? из манеризма и эстетсва?
Добавлено after 5 minutes 21 second:
дополнительно: как бы вы не боролись с дребезгом, это неизбежно приводит к тому, что должны возникать паузы между опросами. и если мой алгоритм, по-вашему, вызывает неприятные задержки в данных условиях, ваш алгоритм в тех же условиях не сможет лучше бороться с дребезгом и тоже приведет к тем же самым (а то и большим) задержкам! это ведь логика: если кнопка дребезжит 80 мс, то любой надежный алгоритм будет обязан ждать не менее 80 мс!!! и не важно, эти 80 мс будут регулярными по таймеру или адаптивными по логике анализа состояний.
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


