Перейти к содержанию
    

Mega (48) Help !

Работаю с Мегой 48 - меряю, управляю, индицирую - все ОК.

Нужно приделать кнопку и по нажатию запускать подпрограмму.

Как только выставляю разрешение внешних прерываний INT1 (sbi EIMSK,1 для М48й) - где-то зависает :( .

 

 

Проблема продолжает стоять ! :angry2:

При наличии общего разрешения прерываний, команда разрешения внешнего приводит к тому, что контроллер следующей командой кидается обрабатывать ЯКОБЫ имеющееся внешнее. И даже Студио это старательно симулирует.

Вопрос : где и откуда "накопилось" внешнее прерывание, если никто ничего не трогал !?

Изменено пользователем GeorgyBey

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работаю с Мегой 48 - меряю, управляю, индицирую - все ОК.

Нужно приделать кнопку и по нажатию запускать подпрограмму.

Как только выставляю разрешение внешних прерываний INT1 (sbi EIMSK,1 для М48й) - где-то зависает :( . Студия симулирует - нормально).

 

Чем "вредны" внешние прерывания - по Вашему опыту?

:cheers:

 

Я так понял кнопка на внешнем прерывании. Вообще ИМХО не очень хорошо. Вопрос как оно среагирует на дребезг?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Очень похоже на дребезг. Попробуй для проверки при входе в прерывание поставить какой-нибудь свободный порт в 1, а при выходе из прерывания вернуть в 0. Тогда сможешь по крайней мере посмотреть, где находишься.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так понял кнопка на внешнем прерывании. Вообще ИМХО не очень хорошо. Вопрос как оно среагирует на дребезг?

 

 

Уточняю: до дребезга дело не доходит! Как только ввожу команду

"sbi EIMSK,1" (компилирую и заливаю во флэш) - нормально работающий до этого (по программе) контроллер останавливается (где-то) - АЦП не меряет (рез-т 0), управляющий вывод порта В = 0 - оптрон управления включен "навсегда", ничто не моргает - где-то стоит :(

Т.е. ввод разрешения на внешнее прерывание УЖЕ чего-то портит :wacko:

Кнопку нажмут раз в сто лет так стоит ли вводить ее опрос ?

А так - прерывание принято - по дребезгу ли, по потенциалу земли-ли - пошла программа обработки - и пусть себе дребезжит :tongue:

Или ? ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уточняю: до дребезга дело не доходит! Как только ввожу команду

 

Ну тогда уточняй дальше. Как кнопка висит?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уточняю: до дребезга дело не доходит! Как только ввожу команду

 

Ну тогда уточняй дальше. Как кнопка висит?

 

STK-500 :rolleyes:

Если по изменению состояния кнопки:

PCINT13 (PortC, вывод5 - как вход) проводочком к штатной кнопке,

Галочку через Хрегистр на разрешение этого прерывания и ... на кнопку не реагирует (работает как работал).

А если INT1 (sbi EIMSK,1) - до кнопок, как говорил, не доходит... :laugh:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чудеса с решетом :cranky:

Сегодня ТАК себя уже не ведет.

Сегодня "съедает" установку внешнего прерывания (INT1),

зато следующим шагом после установки общего разрешения прерываний (sei)

(в любом месте программы) прерывается! (от прерывания отправляю в ловушку - выставляю светодиоды и зацикливаю).

Впечатление - считает "внешним прерыванием" любое телодвижение :angry2:

Не даром и в книжке "Применение мик-ов Атмел" про внешние прерывания ни гу-гу.

И так - очевидные (для тех кто поборол) гадости внешних прерываний - они есть ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чудеса с решетом  :cranky:

Сегодня ТАК себя уже не ведет.

Сегодня "съедает" установку внешнего прерывания (INT1),

зато следующим шагом после установки общего разрешения прерываний (sei)

(в любом месте программы) прерывается! (от прерывания отправляю в ловушку - выставляю светодиоды и зацикливаю).

Впечатление - считает "внешним прерыванием" любое телодвижение :angry2:

Не даром и в книжке "Применение мик-ов Атмел" про внешние прерывания ни гу-гу.

И так - очевидные (для тех кто поборол) гадости внешних прерываний - они есть ?

 

Провод на кнопку длинный? Осциллографом смотрели, что происходит на этой линии?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

vvs157, никаких гадостей нет, прерывания включаются и работают без танцев с бубном.

Пишем обработчик, ставим соответствующий вектор прерывания,

в процедуре инициализации периферии:

- выставляем условия возникновения внешних прерываний (уровень/фронт),

- снимаем флаги сработки внешних прерываний (единичками),

- поднимаем биты разрешения внешних прерываний,

- разрешаем прерывания вообще (SEI).

 

По проблеме: подтягивающий резистор на входе висит/включен?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

vvs157, никаких гадостей нет, прерывания включаются и работают без танцев с бубном.

 

"- снимаем флаги сработки внешних прерываний (единичками), "

 

Вот про Это - поподробнее, плиииииз.

А то как только разрешаю внешнее прерывание (при наличии общего), либо разрешаю общее (при установленном вненшнем) контроллер радостно срывается в обработку внешнего прерывания, хотя никто ничего не трогал!!! :wacko:

Ни про кнопки ни про провода ПОКА и речи нет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема продолжает стоять !

При включении разрешения внешнего прерывания (при наличии общего разрешения) контроллер, вместо следующей команды, отправляется обрабатывать внешнее прерывание, хотя его (прерывания) нет, а его (контроллер) - никто не просит этого делать !!!

Даже Студио это старательно симулирует :(

Вопрос: ОТКУДА появляется запрос на обработку, если никто не просил !?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

GeorgyBey, до настройки типа внешнего прерывания вполне может установиться флаг прерывания; пример - после сброса ISCn1:0=00 (низкий уровень), на ноге - 0, флаг установился, и будет стоять после настройки, хотя, согласно ей, никакого прерывания быть не должно. После разрешения прерываний - имеем описанную Вами ситуацию. Поэтому между настройкой и разрешением прерываний не помешает сбросить флаги INTFn.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня с AT90S1200 была подобная проблема. Почитал доку на нее и вот что там сказано о избавлении от дребезга с внешним прерыванием:

1. Disable the External Interrupt by clearing the INT0 flag in GIMSK.

2. Select level triggered interrupt.

3. Select desired interrupt edge.

4. Re-enable the external interrupt by setting INT0 in GIMSK.

Может и с 48-ой надо сделать тоже самое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо "vet" и "Maxim".

 

Для всех, кто еще не сталкивался :a14: :

 

Оказалось, что в железе все было нормально.

ДЛЯ СИМУЛЯТОРА нужно было вручную устанавливать "pin" порта в "1", иначе он (симулятор) считал "0" на ножке "наступившим событием".

 

Дребезг сказывается когда прерывание определяется по фронту "прерывающего" импульса.

Фронт считается имеющимся, если на момент прихода внутреннего синхроимпульса на ножке "1после0"(или наоборот, а при предыдущем НЕ было!). Если контакт дребезжит т.е. подвижный элемент контакта подпрыгивает на неподвижном, то в момент прихода фронта синхроимпульса собственно контакта может и не быть :( - событие пропущено !

 

Всем спасибо, тему можно считать закрытой :cheers:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...