Добрый день уважаемые микроконтроллерные деды!
Кто подскажет: как грамотно сделать обработчик прерываний по INT0 и INT1 в ATtiny2313 на Ассемблере.
В основном интересует как устранить "дребезг контактов" от кнопок, подключенных к этим выводам.
Сколько не "лазил" в И-Нете ничего вразумительного не нашел.
Заранее благодарю
Здравствуйте.
Не могу сказать, что грамотно, но делаю так. Предположим, что кнопки коммутируют вход INT0(INT1) на общий.
*Разрешаю прерывания по спаду сигнала и жду. При нажатии кнопки, в обработчике прерывания перевожу соответствующую лапу на вывод 0. Таким образом блокируется "дребезг" при нажатии. Далее следует выход из обработчика, но с установленным флагом PORTD2(3)=0. Программа в основном цикле анализирует состояние этих лап, делает необходимые действия, дополнительно делается задержка порядка 20...30 мс и только затем лапа переводится на вход, но с разрешением по фронту сигнала. При отпускании кнопки первый же фронт вызывает прерывание, лапа переводится на вывод 1, затем, в основном цикле, через 20...30 мс программа переходит на *.
Но использовать прерывания для анализа состояния кнопок считаю большим расточительством. Все равно приходится вводить задержки или программные или таймерные или организовывать счетчики со сбросом при появлении запрещенного состояния кнопки.
Спасибо за ответ. Немного просветили. Я, к сожалению, недавно занялся МК, поэтому сложности возникают :D
Если можно, то дайте пару фрагментов на asm для работы с кнопками.
Буду очень признателен. Да и может, когда разберусь с контроллерами, то и Вам чего подскажу :lol:
Мой E-mail ALEXANENG@yandex.ru
В принципе, я давно занимаюсь электроникой(но не МК, а RF и силовой электроникой до 100А 600В включительно), так что если есть вопросы - задавайте. С удовольствием отвечу :)
Здравствуйте.
Уже очень давно не применял прерывания INT0 и INT1 для обработки кнопок. Из того, что имеется выкладываю программу обработки сигналов энкодера, взятую отсюда http://radiokot.ru/articles/27 . Это не совсем то, что Вам нужно, но в программе ведется обработка обоих фронтов сигнала и может сгодится для примера.
Спасибо akl! Статья интересная. Буду пробовать писать свой код.
Здравствуйте. Вопрос в следующем. Можно использовать прерывание по таймеру дважды. То есть допустим выполнять действие 1 через 3 минуты и действие 2 через 5 минут. Если можно, то с примерами. Заранее спасибо
Вот так вот...