Сообщение от falco
|
Есть микроконтроллер ATMega 8515. Необходимо написать следующую программку в AVRStudio.
По нажатию на кнопку, но не чаще 1 раза, чем раз в 2 секунды в EEPROM должно записываться некое число по последовательным адресам, начиная с 20-го. Т.е. если кнопку нажимать чаще, то она будет игнорироваться.
Примечания:
1. Кнопки имеют инверсное управление, т.е. если она не нажата, то на контроллер подается логическая единица.
2. Частота тактового сигнала контроллера - 1 МГц.
Подскажите, пожалуйста, как это можно сделать???
|
Не буду вдаваться в подробности реализации ... опишу алгоритм.
Берем таймер, натсраиваем прерывание каждые 100 мс.
Дальше все временные куски будем мерять этими 100мс ... значит 2 сек - это "200 тиков"
Дальше вся обработка будет идти в прерывании.
Нам нужно научится отслеживать два события:
- нажатие кнопки
- время прошедшее с предыдущего нажатия.
Нажатие кнопки
"Нажатие кнопки" можно перефразировать "была отпущена, а теперь нажата" ... значит заводим буфер для "прошлого" состояния кнопки и сравниваем с текущим ... если условие выполняется - значит кнопку нажали!
Здорово. Продолжаем.
Обработка нажатия кнопки
Код:
|
ЕСЛИ ПРОИЗОШЛО НАЖАТИЕ, ТО ВЫПОЛНЯЕМ СЛЕДУЩЕЕ...
ЕСЛИ ВРЕМЯ›200 // Смотрим на переменную ВРЕМЯ (о ней позже) ...
ТО НАЧАЛО
пишем еепром (и увеличиваем счетчик адреса еепром)
ВРЕМЯ = 0 (сбрасываем подсчет времени)
КОНЕЦ
(дальше раоботаем с переменной ВРЕМЯ)
ЕСЛИ ВРЕМЯ ‹=200 (тем самым избегаем переполнения ВРЕМЯ)
ВРЕМЯ++
КОНЕЦ |
Вот. Другими словами ... ведем постоянно подсчет времени ... как только насчитали 201 тик - значит это больше 2 сек - нам достаточно - можно писать еепром
Если ВРЕМЯ больше 2 сек (201 тик), значит пишем еепром и сбрасываем счетчик.
Если нажатие будет раньше, то записи еепром и обнуления времени не будет - счетчик просто дальше будет считать время... причем и не поможет простое удержание кнопки - факта нажатия не будет
иначе кнопку нажали раньше - ничего не делаем.
Про факт отлавливания кнопки уже писано было пару раз ...
https://kazus.ru/forum/topics/5635.html - там еще одна ссылка - надеюсь разберетесь... если Вам именно алгоритм нужен ... ну а если с контроллерами Вы вообще не знакомы, то тогда читайте посты выше моего