Технический форум по робототехнике.
executer » 01 апр 2009, 12:28
А как он может проснутся если засыпает внутри прерывания? При начале прерывания глобальный флаг разрешения прерываний сбрасывается и до самого окончания прерывания никакое другое событие по прерываниям не отрабатывается (в том числе и просыпание по прерыванию).
Нужно либо сбросить флаг ИНТ1 и выставить SEI внутри прерывания, или, что лучше, внутри прерывания выставлять только свой флажок на который будет реагировать основная программа и засыпать.
Последний раз редактировалось
executer 01 апр 2009, 12:30, всего редактировалось 1 раз.
SERGEY_M » 01 апр 2009, 12:30
Тоже вариант........
Но в Протеусе просыпается
может очередной глюк протеуса.........
executer » 01 апр 2009, 12:32
такое лучше в авр студио симулировать, там много чего не работает, но если работает - то и на МК будет
ferio » 01 апр 2009, 13:46
executer писал(а):Нужно либо сбросить флаг ИНТ1 и выставить SEI внутри прерывания, или, что лучше, внутри прерывания выставлять только свой флажок на который будет реагировать основная программа и засыпать.
Спасибо, сделал именно так - все заработало.
Только такой вопрос, можно ли прерывание вызывать не только изменением напряжения на PD.2(INT0), но и вообще на любой ножке, например порта D ? Интерисует именно вариант при пробуждении.
Последний раз редактировалось
ferio 01 апр 2009, 13:47, всего редактировалось 1 раз.
executer » 01 апр 2009, 13:46
Можно, но из сна он выйдет только по Int0 low lewel
(в зависимости от режима сна там кажется можно и другими внешними Int будить (только сон там не такой "глубокий"), но на выбранной ноге все равно болжно быть предусмотрено прерывание, он же когда спит не может следить за обычными ногами)
ferio » 01 апр 2009, 13:54
executer писал(а):Можно, но из сна он выйдет только по Int0 low lewel
То есть проснется только от ножки PD.2/int0(Mega16)? И никак по другому запрограммировать нельзя?
Просто задача у меня следующая, нужно сделать пульт ДУ, с 6 кнопками. Пока не одна из кнопок не нажата МК спит(режим powerdown - как самый экономичный), только стоит нажать одну из кнопок МК просыпается, выполняет команду и снова засыпает.
Получается в моем случае нужно каждую кнопку еще подцеплять к ножке PD.2? я правильно понимаю?
executer » 01 апр 2009, 13:59
да, я ничего кроме как пустить все 6 кнопок через логическое ИЛИ на INT0 придумать ничего не могу
Добавлено спустя 1 минуту 52 секунды:ferio писал(а):То есть проснется только от ножки PD.2/int0(Mega16)? И никак по другому запрограммировать нельзя?
Да, так, просто это аппаратная часть отрабатывает, ее программой не измешнищ
ferio » 01 апр 2009, 14:14
Всем ответившим большое спасибо.