| AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
Выход из спящего режима по INT0
06.01.2013, 17:59
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Выход из спящего режима по INT0.
Сообщение от niXto
|
|
какая-то ножка как вход болтается в воздухе без подтяжки
|
Сообщение от putmannn
|
ldi temp, 0b11111011
out DDRD, temp
ldi temp, 0b00000000
out PORTD, temp
|
. .
|
|
|
|
06.01.2013, 18:49
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 1,040
Сказал спасибо: 368
Сказали Спасибо 98 раз(а) в 93 сообщении(ях)
|
Re: Выход из спящего режима по INT0.
omercury, делал эту ножку выходом подтянутым к +5, т.к. на кнопке всегда +5 кроме момента нажатия. Потребление не изменилось.
Вся непонятка в том, что я в ресете инициализирую все ноги и ТОЧНО ТАК ЖЕ инициализирую их в программе когда требуется уснуть. Совершенно одинаково они у меня сконфигурированы, но потребляет во-втором случае на 100 мкА больше. Что то работает, а что не понимаю.
Осциллографом измерил напряжения на всех ногах, они совершенно одинаковы в обоих случаях сна, но потребление разное.
|
|
|
|
06.01.2013, 18:56
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Выход из спящего режима по INT0.
Либо так
Сообщение от putmannn
|
ldi temp, 0b11111011
out DDRD, temp
ldi temp, 0b00000100
out PORTD, temp
|
либо внешний резистор на кнопку.
Остальное увидеть можно?
|
|
|
|
06.01.2013, 19:37
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 1,040
Сказал спасибо: 368
Сказали Спасибо 98 раз(а) в 93 сообщении(ях)
|
Re: Выход из спящего режима по INT0.
omercury, схему и программу ?
Как Вы сказали выше то же потребление 250 мкА.
Я "общался" с ЕЕПРОМ, может она жрёт ?
АЦП используется.
Последний раз редактировалось putmannn; 06.01.2013 в 19:42.
|
|
|
|
06.01.2013, 22:28
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 1,040
Сказал спасибо: 368
Сказали Спасибо 98 раз(а) в 93 сообщении(ях)
|
Re: Выход из спящего режима по INT0.
Обнаружил проблему.
Просыпаясь по прерыванию INT0 проц отрабатывает прерывание, в конце которого стоит RETI, после прыгает на команду стоящую за SLEEP, там у меня RET и вместо того, чтобы вернуться в вызвавшую процедуру, прыгает на RESET.
В стеке получается нули ? а как же вернуться к выполнению программы ?
Читал что засыпать надо в главном цикла, а я из главного цикла перехожу по RCALL в подпрограмму сна, может это мне всё портит (не те данные которые были до сна) ?
Попробывал уснуть из главного цикла, тоже завис проц, прыгнул наверное неизвестно куда, что же делать...
Последний раз редактировалось putmannn; 06.01.2013 в 22:36.
|
|
|
|
06.01.2013, 22:38
|
|
|
Прописка
Регистрация: 13.06.2004
Адрес: Москва
Сообщений: 193
Сказал спасибо: 12
Сказали Спасибо 32 раз(а) в 18 сообщении(ях)
|
Re: Выход из спящего режима по INT0.
Сообщение от putmannn
|
omercury, схему и программу ?
Как Вы сказали выше то же потребление 250 мкА.
Я "общался" с ЕЕПРОМ, может она жрёт ?
АЦП используется.
|
В части потребления посмотри вложенный фрагмент из одного моего проекта с инициализацией ATMega8.
Обрати внимание на строку:
sbi ACSR,ACD ;shut down comparator to save power
Кстати, там есть два полезных модуля:
Registers clearing
и
SRAM clearing
Эти модули гарантируют, что при каждом запуске/перезапуске контроллер начнет работу с "чистого листа".
И еще, если собираешься пробуждать процессор по INT0, то есть ограничения по длительности импульса запуска. По короткому импульсу (‹ 1мс) он может не сработать, читаем даташит. Приходится использовать специальные схемные решения.
|
|
|
|
06.01.2013, 22:54
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 1,040
Сказал спасибо: 368
Сказали Спасибо 98 раз(а) в 93 сообщении(ях)
|
Re: Выход из спящего режима по INT0.
Сообщение от Slava1355
|
|
И еще, если собираешься пробуждать процессор по INT0, то есть ограничения по длительности импульса запуска. По короткому импульсу (‹ 1мс) он может не сработать, читаем даташит. Приходится использовать специальные схемные решения.
|
Спасибо, инициализацию буду использовать.
Импульс от кнопки (датчик холла), самое быстрое .1 секунды и более.
|
|
|
|
07.01.2013, 11:40
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 1,040
Сказал спасибо: 368
Сказали Спасибо 98 раз(а) в 93 сообщении(ях)
|
Re: Выход из спящего режима по INT0.
Такое ощущение, что просыпаясь контроллер идёт на ресет, т.к.
|
Код:
|
INT_0 :
ldi temp, akbf
cbr temp, 16
sbr temp, 255
sts akbf, temp
reti |
этот код не изменяет переменную akbf, я её читаю на дисплее, а она как была при старте программы =16, так и осталась, а должна быть 255.
У меня в ЕЕПРОМ запоминается значение яркости (от 1 до 10), если не уходить в сон, значение корректное, и при выключении питания и как только не мучал плату оно стабильно. Но как только я засыпаю, значение в ЕЕПРОМ портится, но не каждый раз, 50/50/
Последний раз редактировалось putmannn; 07.01.2013 в 11:49.
|
|
|
|
07.01.2013, 13:17
|
|
|
Прописка
Регистрация: 13.06.2004
Адрес: Москва
Сообщений: 193
Сказал спасибо: 12
Сказали Спасибо 32 раз(а) в 18 сообщении(ях)
|
Re: Выход из спящего режима по INT0.
Сообщение от putmannn
|
Такое ощущение, что просыпаясь контроллер идёт на ресет, т.к.
|
Код:
|
INT_0 :
ldi temp, akbf
cbr temp, 16
sbr temp, 255
sts akbf, temp
reti |
этот код не изменяет переменную akbf, я её читаю на дисплее, а она как была при старте программы =16, так и осталась, а должна быть 255.
У меня в ЕЕПРОМ запоминается значение яркости (от 1 до 10), если не уходить в сон, значение корректное, и при выключении питания и как только не мучал плату оно стабильно. Но как только я засыпаю, значение в ЕЕПРОМ портится, но не каждый раз, 50/50/
|
Можно получить комментарии от автора по фрагменту программы, а то не вижу в ней смысла?
INT_0 :
ldi temp, akbf - загружаем в temp переменную (а точнее константу) akbf
cbr temp, 16 - очищаем в переменной 4-й бит
sbr temp, 255 - устанавливаем в переменной все биты в "1" (зачем тогда предыдущая операция?)
sts akbf, temp - запоминаем в SRAM по адресу akbf значение temp (0xFF)
reti
В результате работы этого фрагмента переменная akbf не должна измениться, а в SRAM по адресу akbf должно находиться значение 255 (0xFF).
Последний раз редактировалось Slava1355; 07.01.2013 в 13:22.
|
|
|
|
07.01.2013, 13:20
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
|
Re: Выход из спящего режима по INT0.
Значит, что-то не так в коде, где он? У меня все работает
При тактировании от встроенного генератора, после записи в еепром нужно дождаться окончания записи и только потом валиться в повер-довн. Т.к. логика программатора тактируется от встроенного генератора и при его отключении в процессе записи могут быть нюансы
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:09.
|
|