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

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

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

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

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

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

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

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

Сообщение от omercury Посмотреть сообщение
Код:
EIFR=0; // External Interrupt Flag 0 Disable
internalINT=1;
Зачем это, если не секрет? При выходе из прерывания оно само всё сбросит.

А вообще, контроллер точно выполняет то, что Вы ему написали. Он выполняет вот это:
Код:
// сработали сигнальные входы и пробуждение по INT0, нужно выключить прерывание INT0
GIMSK=0;  // External Interrupt Request 0 Disable
EIFR=0; // External Interrupt Flag 0 Disable
internalINT=1;
и дальше честно спит.
Как же он будет выполнять отключенное прерывание?
Либо не отключайте, либо не забывайте после выполнения реакции на прерывание снова включить его.
GIMSK=0; это чтобы вырубить прерывание по INT0 и спокойно обработать выход из powerdown. Иначе это прерывание будет вызываться постоянно, так как лог.0 на INT0 может быть сколько угодно долго.
Мне не важно по какому прерыванию проснулся МК, я потом обрабатываю состояние выходов и выполняю некую логику.

Сейчас все получилось, достаточно было убрать из прерывания INT0 выключение этого самого прерывания. Если кто предложит другой элегантный способов, чтобы выключать INT0 сразу после его возникновения, готов выслушать и отладить?
Реклама:
TechMike вне форума  
Непрочитано 06.02.2011, 12:20   #22
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Не просыпается tiny2313 по INTO

Пока контроллер не получил RETI (если конечно SEI не включать), он не бросится в следующий раз выполнять обработчик. То есть при входе в обработчик автоматически отключаются прерывания(сбрасывается флаг I). Если их специально не разрешить, они и не возникнут. Команда RETI - и есть включение прерываний (установка флага I) совмещённая с выходом из подпрограммы.

И, чтобы МК не кидался в прерывание, сразу после выхода из него, можно его(прерывание) сделать по перепаду, а не по уровню. Тогда, пока не придёт новый перепад, прерывание генерироваться не будет.

Последний раз редактировалось omercury; 06.02.2011 в 12:29.
omercury вне форума  
Непрочитано 06.02.2011, 12:33   #23
mironov
Вид на жительство
 
Регистрация: 07.03.2005
Сообщений: 300
Сказал спасибо: 13
Сказали Спасибо 117 раз(а) в 62 сообщении(ях)
mironov на пути к лучшему
По умолчанию Re: Не просыпается tiny2313 по INTO

"Неправда Ваша, tiny2313 прекрасно выходит из power_down по INTO. Могу скинуть пример, можно для протеуса. "
А не надо в PROTEUS. Надо что бы в натуре работало. А даташит я то же читал. Но в железе это так и не заработало! Все, что смог добиться только "Idle" И я не первый. Человек например вот так вышел из положения.
Миниатюры:
Нажмите на изображение для увеличения
Название: IR.jpg
Просмотров: 72
Размер:	111.7 Кб
ID:	17881  
mironov вне форума  
Непрочитано 06.02.2011, 12:50   #24
kittec
Гражданин KAZUS.RU
 
Регистрация: 14.11.2008
Сообщений: 701
Сказал спасибо: 298
Сказали Спасибо 283 раз(а) в 193 сообщении(ях)
kittec на пути к лучшему
По умолчанию Re: Не просыпается tiny2313 по INTO

Сообщение от mironov Посмотреть сообщение
А не надо в PROTEUS. Надо что бы в натуре работало.
ATtiny2313 работает и в "натуре ", а Ваш пример для niny45 мне ни о чем не говорит.
kittec вне форума  
Непрочитано 06.02.2011, 14:33   #25
TechMike
Вид на жительство
 
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
TechMike на пути к лучшему
По умолчанию Re: Не просыпается tiny2313 по INTO

Сообщение от omercury Посмотреть сообщение
Пока контроллер не получил RETI (если конечно SEI не включать), он не бросится в следующий раз выполнять обработчик. То есть при входе в обработчик автоматически отключаются прерывания(сбрасывается флаг I). Если их специально не разрешить, они и не возникнут. Команда RETI - и есть включение прерываний (установка флага I) совмещённая с выходом из подпрограммы.

И, чтобы МК не кидался в прерывание, сразу после выхода из него, можно его(прерывание) сделать по перепаду, а не по уровню. Тогда, пока не придёт новый перепад, прерывание генерироваться не будет.
Из powerdown tyny2313 выходит только по low level in INT0
TechMike вне форума  
Непрочитано 06.02.2011, 18:07   #26
TechMike
Вид на жительство
 
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
TechMike на пути к лучшему
По умолчанию Re: Не просыпается tiny2313 по INTO

Вообщем остановился на том, что есть. МК выходит из сна по WD или INT0.
Для истории код в winavr+tiny2313:
Код:
// настраиваем порты(ножки)
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 секунд)
/****************** ЛОВИМ ПРЕРЫВАНИЕ WATCHDOG ********************/
SIGNAL(WDT_OVERFLOW_vect){
 internalINT=2;
}

void go_sleep(void){
 // вгоняем МК в POWER-DOWN
 sei(); // разрешаем прерывания глобально
 set_sleep_mode(SLEEP_MODE_PWR_DOWN);
 sleep_mode();
 cli(); // зарещаем прерывания глобально
GIMSK=0;  // External Interrupt Request 0 Disable
EIFR=0; // External Interrupt Flag 0 Disable
}

/****************** ЛОВИМ ПРЕРЫВАНИЕ НА INT0 ПО НИЗКОМУ ПОТЕНЦИАЛУ (ДЛЯ ВЫХОДА ИЗ POWER-DOWN) ********************/
SIGNAL(INT0_vect){
// сработали сигнальные входы и пробуждение по INT0
internalINT=1;
}
TechMike вне форума  
Закрытая тема

Закладки


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

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

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

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


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


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