Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Sleep режим на Attiny26
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
DJM
Здравствуйте,
возникла проблеммка с использованием энергосберегающего режима.

Описание проекта:
Задача - встроить в пульт дистанционного управления МП, для перекодировки посылок.
Решение - сигнал, поступающий на инфракрасный приемник подал на вход внешнего прерывания INT0,бобработчик написан, только вот энергию батареек ест устройство прожорливо ....
Отправляю МП в слип - проц засыпает и не просыпается по приходу прерывания INT0 (нога находится в единице в неактивном состоянии устройства).
Помогите, может у кого есть опыт, может там надо настроить какие либо регистры

Мой код
SETBIT(MCUCR,5);
SETBIT(MCUCR,5);
CLRBIT(MCUCR,4);
#asm("sleep")
#asm("nop")


#asm
sleep
nop
#endasm
add
"проц засыпает и не просыпается по приходу прерывания INT0 "

А прерывания по входу разрешили?
#asm

ldi r16,(1<<int0)|(0<<int1)
out gimsk,r16
sei ;и общее прерывание тоже надо!

#endasm
"только вот энергию батареек ест устройство прожорливо "

А Вы точно уверены что он спит?
KRS
У вас 2 раза 5 бит ставится, может это ошибка?
по коду 3 бит не устанавливается и у вас не power done mode a Idle (очень прожорливый)

Еще надо отключать неиспользумую переферию
ADC, компаратор, ноги....
DJM
>>"проц засыпает и не просыпается по приходу прерывания INT0 "

>> А прерывания по входу разрешили?
По входу прерывания разрешены, вот функция StartUp:
void StartUp()
{

STOP_TIMER_0();

TIMER_INT_ENA = TIMER_0_INT_ENA;
TIMER_0=TIMER_0_PRELOAD;
START_TIMER_0();

sleep_enable();

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFh
// OC1A output: Disconnected
// OC1B output: Disconnected
PLLCSR=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1=0x00;
OCR1A=0x00;
OCR1B=0x00;
OCR1C=0x00;

// Func7=in Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=1
PORTA=0x01;
DDRA=0x7f;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=0 State0=T
PORTB=0x00;
DDRB=0x02;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Any change
// Interrupt on any change on pins PA3, PA6, PA7 and PB4-7: Off
// Interrupt on any change on pins PB0-3: Off
GIMSK=0x40;
MCUCR|=0x01;
GIFR=0x40;

// Analog Comparator initialization
// Analog Comparator: Off
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: kHz
// Mode: PWMA top=OCR1C
// OC1A output: Non-Inv., /OC1A connected
// OC1B output: Disconnected


ACSR=0x80;
PLLCSR=0x00;

TCCR1A=0x42;

TCCR1B=0x01;
OCR1A=65;
OCR1C=130;
__sti;
}



>>"только вот энергию батареек ест устройство прожорливо "
>>А Вы точно уверены что он спит?
это в смысле не в слип режиме энергию ест порядка 7мА, те слип режим в данном случае необходим.
А когда выходит в слип режим то энергопотребление снижается до 0.1 мА
add
Цитата
слип режим то энергопотребление снижается до 0.1 мА

Вобщето 100мкА это многовато...для power down
Вам надо установить в MCUCR 3бит(SM0)=0, 4бит(SM1)=1, 5бит(SE)=1, это power down режим(стр.39 datasheeta).
Удачи.
ksv198
Цитата(DJM @ May 25 2006, 10:38) *
"проц засыпает и не просыпается по приходу прерывания INT0 "
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Any change
// Interrupt on any change on pins PA3, PA6, PA7 and PB4-7: Off
// Interrupt on any change on pins PB0-3: Off
GIMSK=0x40;
MCUCR|=0x01;
GIFR=0x40;

И не должен просыпаться, все правильно. Выход из сна в Power Down:
-----
Only an External Reset, a Watchdog Reset, a Brown-out Reset, USI start condition
interrupt, an External Level Interrupt on INT0, or a pin change interrupt can wake
up the MCU
-----
Т.е. проснуться он может только если запрограммировать прерывание на уровень, а не на изменение.
Если надо именно изменение, используйте pin change interrupt, правда тут не определишь какую ногу дернули (особенность Тины 26)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.