Проблемы с прерываниями(AVR)

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Фантомас
Родился
Сообщения: 18
Зарегистрирован: Чт май 20, 2010 18:50:03
Откуда: Минск

Проблемы с прерываниями(AVR)

Сообщение Фантомас »

Решил вот на днях сваять хронограф для личных нужд. Написал прошивку, собрал схему в симуляторе - сразу полезли баги. Оно то как раз вполне ожидаемо. Но ТАКИХ я не ожидал! Сразу после запуска симуляции флаги прерываний INT1..2 стоят в 1, пытался сбросить вручную до выставления флага глобального разрешения прерываний - не реагирует. После sei(); уходит в обработчики, второй ра з не взодит в них ни под каким предлогом.

WinAvr gcc;
Симуляция в Proteus
ATmega16;
LCD HD44780;

прошивка и файл симуляции в архиве:
http://fantomasavia.ucoz.ru/tpr/Chrono.tar
Подскажите, в чём грабли?


ЗЫ
За вывод на ЖКИ не пинать, было лень.
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: Проблемы с прерываниями(AVR)

Сообщение md5sum »

Фантомас писал(а):пытался сбросить вручную

Код: Выделить всё

InitLcd();
GIFR=(1<<INTF1)|(1<<INTF0)|(1<<INTF2); // Сброс флагов прерываний
sei(); //разрешаем все прерывания

Таким образом пытался?
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: Проблемы с прерываниями(AVR)

Сообщение Meteor »

Скорее проблема в том что реагируете на уровень (высокий или низкий) при этом получается такая картина.
Заходя в прерывание идет обработка.
Затем выходя из обработки, смотрится на установленный уровень и вновь уходит в обработку.
Настройте на фронты - должно помочь.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Фантомас
Родился
Сообщения: 18
Зарегистрирован: Чт май 20, 2010 18:50:03
Откуда: Минск

Re: Проблемы с прерываниями(AVR)

Сообщение Фантомас »

md5sum писал(а):
Фантомас писал(а):пытался сбросить вручную

Код: Выделить всё

InitLcd();
GIFR=(1<<INTF1)|(1<<INTF0)|(1<<INTF2); // Сброс флагов прерываний
sei(); //разрешаем все прерывания

Таким образом пытался?


И так тоже.

Meteor писал(а):Скорее проблема в том что реагируете на уровень (высокий или низкий) при этом получается такая картина.
Заходя в прерывание идет обработка.
Затем выходя из обработки, смотрится на установленный уровень и вновь уходит в обработку.
Настройте на фронты - должно помочь.


Будем пробовать. Хотя, если я не забыл всё к чертям, реагирую на срез.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»