Вопрос по спящему режиму AVR

Обсуждаем контроллеры компании Atmel.
Ответить
XEK
Открыл глаза
Сообщения: 59
Зарегистрирован: Вс дек 03, 2006 17:36:04

Вопрос по спящему режиму AVR

Сообщение XEK »

Mega8. Второй день бьюсь сделать засыпание-просыпание одной кнопкой. Завожу кнопку на INT0. Включаю INT0 на срабатывание по низкому уровню. Пишу обработчик прерывания чтобы четный раз powerdown(); нечетный - ничего. И у мк едет крыша) Либо не включается потом либо работает с задержками, либо не йёдешь в слип вообще:(. Может я чего не отключил, и оно генерит прерывания? У меня есть рабочий девайс и его модель в протеусе. Везде примерно одно и то же. Кто-то уже пытался сделать подобное?

Добавляю: в Idle не уходит вообще. В powerdown уходит, но не возвращается никакими попытками дергать INT0 INT1 :( Это в протеусе.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Без исходника сложно давать советы, но попробую...
Ты в прерывании включаешь SLEEP или POWERDOWN?
Если так, то это в корне неверно. После команды засыпания контроллер уходит в спячку. По прерыванию - просыпается и уходит в обработчик, из него выходит и выполняет команду, которая следует за той, которая перевела в сон. Не удивлюсь, если контроллер умрет вместо сна, если ты усыпишь его в обработчике прерывания - у AVR-то одноуровненвая система прерываний, т.е. пока текущий обработчик не закончится, новое прерывание не возникнет! Сделай так: бесконечный цикл, в котором анализируешь какую-то ячеечку - если там четное число, то усыпляешь, если нечетное - не усыпляешь, а бодрствуешь. А в обработчике прерывания эту ячеечку просто инкрементируй. Должно получиться.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
LDZ
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Пт окт 27, 2006 22:56:22
Откуда: Daugavpils

Сообщение LDZ »

Тоже не могу проснуться. Что не так?

__disable_interrupt();
MCUCR = (1<<SE) | (1<<SM2) | (1<<SM1) | (0<<SM0) | (1<<ISC11) | (0<<ISC10);
GICR = (1<<INT1);
__enable_interrupt();
__no_operation();
__sleep();

Все в бесконечном цикле, выключается намертво.

XEK
Про протеус и прерывания
http://electronix.ru/forum/index.php?showtopic=25504
Аватара пользователя
Abakt
Вечно гонимый
Сообщения: 568
Зарегистрирован: Ср янв 10, 2007 19:15:51

Сообщение Abakt »

Вот тест режима SLEEP с просыпанием по INT в симуляторе VMLAB
взяит из FAQ по AVR WinAVR CVAVR IAR ICC Си для МК от сюда:
http://www.radiokot.ru/forum/viewtopic.php?t=2273
Вложения
sleep_test_avr.rar
(4.65 КБ) 472 скачивания
XEK
Открыл глаза
Сообщения: 59
Зарегистрирован: Вс дек 03, 2006 17:36:04

ARV - спасибо!

Сообщение XEK »

ARV - мегагений)
Действительно, проблема такая: в C++ в обработчике прерывания последняя команда powerdown();, но в ASM по сути - RETI, поэтому засыпал он в обработчике прерывания. И не просыпался потому что прерывание не могло генерироваться, т.к. предыдущее ещё не было обработано. Спасибо. На будущее буду знать.

Скажи, правда, что на входах AVR есть триггеры Шмита? Судя по моим наблюдениям они есть но оччень маленькие. А вот детекция фронта (это в прерывании, INT1 по переднему фронту) работает с голой оптопарой, это вот как раз круто.

И ещё тупой вопрос - защита от программирования при прошивке - это работает? или всеже это бесполезно?
Аватара пользователя
Abakt
Вечно гонимый
Сообщения: 568
Зарегистрирован: Ср янв 10, 2007 19:15:51

Сообщение Abakt »

может от считывания ? работает.
Аватара пользователя
Abakt
Вечно гонимый
Сообщения: 568
Зарегистрирован: Ср янв 10, 2007 19:15:51

Re: ARV - спасибо!

Сообщение Abakt »

XEK писал(а):ARV - мегагений)
правда, что на входах AVR есть триггеры Шмита?


да, правда. подробно об этом и про величину гистерезиса для разных напряжений птания я прочитал на стр. 2 этого руководства http://www.roboforum.ru/viewtopic.htm?p=11560
ну и в ДШ конечно по английски есть.
Ответить

Вернуться в «AVR»