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

 
 
 
Reply to this topicStart new topic
> Не могу пробудить М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
Electronic)
сообщение Oct 6 2008, 07:48
Сообщение #2


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

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



добавлю что в книге написано что контроллер сам выходит из спящего режима по любому прерываю что доступно в данном режиме. или может напутали и всё таки нужна какая то команда?

и вот кусок программы который уводит в режим слип при принятии символа с UART:


unsigned char uart0_rx_isr(void)
{
//uart has received a character in UDR
ch=UDR;
/*вот эта строчка уводит в слип*/
UCSRB=0;WDTCR=0x1F;WDTCR=0x00;/*запрещаю WDT что бы не ресетился*/MCUCR = 0xa0;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;}
}

Сообщение отредактировал Electronic) - Oct 6 2008, 08:15


--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
Go to the top of the page
 
+Quote Post
smac
сообщение Oct 6 2008, 08:44
Сообщение #3


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

Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003



Цитата(Electronic) @ Oct 6 2008, 11:48) *
....добавлю что в книге написано что контроллер сам выходит из спящего режима по любому прерываю что доступно в данном режиме. или может напутали и всё таки нужна какая то команда?


По коду ничего сказать не могу, т. к. не пишу на СИ, но в ДШ написано, что чтобы контроллер вышел из режима слип, нужно, чтобы прерывания инт0/1 были насторены как прерывания по низкому уровню (что в вашем случае по-моему выполнено - MCUCR = 0xa0), во-вторых низкий уровень на соответствующем пине должен держаться на время старта контроллера (задается фьюзами SUT) плюс некоторое время, необходимое на детектирование прерывания. Также неплохо-бы запретить вход в режим слип по пробуждению. Добавлю также, что флаг внешнего прерывания, если оно настроено в режим прерывания по низкому уровню установлен до тех пор, пока условия прерывания не исчезнут, т.е. флаг равен 1 пока на нужной ноге низкий уровень. Поэтому обработчик прерывания будет выполняться пока прерывание разрешено и на нужной ноге присутствует низкий уровень.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Oct 6 2008, 09:20
Сообщение #4


Чайник, 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
Сообщение #5


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

Группа: Новичок
Сообщений: 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
Electronic)
сообщение Oct 6 2008, 13:20
Сообщение #6


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

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



SysRq ТЫ СУПЕР!))) огоромное спасибо!
smac спасибо за хорошие советы!!

Есть непонятнка одна. в PowerDown потреблял 100мкА при PORTX=0, я выставил DDRX=0 стало 60мкА, что же ещё надо выключить что бы стало 8 мкА? Вобще есть какие то правила что надо обязательно выключать перед уходом в слип для минимального потребления?

Сообщение отредактировал Electronic) - Oct 6 2008, 14:18


--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
Go to the top of the page
 
+Quote Post
Николай Иванович...
сообщение Oct 7 2008, 07:03
Сообщение #7


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

Группа: Новичок
Сообщений: 139
Регистрация: 26-09-08
Пользователь №: 40 510



Цитата(Electronic) @ Oct 6 2008, 17:20) *
что же ещё надо выключить что бы стало 8 мкА? Вобще есть какие то правила что надо обязательно выключать перед уходом в слип для минимального потребления?

Вроде бы ватчдог хАвает прилично если его не выключать и схема BOD вроде тоже.

Сообщение отредактировал Николай Иванович Приходько - Oct 7 2008, 07:09
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Oct 8 2008, 17:49
Сообщение #8


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



Ещё отключите аналоговый компаратор, об этом и в DS написано.


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 17th June 2025 - 17:09
Рейтинг@Mail.ru


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