реклама на сайте
подробности

 
 
> atmega88pa, отключение BOD программно
max_mart
сообщение Aug 30 2012, 10:22
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



Всем привет.

Контроллер находится в режиме power-down. Просыпается по вотч-догу, настроенному только на прерывание, каждые 0.5 с. и по срабатыванию одной из 3 кнопок PCINT. При выключенном BOD и включенном вотч-доге потребление питания составляет 6 мкА, как в даташите.
Но не хотелось бы выключать супервизор(если он все время включен, то питание 25 мкА). В даташите написано, что его можно выключать программно на время пребывания в спящем режиме и затем он сам автоматически включится(когда контроллер проснется), если во фьюзах он включен(при этом он будит кушать около 3,3 мкА ).
Для этого есть специальные команды. И их надо использовать в конце каждого прерывания, чтобы выключить BOD.
Я использовал 3 варианта, но ни один не заработал!(
Команды:
1)
MCUCR |= (1<MCUCR |= (1<SMCR = 0b00000101; // enable sleep mode (power-down mode)
2)
MCUCR |= (1<MCUCR &=(~(1<SMCR = 0b00000101; // enable sleep mode (power-down mode)
3)
MCUCR |= 0b01100000;
MCUCR &= 0b11011111;
SMCR = 0b00000101; // enable sleep mode (power-down mode)
Подскажите, пожалуйста, в чем может быть причина не отключения BOD программно?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
max_mart
сообщение Aug 30 2012, 15:04
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



А как же ост. биты(IVSEL,IVCE,PUD)?
Ведь этот код:
MCUCR=(1<<BODS) | (1<<BODSE)
MCUCR=(1<<BODS)
может повлиять на них!?
Go to the top of the page
 
+Quote Post
ae_
сообщение Aug 30 2012, 15:25
Сообщение #3


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



a=(1<<BODS) | (1<<BODSE) | MCUCR
b=(1<<BODS) | MCUCR
MCUCR=a
MCUCR=b
Go to the top of the page
 
+Quote Post
max_mart
сообщение Aug 30 2012, 16:24
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



Цитата(ae_ @ Aug 30 2012, 19:25) *
a=(1<<BODS) | (1<<BODSE) | MCUCR
b=(1<<BODS) | MCUCR
MCUCR=a
MCUCR=b

Прошу прощения!! Прочитал внимательнее даташит - не повляяет! Чтобы сместить вектора прерываний в конец там надо сделать такую же последовательность комманд как с BOD, но только регистры IVSEL, IVCE. А PUD - должен быть установлен в 1, чтобы откл. все внутр подтяжки портов.
Так что можно смело так попробовать:
MCUCR = 0b01100000;
MCUCR = 0b01000000;
Но только вопрос. Как это понимать?
The BODS bit is active three clock cycles after it is set. A sleep instruction must be executed
while BODS is active in order to turn off the BOD for the actual sleep mode. The BODS bit is
automatically cleared after three clock cycles. - какие инструкции по усыпанию должны быть выполнены?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th August 2025 - 23:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016