Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
06.02.2011, 00:55
|
#11
|
Прописка
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
|
Re: Не просыпается tiny2313 по INTO
Сообщение от TechMike
|
// вгоняем МК в POWER-DOWN
cli(); // зарещаем прерывания глобально
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sei(); // разрешаем прерывания глобально
sleep_mode();
_delay_ms(20);
PORTD ^= 0b00010000;
_delay_ms(800);
_delay_ms(800);
PORTD ^= 0b00010000;
}
|
Вы отправляете контроллер спать разве эта часть кода когда нибудь выполнится?
_delay_ms(20);
PORTD ^= 0b00010000;
_delay_ms(800);
_delay_ms(800);
PORTD ^= 0b00010000;
}
PINB=0b00000000; // выводим на все выходы PORTB 0
PIND=0b00000000; // выводим на все выходы PORTD 0
PINA=0b00000000; // выводим на все выходы PORTD 0
Регистры PINx доступны только для чтения, а PORTx и DDRx для чтения/записи
Так что ни чего вы при такой записи на них не выводите
Пишете вы в avrgcc и для сторожевого таймера достаточно подключить библиотеку #include ‹avr/wdt.h›
и в коде всавить wdt_enable(WDTO_1S); и не забываем сбрасывать wdt_reset();
|
|
|
|
06.02.2011, 01:03
|
#12
|
Прописка
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
|
Re: Не просыпается tiny2313 по INTO
Да и не забудьте, что в режиме power down отключается тактовый генератор и для пробуждения по внешнему прерыванию по низкому уровню длительность сигнала на входе INT0 должна быть не менее времени запуска контроллера
|
|
|
|
06.02.2011, 01:03
|
#13
|
Гражданин KAZUS.RU
Регистрация: 14.11.2008
Сообщений: 701
Сказал спасибо: 298
Сказали Спасибо 283 раз(а) в 193 сообщении(ях)
|
Re: Не просыпается tiny2313 по INTO
Сообщение от harchenko_pavel
|
разве эта часть кода когда нибудь выполнится?
|
Вообще то сюда мы должны попасть после обработки INT0 по команде RETI.
К сожалению я не понимаю С, пишу на asm.
|
|
|
|
06.02.2011, 01:24
|
#14
|
Прописка
Регистрация: 28.09.2006
Сообщений: 144
Сказал спасибо: 11
Сказали Спасибо 95 раз(а) в 51 сообщении(ях)
|
Re: Не просыпается tiny2313 по INTO
Сообщение от kittec
|
Вообще то сюда мы должны попасть после обработки INT0 по команде RETI.
|
Сори на прав: после выполнения команды SLEEP выход из режима сна происходит при возникновении разрешенного прерывания. В этом случае, помимо времени старта микроконтроллер приостанавливается на 4 машинных цикла, выполняет процедуру обработки прерывания и продолжает выполнять команды следующие за SLEEP. Содержимое файла регистров и статического ОЗУ остается неизменным после выхода из режима сна.
Значит этот участок кода выполнится только при возникновении прерывания, в случае срабатывания сторожевого таймера начнем сначала.
Если определяем источник сброса то можем пропустить ненужный участок
if ((MCUCSR & (1 ‹‹ WDRF))!=0)
{
//это сброс по wdt
//этот участок кода мы выполнять не будем
}
|
|
|
|
06.02.2011, 01:49
|
#15
|
Гражданин KAZUS.RU
Регистрация: 14.11.2008
Сообщений: 701
Сказал спасибо: 298
Сказали Спасибо 283 раз(а) в 193 сообщении(ях)
|
Re: Не просыпается tiny2313 по INTO
Сообщение от TechMike
|
если в прерывании INT0 не вырубать его возникновение (чтобы зря его не вызывать) то все функционирует как надо.
|
Ерунда какая то, флаг I регистра SREG аппаратно сбрасывается сразу после вызова соответствующей процедуры обработки прерывания и устанавливается после команды RETI. И никаких "вырубаний " и CLI внутри процедуры не надо.
|
|
|
|
06.02.2011, 01:53
|
#16
|
Гражданин KAZUS.RU
Регистрация: 14.11.2008
Сообщений: 701
Сказал спасибо: 298
Сказали Спасибо 283 раз(а) в 193 сообщении(ях)
|
Re: Не просыпается tiny2313 по INTO
Сообщение от harchenko_pavel
|
Сори на прав:
|
Не понял Вас, уважаемый. Зто "смотри на право " или "сорри не прав" ?
|
|
|
|
06.02.2011, 03:47
|
#17
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Не просыпается tiny2313 по INTO
Код:
|
EIFR=0; // External Interrupt Flag 0 Disable
internalINT=1; |
Зачем это, если не секрет? При выходе из прерывания оно само всё сбросит.
А вообще, контроллер точно выполняет то, что Вы ему написали. Он выполняет вот это:
Код:
|
// сработали сигнальные входы и пробуждение по INT0, нужно выключить прерывание INT0
GIMSK=0; // External Interrupt Request 0 Disable
EIFR=0; // External Interrupt Flag 0 Disable
internalINT=1; |
и дальше честно спит.
Как же он будет выполнять отключенное прерывание?
Либо не отключайте, либо не забывайте после выполнения реакции на прерывание снова включить его.
Последний раз редактировалось omercury; 06.02.2011 в 04:24.
|
|
|
|
06.02.2011, 10:50
|
#18
|
Вид на жительство
Регистрация: 07.03.2005
Сообщений: 300
Сказал спасибо: 13
Сказали Спасибо 117 раз(а) в 62 сообщении(ях)
|
Re: Не просыпается tiny2313 по INTO
"Столкнулся со странной проблемой выхода tiny2313 из powerdown"
Скорее всего ничего и не выйдет. Сколько не бился на макете, выход из powerdown не получился. Менял и схему и программу. По моему в tiny2313 работает только idle Так на нем и остановился. Ток потребления 300 мкА. Посчитал, что для пульта сойдет.
|
|
|
|
06.02.2011, 11:12
|
#19
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Не просыпается tiny2313 по INTO
В тинях2313 приекрасно работает ИНТ0.
В крайнем случае есть ПЦИНТы
|
|
|
|
06.02.2011, 11:47
|
#20
|
Гражданин KAZUS.RU
Регистрация: 14.11.2008
Сообщений: 701
Сказал спасибо: 298
Сказали Спасибо 283 раз(а) в 193 сообщении(ях)
|
Re: Не просыпается tiny2313 по INTO
Сообщение от mironov
|
По моему в tiny2313 работает только idle Так на нем и остановился.
|
Неправда Ваша, tiny2313 прекрасно выходит из power_down по INTO. Могу скинуть пример, можно для протеуса.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:24.
|
|