AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
08.10.2013, 01:29
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Внешние прерывания Atmega32u4
Доброго времени суток.
Заблудился опять в трех соснах.
Пытаюсь настроит программу на с работку от внешнего прерывания по вектору 0 (INT0). По спадающему фронту.Так не работает.
Код:
|
ClearBit(DDRB,0); //Ставим на вход
SetBit(PORTB,0); //Переводим в высокий уровень
EICRA = 0;//обнуляем
EICRB = 0;
//настраиваем на срабатывание INT0 по переднему спадающему фронту
EICRA |= (1‹‹ISC01)|(0‹‹ISC00);
//разрешаем внешнее прерывание INT0
EIMSK |= (1‹‹INT0);
//PCICR = 1;
//PCMSK0 = (1‹‹ PCIE0);
//выставляем флаг глобального разрешения прерываний
sei(); |
Обработка прерывания
Код:
|
int Mode =0;
ISR( INT0_vect )
{
if(Mode==0)
{
Mode=1;
ClearBit(PORTD,0);//Лампочка выключись
}else
{
Mode=0;
SetBit(PORTD,0);//Лампочка включись
}
} |
Так перезагрузаеться мк
Код:
|
ClearBit(DDRB,0); //Ставим на вход
SetBit(PORTB,0); //Переводим в высокий уровень
EICRA = 0;//обнуляем
EICRB = 0;
//настраиваем на срабатывание INT0 по переднему спадающему фронту
EICRA |= (1‹‹ISC01)|(0‹‹ISC00);
//разрешаем внешнее прерывание INT0
EIMSK |= (1‹‹INT0);
PCICR = 1;
PCMSK0 = (1‹‹ PCIE0);
//выставляем флаг глобального разрешения прерываний
sei(); |
Порт Б0 замыкаю на минус. Уже третий час сижу.
Заранее спасибо.
|
|
|
|
08.10.2013, 13:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,794
Сказал спасибо: 2,913
Сказали Спасибо 3,120 раз(а) в 2,111 сообщении(ях)
|
Re: Внешние прерывания Atmega32u4
У Вас сейчас - по фронту (отпускание PB0 от земли):
Сообщение от bass1981
|
//настраиваем на срабатывание INT0 по переднему спадающему фронту
Код:
|
EICRA |= (1‹‹ISC01)|(0‹‹ISC00); |
|
Если по спаду, то так:
EICRA |= 1‹‹ISC01;
Ну и PCICR с PCMSK0, по-моему, - лишние. Достаточно:
PCICR = 0;
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
08.10.2013, 18:20
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: Внешние прерывания Atmega32u4
Не все равно не работает.
Код:
|
ClearBit(DDRB,0); //
SetBit(PORTB,0); //
SetBit(PORTD,0); //Лампочка включись
_delay_ms(1000);
EICRA = 0;
EICRB = 0;
//настраиваем на срабатывание INT0 по переднему спадающему фронту
//EICRA = (1‹‹ISC01)|(0‹‹ISC00);
EICRA |= 1‹‹ISC01;
//разрешаем внешнее прерывание INT0
EIMSK |= (1‹‹INT0);
PCICR = 0;
//выставляем флаг глобального разрешения прерываний
sei(); |
Лампочка как горит так и горит. а по идеи ри каждом прерывании должна включаться выключаться.
Выставляю
Код:
|
PCICR = 1;
PCMSK0 = (1‹‹ PCIE0); |
Контроллер ребутаеться, значит прерывание проходит.
Может прерывание указал не так, AVRStudio 4.....
Сейчас попробую на INT1 перенастроить, но все же интересно где грабли то.... А на голове все больше и больше шишка.
Заранее спасибо.
|
|
|
|
08.10.2013, 18:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,794
Сказал спасибо: 2,913
Сказали Спасибо 3,120 раз(а) в 2,111 сообщении(ях)
|
Re: Внешние прерывания Atmega32u4
Тьфу на Вас! INT0 живёт на PD0.
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
08.10.2013, 19:27
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: Внешние прерывания Atmega32u4
Сообщение от ForcePoint
|
Тьфу на Вас! INT0 живёт на PD0.
|
Действительно ТФУ!!!!!!!!! перепутал PCINT0...... Я как всегда сделаю глупейшую ошибку и сижу день ковыряюсь......... Засыпал не увидел.
|
|
|
|
08.10.2013, 21:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,794
Сказал спасибо: 2,913
Сказали Спасибо 3,120 раз(а) в 2,111 сообщении(ях)
|
Re: Внешние прерывания Atmega32u4
Сообщение от bass1981
|
Действительно ТФУ!!!!!!!!! перепутал PCINT0...... Я как всегда сделаю глупейшую ошибку и сижу день ковыряюсь......... Засыпал не увидел.
|
Не парьтесь, errare humanum est. Иной раз уж хочу где-нибудь спросить, но снисходит просветление. И сижу, думаю, какой сам дурак и как хорошо, что не попалился перед обчеством.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:35.
|
|