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

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

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

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

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

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

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

 
Опции темы

ATMega16 не просыпаеться от внешнего прерывания

Непрочитано 31.10.2010, 18:11  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 482
Сказал спасибо: 18
Сказали Спасибо 106 раз(а) в 67 сообщении(ях)
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.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: ATMega16 не просыпаеться от внешнего прерывания.

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

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

Адреса прерываний у мега16 и мега8 не совпадают. В проект вы подтыкаете мега16 или тупо пишете код мега8 в мега16? Других косяков не вижу, нужен полный код
niXto вне форума  
Непрочитано 31.10.2010, 21:06  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 482
Сказал спасибо: 18
Сказали Спасибо 106 раз(а) в 67 сообщении(ях)
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
Сообщений: 482
Сказал спасибо: 18
Сказали Спасибо 106 раз(а) в 67 сообщении(ях)
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.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
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
Сообщений: 482
Сказал спасибо: 18
Сказали Спасибо 106 раз(а) в 67 сообщении(ях)
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, время: 07:19.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.