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

 
 
> Sleep режим на Attiny26
DJM
сообщение May 25 2006, 05:37
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 25-05-06
Пользователь №: 17 426



Здравствуйте,
возникла проблеммка с использованием энергосберегающего режима.

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

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


#asm
sleep
nop
#endasm
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
add
сообщение May 25 2006, 06:00
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



"проц засыпает и не просыпается по приходу прерывания INT0 "

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

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

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

А Вы точно уверены что он спит?


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
DJM
сообщение May 25 2006, 06:38
Сообщение #3





Группа: Новичок
Сообщений: 2
Регистрация: 25-05-06
Пользователь №: 17 426



>>"проц засыпает и не просыпается по приходу прерывания 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 мА
Go to the top of the page
 
+Quote Post
ksv198
сообщение May 25 2006, 12:57
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 177
Регистрация: 25-08-05
Из: Ставрополь
Пользователь №: 7 964



Цитата(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)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 19:01
Рейтинг@Mail.ru


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