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

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

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

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

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

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

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

 
Опции темы
Непрочитано 31.10.2010, 18:11  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
nerozero на пути к лучшему
По умолчанию ATMega16 не просыпаеться от внешнего прерывания

Сабж.
Все работает на других контроллерах,а также в протеусе даже на mega16. При всем выше сказанном - контроллер просыпается от внутреннего прерывания - в данном случае от RTC.
Аппаратный баг?


код - которым тестировалЖ
Код:
#include ‹avr/io.h›
#include ‹avr/interrupt.h›
#include ‹avr/sleep.h›

volatile static uint8_t _flags = 0;
#define F_SHOULD_SLEEP		0x01

void init();

int main()
{
	DDRC|= _BV(PC2)|_BV(PC3);

	//_flags = F_SHOULD_SLEEP;
	init();
	sei();
	set_sleep_mode(SLEEP_MODE_PWR_SAVE);
	while(1)
	{
		PORTC |=_BV(PC2);
		cli();
		if (_flags&F_SHOULD_SLEEP)
		{
			PORTC &=~_BV(PC2);
			sleep_enable();
			sei();
			sleep_cpu();
			sleep_disable();
			//_flags &= ~F_SHOULD_SLEEP;
		}
		sei();

	}
}


void init_ext_int()
{
	GICR |= _BV(INT0)|_BV(INT1); 				// Enable INT0
	MCUCR |=  _BV(ISC01)|_BV(ISC11); 			// IRQ0 - Falling Edge
}


void init_rtc()
{
#ifdef RTC
	ASSR |= _BV(AS2);
	TCCR2 |= _BV(CS20)|_BV(CS22);
#else
	ASSR |= _BV(AS2);
	TCCR2 |= _BV(CS21)|_BV(CS22)|_BV(CS21);
#endif
	TIMSK |= _BV(TOIE2);
}

void init()
{
	init_rtc();
	init_ext_int();
	DDRD&=~(_BV(PD2) |_BV(PD3));
	PORTD|= _BV(PD2)| _BV(PD3);
}

ISR(INT0_vect)
{
	_flags &= ~F_SHOULD_SLEEP;
}

ISR(INT1_vect)
{
	_flags |= F_SHOULD_SLEEP;
}

ISR(TIMER2_OVF_vect)
{
	PORTC^=_BV(PC3);
}
Реклама:
nerozero вне форума  
Непрочитано 31.10.2010, 20:03  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: ATMega16 не просыпаеться от внешнего прерывания.

Во все биты ICS запишите нули и тогда будет просыпаться.
Ножки ИНТ будят чип из повер-довна только при нулевом уровне.
Если надо по перепаду - включите ПСИНТ
niXto вне форума  
Непрочитано 31.10.2010, 20:22  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
nerozero на пути к лучшему
По умолчанию Re: ATMega16 не просыпаеться от внешнего прерывания.

Сообщение от niXto Посмотреть сообщение
Если надо по перепаду - включите ПСИНТ
"Это-же бу,бльгум! ",- это старая добрая мега 16 без всяких там PCINT-ов ! В Меге8 только проверил - все работает на ура. Уже думаю может контроллер бракованный?
nerozero вне форума  
Непрочитано 31.10.2010, 20:35  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: ATMega16 не просыпаеться от внешнего прерывания.

Адреса прерываний у мега16 и мега8 не совпадают. В проект вы подтыкаете мега16 или тупо пишете код мега8 в мега16? Других косяков не вижу, нужен полный код
niXto вне форума  
Непрочитано 31.10.2010, 21:06  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
nerozero на пути к лучшему
По умолчанию Re: ATMega16 не просыпаеться от внешнего прерывания.

Сообщение от niXto Посмотреть сообщение
Адреса прерываний у мега16 и мега8 не совпадают. В проект вы подтыкаете мега16 или тупо пишете код мега8 в мега16?
ХЫХ )))))))
nerozero вне форума  
Непрочитано 04.11.2010, 13:11  
TeHoTaMy
Прохожий
 
Регистрация: 29.10.2010
Сообщений: 9
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
TeHoTaMy на пути к лучшему
По умолчанию Re: ATMega16 не просыпаеться от внешнего прерывания.

Из режима SLEEP_MODE_PWR_SAVE контроллер просыпается только от прерываний, обнаруживаемых асинхронно. Попробуйте прерывания INT2 по низкому уровню, должно получиться.
TeHoTaMy вне форума  
Непрочитано 04.11.2010, 19:27  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
nerozero на пути к лучшему
По умолчанию Re: ATMega16 не просыпаеться от внешнего прерывания

Сообщение от TeHoTaMy Посмотреть сообщение
Из режима SLEEP_MODE_PWR_SAVE контроллер просыпается только от прерываний, обнаруживаемых асинхронно. Попробуйте прерывания INT2 по низкому уровню, должно получиться.
Несогласен выжимка из дадашита: "Wake-up Sources:INT2 INT1 INT0. " Ниже приведена заметка "Only INT2 or level interrupt INT1 and INT0". И главное это всегда работало на Mega8. Тоесть Mega8 выводиться из Power Save внешним прерыванием, никогда с этим небыло проблем.
nerozero вне форума  
Непрочитано 04.11.2010, 20:56  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: ATMega16 не просыпаеться от внешнего прерывания

Сообщение от nerozero Посмотреть сообщение
Ниже приведена заметка "Only INT2 or level interrupt INT1 and INT0". И главное это всегда работало на Mega8
В каком таком даташите можно прочитать про ИНТ2? Уже года 3 работаю с мега8, но даже не подозреваю о его существовании...
niXto вне форума  
Непрочитано 04.11.2010, 20:59  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
nerozero на пути к лучшему
По умолчанию Re: ATMega16 не просыпаеться от внешнего прерывания

Сообщение от niXto Посмотреть сообщение
В каком таком даташите можно прочитать про ИНТ2
Нет эта выжимка из даташита mega16, нулевое и первое прерывание у них идентичны, INT2 нет у Mega8.
nerozero вне форума  
 

Закладки

Метки
atmega16, bug, sleep, wake up
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прерывания PIC milssky Микроконтроллеры, АЦП, память и т.д 12 10.10.2010 13:31
Как изменить адрес подпрограммы обработки прерывания? Godzilla82 Микроконтроллеры, АЦП, память и т.д 21 23.08.2010 09:52
Нужна помощь CDC-232 и atmega16 robin7341 Микроконтроллеры, АЦП, память и т.д 0 08.08.2010 00:13
Вложенные прерывания HITECH PIC16 picavr Микроконтроллеры, АЦП, память и т.д 17 07.03.2010 17:39
Вход в прерывания для PIC микроконтроллеров dimmich Микроконтроллеры, АЦП, память и т.д 4 06.12.2009 17:17


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


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