Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
Шаг 5. Переходим непосредственно к разработке устройств и программ 297 Длительность защитной паузы выбрана равной 48 мс. Такая пауза особенно полезна в случае, если при наборе ключевой комбинации вы хотите использовать одновременное нажатие кнопок. Как бы вы не стара лись нажать кнопки одновременно, вам этого не удастся. Все равно будет какое-то расхождение в моменте замыкания контактов. Причем порядок замыкания контактов будет зависеть от многих факторов и практически является случайным. Если не принять специальных мер, то в момент такого нажатия про грамма зафиксирует не одно, а несколько последовательных изменений кода состояния клавиатуры. Если полученная таким образом кодовая комбинация будет записана в EEPROM, то открыть такой замок будет практически невозможно. При попытке повторить те же нажатия, замыкание контактов будут происходить в другом порядке. Программа воспримет его как совершенно другой код. Защитная пауза решает эту проблему. В каком бы порядке ни замыкались контакты при одновременном нажатии нескольких кнопок, после паузы все эти процессы закончатся. Повторное считывание даст уже устоявшийся код состояния клавиатуры. Повторить такую комбина цию не составит труда. Кроме защитной паузы, для борьбы с дребезгом применяется много кратное считывание кода состояния. То есть на самом деле каждый раз происходит не одно, а несколько последовательных операций по считыва нию кода состояния. Считывание происходит до тех пор, пока несколько раз подряд будет получен один и тот же код. Теперь поговорим о том, как программа выходит из процедуры ввода ключевой комбинации. Как уже говорилось ранее, для выхода из про цедуры используется защитный промежуток времени. Для формирова ния этого промежутка применяется таймер. Таймер должен работать в режиме Normal. В этом режиме он просто считает тактовые импульсы. Процедура ввода кодовой комбинации устроена таким образом, что при каждом нажатии или отпускании любой из кнопок таймер сбрасы вается в ноль. В промежутке между нажатиями его показания увеличива ются под действием тактового сигнала. Если в течение защитного проме жутка времени не будет нажата ни одна кнопка, показания таймера уве личатся до контрольного предела. Программа постоянно проверяет это условие. Как только показания счетчика превысят контрольный предел, процедура ввода кодовой комбинации завершается. Величина контроль ного промежутка времени равна 1 с. Дальнейшие действия после выхода из процедуры ввода кодовой комбинации определяются состоянием переключателя режимов работы. Если контакты переключателя замкнуты, программа переходит к проце дуре записи кодовой комбинации в EEPROM.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==