Сообщение от Vetal-soft
|
У вас весма "своеобразный" подход к написанию подпрограмм.
|
Имхо начинающий.. ещё немало шишек набьёт пока выработает...
Сообщение от os1n
|
На киборд никаких резисторов не вешал, а зачем собственно?
|
Для надёжного считывания состояния ОТПУЩЕНЫХ клавишь, минимизация помех
Сообщение от os1n
|
И если есть вариант запуска по таймеру
|
Да хоть по ВАЧДОГ таймеру... тогда процесор может спать.. а по ВАЧДОГ просыпатся и сканить клавиши... и не нужно никаких внешних прерываний.. будет работать на любом контролере.
Так делал датчик на PIC10F200, питающийся от 3в батарейки. потребление в ожидании получилось до 1 мка при замкнутом датчике обрыва. Срабатывает при замыкании ножки и по RF каналу на 50 метров посылает кодированую посылку о срабатывании, ежеминутно посылает посылку о том что ещё живой. Период посылки по табличке псевдослучайной что бы 20-30 датчиков не мешались.
Алгоритм: Применяется с небольшими модификациями (срабатывание на отпускание или нажатие, повторное срабатывание при удержании, ускорение срабатывания повтора при удержании клавиш и.т.д.) уже лет 8... и для PIC и для AVR
Вызовы процедуры с произвольным периодом 1-30 милисек, подкоректировать константы времени на срабатывание и на повтороное срабатывание, обычно первое срабатываени 30-80 милисек, повторноесрабатываение (при удержании) 0,15-0,3 сек
0) Если флаг нажатия установлен (клавиши не обработаны) вываливаемся из процедуры.
1) считываем состояние клавишь с портов.
2) сравниваем с состоянием, когда все отпущены.
если равно:
a)устанавливаем счётчик срабатывания = начальное значение.
b)в предыдущее состояние клавиш записываем = отпущеное состояние.
с) вываливаемся из процедуры.
если не равно идём дальше:
3) сравниваем с состоянием клавиш в предыдущем проходе
если не равно:
a)устанавливаем счётчик срабатывания = начальное значение.
b)в предыдущее состояние клавиш записываем = текущее состояние.
с) вываливаемся из процедуры.
если равно идём дальше:
4) уменьшаем счётчик совпадений считаннного состояния клавишь.
5) Если счётчик = 0, выставляем флаг = нажата клавиша (для процедур реагирующих на нажатие)
6) в счётчик записываем значение времени для повторного срабатывания клавиши.
7) вываливаемся из процедуры.
На прохождение всей процедуры обычно тратится 5-30-60 команд(не нажаты быстрее - нажаты дольше) в зависимости от количества ножек портов и способа их чтения.
В процедурке реагирующей на нажатие, ожидаем установки флага нажатия. Затем проверяем сожержимое (предыдущее состояние клавиш) на предмет состояния интересующей нас клавиши (или нескольких)... нажата-нет и производим нужные действия, сбрасываем флаг нажатия и ждём снова.