Всем привет.
Возникла необходимость пробудить из спячки Atmega48 путем поворота энкодера.
Проблема в том, что в режиме SLEEP_MODE_PWR_DOWN внешние прерывания INT0 и INT1 срабатывают только в режиме низкого уровня. Мой энкодер с кнопкой. Каждый щелчек выводы энкодера A и B либо замыкаются с C либо разомкнуты. В принципе есть 3 варианта.
1. Сделать прерывание по низкому уровню => Запустить таймер и отключить прерывания => Затем считать энкодер по таймеру, заснуть включив внешнее прерывание. Но проблема в том что энкодер после вращения может остатся в положении, когда на INT0 будет в низком уровне(A B и С замкнуты) и прерывание будет продолжать срабатывать. Это не подойдет.
2. Засыпать в режиме SLEEP_MODE_IDLE, что позволяет прерывания на "Any logical change on INT0". Но при этом потребление в этом режиме увеличивается в сотни раз- 250-300 мкА. (делаю устройство с батарейным питанием). Этот вариант тоже не подходит.
3. Третий вариант нажимать на кнопку энкодера, пробуждая тем самым атмегу, а потом уже вращать энкодер. Но это как то не логично для пользователя нажимать а потом крутить..
Вот я теперь даже и не знаю какой есть путь решения данной проблемы
Или может у меня не стандартный энкодер?