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

 
 
> Не могу пробудить М8 из спящих режимов внешним перыванием(, в даташите написано что можно прбудить М8 низким уровнем сигнала INT0
Electronic)
сообщение Oct 6 2008, 00:09
Сообщение #1


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

Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783



доработал програму для ухода схемы в спящий режиим. всё не плохо потребление 7,5мкА но не могу пробудить внешним перыванием по INT1. в рабочем режиме всё происходит как и задано программно в прерывании, загораются диоды проверочные и т.д. а только уходит в режим PowerDown не пробуждается и не делает прерывание. из Idle так же не выходит. Хотя сделал всё GICR = 0x80;(разрешение прерывания INT1) +подтягивающий резистор PORTD=0x08;(для +5В на INT1) + MCUCR = 0xa0(спящий режим powerdown); + asm("sleep");

вот само прерывание

#pragma interrupt_handler int1_isr:3
void int1_isr(void)
{
//external interupt on INT1
WDTCR=0x1F;
WDTCR=0x0F;
LED_ON;
PORTB = 0x10;
PORTC = 0xfe;
PORTD = 0x0f;
LED_ON;
}
если бы порты конфигуриролись как написано то всё бы на плате светилось после замыкания INT на землю). в рабочем режиме замыкаю INT1 на землю всё светится. после ухода в спячку пробуждатся по этому прерыванию не хочет = на плате темнота))

вот подсказанная мне информация из даташита на М8
"Low level interrupts on INT0/INT1 are detected asynchronously. This implies that these interrupts can be used for waking the part also from sleep modes other than Idle mode."

Подскажите что это может быть!???


--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SysRq
сообщение Oct 6 2008, 09:20
Сообщение #2


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



uart0_rx_isr - это обработчик прерывания (а зачем unsigned char?)? Ежели да, то у вас глобально запрещены прерывания, int1_isr срабатывать не будет.
Go to the top of the page
 
+Quote Post
Electronic)
сообщение Oct 6 2008, 09:45
Сообщение #3


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

Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783



Цитата(SysRq @ Oct 6 2008, 12:20) *
uart0_rx_isr - это обработчик прерывания (а зачем unsigned char?)? Ежели да, то у вас глобально запрещены прерывания, int1_isr срабатывать не будет.

#pragma interrupt_handler uart0_rx_isr:12
unsigned char uart0_rx_isr(void)
{
//uart has received a character in UDR
ch=UDR; UCSRB=0;C2_OFF;C3_OFF;WDTCR=0x1F;WDTCR=0x00;MCUCR = 0x80;PORTD=0x08;PORTB=0;PORTC=0;asm("sleep");asm("nop");
if(sb==1){TCCR0=0;sb=0;if(ch>=128){CLI();ST=1; UDR=0;UCSRB=0x08;/*only peredacha*/ch-=128;UDR=('#');d();UDR=('1');d();UDR=ch;UCSRB=0;EP_W(0,ch);lcd_t(ch);while(1);}else{ch=0;sl_count=0;TCC
R1B=0x05;}}
if(ch==42){sb=1;UDR=0;UCSRB=0x90;pause_timer1();/*only priyom*/timer=0;TCCR0 = 0x05;}
}
сори! вот так как выше всё. почему unsigned char uart0_rx_isr(void) ну функция так определяется в с++ а вобще фиг его знает... я форму брал из генератора кода. сейчас вынесу вход в спящий режим в main.


--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 04:12
Рейтинг@Mail.ru


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