Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
31.10.2010, 18:11
|
|
Вид на жительство
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
|
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);
} |
|
|
|
|
31.10.2010, 20:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: ATMega16 не просыпаеться от внешнего прерывания.
Во все биты ICS запишите нули и тогда будет просыпаться.
Ножки ИНТ будят чип из повер-довна только при нулевом уровне.
Если надо по перепаду - включите ПСИНТ
|
|
|
|
31.10.2010, 20:22
|
|
Вид на жительство
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
|
Re: ATMega16 не просыпаеться от внешнего прерывания.
Сообщение от niXto
|
Если надо по перепаду - включите ПСИНТ
|
"Это-же бу,бльгум! ![Прикольно](images/smilies/icon_wink3.gif) ",- это старая добрая мега 16 ![Улыбка](images/smilies/icon_smile.gif) без всяких там PCINT-ов ! В Меге8 только проверил - все работает на ура. Уже думаю может контроллер бракованный?
|
|
|
|
31.10.2010, 20:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: ATMega16 не просыпаеться от внешнего прерывания.
Адреса прерываний у мега16 и мега8 не совпадают. В проект вы подтыкаете мега16 или тупо пишете код мега8 в мега16? Других косяков не вижу, нужен полный код
|
|
|
|
31.10.2010, 21:06
|
|
Вид на жительство
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
|
Re: ATMega16 не просыпаеться от внешнего прерывания.
Сообщение от niXto
|
Адреса прерываний у мега16 и мега8 не совпадают. В проект вы подтыкаете мега16 или тупо пишете код мега8 в мега16?
|
ХЫХ ![Улыбка](images/smilies/icon_smile.gif) )))))))
|
|
|
|
04.11.2010, 13:11
|
|
Прохожий
Регистрация: 29.10.2010
Сообщений: 9
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ATMega16 не просыпаеться от внешнего прерывания.
Из режима SLEEP_MODE_PWR_SAVE контроллер просыпается только от прерываний, обнаруживаемых асинхронно. Попробуйте прерывания INT2 по низкому уровню, должно получиться.
|
|
|
|
04.11.2010, 19:27
|
|
Вид на жительство
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
|
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 внешним прерыванием, никогда с этим небыло проблем.
|
|
|
|
04.11.2010, 20:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: ATMega16 не просыпаеться от внешнего прерывания
Сообщение от nerozero
|
Ниже приведена заметка "Only INT2 or level interrupt INT1 and INT0". И главное это всегда работало на Mega8
|
В каком таком даташите можно прочитать про ИНТ2? Уже года 3 работаю с мега8, но даже не подозреваю о его существовании...
|
|
|
|
04.11.2010, 20:59
|
|
Вид на жительство
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
|
Re: ATMega16 не просыпаеться от внешнего прерывания
Сообщение от niXto
|
В каком таком даташите можно прочитать про ИНТ2
|
Нет эта выжимка из даташита mega16, нулевое и первое прерывание у них идентичны, INT2 нет у Mega8.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
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, время: 23:45.
|
|