Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Необьяснимая проблема с прерываниями
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Midas
Здравствуйте ребята тут такой прикол у меня вышел. В проге поставел прерывание по ниспадаещому фронту на INT0 и falling edge на INT2 так вот на INT2 при падении напряжения прерывание генерируется,
а на INT0 нет. Не пойму почему? 07.gif. Мерял вольтметром то на этой ножке напряжения падает с 4.22В на 0.01В, а функция по обработке прерывани не вызивается почему-то?
NVade
хотя бы кусок кода привел...
Midas
Выкладываю весь проэкт
Midas
Ребята, написал маленькую тест программу, вот код
Код
#include <mega16.h>
#include <delay.h>
//---------------------------------------------------------------------------------        
void main(void)
{  
DDRD=0x00;
DDRC=0xFF;
PORTC.6=1;
PORTC.7=1;
while(1)    
{      
  if(PIND.2==0)
  {
    delay_ms(25);
    if(PIND.2==0)
    {
      PORTC.6=0;
    }
  }  
  if(PIND.3==0)
  {
    delay_ms(25);
    if(PIND.3==0)
    {
      PORTC.7=0;
    }
   }
}
}

Так вот эта прога делает лишь одно провиряет состояния PIND.2 и PIND.3 и эсли условия истиное то загорпются светодиоды на PORTC.7 и PORTC.6, но тут такой прикол. Прошил мк, ни на какую кнопку не нажимал, а диод загорается и всё время на PORTC.7. Это чё значит ножка МК не работает или что, напряжения 4 В. Прокоментируйте пожалуйста
NVade
а что за компилятор?
Листинг смотрел - там все нормально?
Питание, клок, фузы проверил?
Dog Pawlowa
Цитата(Midas @ Jun 29 2007, 16:46) *
Прокоментируйте пожалуйста

Нет проблем. Подтяжки кнопок внешние есть?
muravei
Цитата(Midas @ Jun 29 2007, 17:46) *
Ти всё время на PORTC.7. Это чё значит ножка МК не работает или что, напряжения 4 В. Прокоментируйте пожалуйста

А тестером ее потыкать -не пищит? Выключенное , конечно.
И схемку, как св.диоды включены.
Midas
Не пищит. Всё в протеусе!
=GM=
Цитата(Midas @ Jun 29 2007, 12:46) *
Так вот эта прога делает лишь одно проверяет состояния PIND.2 и PIND.3 и если условие истиное то загораются светодиоды на PORTC.7 и PORTC.6, но тут такой прикол. Прошил мк, ни на какую кнопку не нажимал, а диод загорается и всё время на PORTC.7. Это чё значит ножка МК не работает или что, напряжения 4 В. Прокоментируйте пожалуйста

Получается разовое включение. Попробуйте так, чтобы видеть изменение состояния кнопок:
Код
{  
DDRD=0x00;
DDRC=0xFF;
PORTC.6=1;
PORTC.7=1;
while(1)    
{      
  if(PIND.2==0) PORTC.6=0;
  else PORTC.6=1;

  if(PIND.3==0) PORTC.7=0;
  else PORTC.7=1;
}
}
Midas
Так вот, сделал так как говорил =GM= но тут такой прикол идёт всё равно разовое включание, тоесть если PIN уже был 1 то он не миняется, так и остаётся потому-что диод продолжает гореть даже при розомкнутом состоянии кнопки, ЧЁ делать? crying.gif 07.gif
archi2000
Попробуй скомпилировать в urboff формат и отладить в AVRStudio.
Вообще в симуляторе Протеус может работать, а в реальном железе - нет по многим причинам - ошибки в монтаже например.
Еще в микроконтроллере есть WATCHDOG, он может ресетить процессор, на время отладки его нужно отключать.
Midas
Нет я конечно понимаю, всё может быть но одно мне недоходит почему на INT2 прерывание идет, смысли срабатывает, а на INT1 и INT0 НЕТ 07.gif Может ли повлиять тот факт что длинна от замыкателя(кнопки) больше 5 метров, хотя я возле ноги вольтметром мерал, то напряжения там нормально почти как от батареек и падает нормально. Чёрт его знает, вот самая большая досада, что INT2 работает, а остальные нет. А каие могут быть ошибки монтажа? Может ли так глючить из-зи малого питания-3.75В, хотя с другой стороны INT2 срабатывает всё таки. Я ещё в даташите чего-то не догнал, мол что INT2- это какоето асинхронное прерывание, это как?
muravei
Цитата(Midas @ Jun 29 2007, 22:09) *
Может ли повлиять тот факт что длинна от замыкателя(кнопки) больше 5 метров, хотя я возле ноги вольтметром мерал, то напряжения там нормально почти как от батареек

Все может повлиять, Вы бы потрудились и нарисовали полную схему, Протеусом большинство не пользуется.Есть ли керамический конд . по питанию? А Вам эти 5м жизнено необходимы ? Добейтесь, сначала, устойчивой работы на 5см .
Асинхронное это значит процессор узнает о нем не в момент прихода такт импульса, а значит , наверно,оно может случиться от импульса меньше длительности клока.
И еще, может Вам лучше настроить INT0 на прерывание по "0"?
bodja74
Аяяй!

Ну народ Вы даете smile.gif
Давно избитую проблему не знаете.

1 В протеусе PC7 не пашет под мегу16
2 В реале тоже не пашет ,нужно отключить фуз JTAGEN.
Midas
Почему не пашет 07.gif ? У меня протеус 7.1 и всё пашет!
Тут проблема в другом...
Ребята, большое вам спасибо, за то что терпели и отвечали на мои ламерские вопросы a14.gif
Ошибку Я нашёл в монтаже платы 08.gif 08.gif , по просьбе muravei я начал рисовать схему и тут я понял что INT0 INT1 находятся на много далее от INT2, чем у меня на плате и тут я понял, что перепутал верх и низ контроллера 01.gif ! Вот такой я дурак, быстро всё перепаял и вуалля...
ВСЁ работает 08.gif
Ребята ещё раз извините за такое дурацкое недоглядение, я уже себе пообещал, что больше такого не повторится! smile.gif smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.