Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 05.02.2011, 17:30  
TechMike
Вид на жительство
 
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
TechMike на пути к лучшему
По умолчанию Не просыпается tiny2313 по INTO

Добрый день.
Столкнулся со странной проблемой выхода tiny2313 из powerdown.
Нужно было будить МК из powerdown по двум событиям - WD и low level INT0.

С WD проблем нет, раз в 8 секунд МК будится как часы, а вот когда прижимаю к земле INT0 то выполняется только код в прерывании INT0_vect и дальше МК продолжает спать.
Шаманил уже долго, errata читал, гугл тоже не помог. Что посоветуете?
Куски кода по делу, весть проект со схемой архивом ниже:

Код:
// настраиваем порты(ножки)
DDRB=0b11101111; // делаем выходами все порты PINB, кроме PB4(IRQ).
PINB=0b00000000; // выводим на все выходы PORTB 0
PORTB=0b00000000; // и НЕ подягиваем на +питания.

DDRD=0b11111011; // делаем выходами все порты PIND, кроме PD2 (INT0)
PIND=0b00000000; // выводим на все выходы PORTD 0
PORTD=0b00000000; // и НЕ подягиваем на +питания.

DDRA=0b11111100; // делаем выходами все порты PINA, кроме PA1 (STOP) и PA0 (STOP).
PINA=0b00000000; // выводим на все выходы PORTD 0
PORTA=0b00000000; // и НЕ подягиваем на +питания.

// конфигурим wachdog
WDTCSR|=(1‹‹WDIF)|(1‹‹WDIE)|(0‹‹WDE)|(1‹‹WDIE); // Watchdog Interrupt Flag=Enable, Watchdog Interrupt Enable, Mode=Interrupt Mode
WDTCSR|=(1‹‹WDP3)|(0‹‹WDP2)|(0‹‹WDP1)|(1‹‹WDP0); // Watchdog Typical Time=8sec (просыпаться будем раз в 8 секунд)
MCUCR|=(0‹‹ISC01)|(0‹‹ISC00); // The low level of INT0 generates an interrupt request.
GIMSK|=(1‹‹INT0);  // External Interrupt Request 0 Enable
EIFR|=(1‹‹INTF0); // External Interrupt Flag 0


sei(); // разрешаем прерывания глобально
go_sleep(); // засыпаем

void go_sleep(void){
 // вгоняем МК в POWER-DOWN
 cli(); // зарещаем прерывания глобально
 set_sleep_mode(SLEEP_MODE_PWR_DOWN);
 sei(); // разрешаем прерывания глобально
 sleep_mode();
 _delay_ms(20);

PORTD ^= 0b00010000;
_delay_ms(800);
_delay_ms(800);
PORTD ^= 0b00010000;

}

SIGNAL(WDT_OVERFLOW_vect){
 //internalINT=2;
}
/****************** ЛОВИМ ПРЕРЫВАНИЕ НА INT0 ПО НИЗКОМУ ПОТЕНЦИАЛУ (ДЛЯ ВЫХОДА ИЗ POWER-DOWN) ********************/
SIGNAL(INT0_vect){
// сработали сигнальные входы и пробуждение по INT0, нужно выключить прерывание INT0
GIMSK=0;  // External Interrupt Request 0 Disable
EIFR=0; // External Interrupt Flag 0 Disable
internalINT=1;

PORTD ^= 0b00010000;
_delay_ms(800);
PORTD ^= 0b00010000;

}
Вложения:
Тип файла: rar rfm02AVR_050202111.rar (131.7 Кб, 46 просмотров)
Реклама:
TechMike вне форума  
Сказали "Спасибо" TechMike
warel (27.06.2019)
Непрочитано 05.02.2011, 18:11  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Не просыпается tiny2313 по INTO

Попробуйте в ИНТе включать IDLE, после выполнения программы - снова POWER DOWN. И не забывайте снова включать ИНТ в ГИМСКе
niXto вне форума  
Сказали "Спасибо" niXto
warel (27.06.2019)
Непрочитано 05.02.2011, 19:30  
TechMike
Вид на жительство
 
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
TechMike на пути к лучшему
По умолчанию Re: Не просыпается tiny2313 по INTO

Сообщение от niXto Посмотреть сообщение
Попробуйте в ИНТе включать IDLE, после выполнения программы - снова POWER DOWN. И не забывайте снова включать ИНТ в ГИМСКе
Не помогло, а только стало еще хуже. Добавил в прерывание по INT0
Код:
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_mode();
и как до него доходит, то все виснет напрочь...

Может в общем случае WD чудит, нужно при вызове прерывания INT0 что-то делать с WD?
TechMike вне форума  
Сказали "Спасибо" TechMike
warel (27.06.2019)
Непрочитано 05.02.2011, 20:51  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Не просыпается tiny2313 по INTO

Сообщение от TechMike Посмотреть сообщение
Не помогло, а только стало еще хуже. Добавил в прерывание по INT0
Код:
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_mode();
и как до него доходит, то все виснет напрочь...

Может в общем случае WD чудит, нужно при вызове прерывания INT0 что-то делать с WD?
Не выходя из прерывания уходить в слип? Что-то новенькое...
Прерывание должно быть обслужено и завершено. В слип только из основной программы.
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
warel (27.06.2019)
Непрочитано 05.02.2011, 22:11  
TechMike
Вид на жительство
 
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
TechMike на пути к лучшему
По умолчанию Re: Не просыпается tiny2313 по INTO

Сообщение от ut1wpr Посмотреть сообщение
Не выходя из прерывания уходить в слип? Что-то новенькое...
Прерывание должно быть обслужено и завершено. В слип только из основной программы.
по ощущениям, прерывание выполняется но МК не выходит из powerdown.
Попробуб сам МК заменить, уж больно необычно все это.
TechMike вне форума  
Сказали "Спасибо" TechMike
warel (27.06.2019)
Непрочитано 05.02.2011, 22:47  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Не просыпается tiny2313 по INTO

Сообщение от TechMike Посмотреть сообщение
по ощущениям, прерывание выполняется но МК не выходит из powerdown.
Попробуб сам МК заменить, уж больно необычно все это.
Не полагайся на ощущения.
В обработчике прерываний - минимум действий. Отработай обязательные (по запрету). Всё остальное - после обработчика. Следуя логике: "Раз уж мы здесь, значит нас разбудили". Это в том случае, если у тебя выход из слипа по одному единственному прерыванию.. В противном случае нужна более расширенная логика.
И никаких delay(xx) внутри обработчика! А если у тебя в библиотеке используются таймерные задержки? А если на это время прерывания запрещены? delay навсегда?

Последний раз редактировалось ut1wpr; 05.02.2011 в 22:50.
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
warel (27.06.2019)
Непрочитано 05.02.2011, 23:28  
TechMike
Вид на жительство
 
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
TechMike на пути к лучшему
По умолчанию Re: Не просыпается tiny2313 по INTO

Сообщение от ut1wpr Посмотреть сообщение
Не полагайся на ощущения.
В обработчике прерываний - минимум действий. Отработай обязательные (по запрету). Всё остальное - после обработчика. Следуя логике: "Раз уж мы здесь, значит нас разбудили". Это в том случае, если у тебя выход из слипа по одному единственному прерыванию.. В противном случае нужна более расширенная логика.
И никаких delay(xx) внутри обработчика! А если у тебя в библиотеке используются таймерные задержки? А если на это время прерывания запрещены? delay навсегда?

Это я все в курсе, ощущения формируются на основе отладки. И по ней видно, что прерывание по INT0 выполнилось но работа программы не началась(продолжилась). Точек выхода из слипа две, WD или INT0, прерывания не запрещаю вообще, только разрешаю при старте.
TechMike вне форума  
Сказали "Спасибо" TechMike
warel (27.06.2019)
Непрочитано 05.02.2011, 23:37  
kittec
Гражданин KAZUS.RU
 
Регистрация: 14.11.2008
Сообщений: 701
Сказал спасибо: 298
Сказали Спасибо 283 раз(а) в 193 сообщении(ях)
kittec на пути к лучшему
По умолчанию Re: Не просыпается tiny2313 по INTO

TechMike, а вы не пробовали, пока не отладите INTO, не использовать
WD.
kittec вне форума  
Сказали "Спасибо" kittec
warel (27.06.2019)
Непрочитано 05.02.2011, 23:56  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Не просыпается tiny2313 по INTO

Сообщение от kittec Посмотреть сообщение
TechMike, а вы не пробовали, пока не отладите INTO, не использовать
WD.
Ну правильно. Метод исключений еще никто не отменял. Чего гадать?
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
warel (27.06.2019)
Непрочитано 06.02.2011, 00:44  
TechMike
Вид на жительство
 
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
TechMike на пути к лучшему
По умолчанию Re: Не просыпается tiny2313 по INTO

Собственно чем и занимаюсь, как показали опыты, если в прерывании INT0 не вырубать его возникновение (чтобы зря его не вызывать) то все функционирует как надо. Но это в некоторые моменты тормозит выполнение программы, так как включаю прерывание INT0 но еще не заснул МК...
TechMike вне форума  
Сказали "Спасибо" TechMike
warel (27.06.2019)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WH1602 и Tiny2313 maruda_v Микроконтроллеры, АЦП, память и т.д 100 01.05.2013 13:37
Часы дла ВАЗ классики на tiny2313 VladimirMal Микроконтроллеры, АЦП, память и т.д 8 17.10.2011 14:31


Часовой пояс GMT +4, время: 20:33.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot