GeorgyBey 0 28 апреля, 2005 Опубликовано 28 апреля, 2005 (изменено) · Жалоба Работаю с Мегой 48 - меряю, управляю, индицирую - все ОК. Нужно приделать кнопку и по нажатию запускать подпрограмму. Как только выставляю разрешение внешних прерываний INT1 (sbi EIMSK,1 для М48й) - где-то зависает :( . Проблема продолжает стоять ! :angry2: При наличии общего разрешения прерываний, команда разрешения внешнего приводит к тому, что контроллер следующей командой кидается обрабатывать ЯКОБЫ имеющееся внешнее. И даже Студио это старательно симулирует. Вопрос : где и откуда "накопилось" внешнее прерывание, если никто ничего не трогал !? Изменено 4 мая, 2005 пользователем GeorgyBey Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DimSun 0 28 апреля, 2005 Опубликовано 28 апреля, 2005 · Жалоба Работаю с Мегой 48 - меряю, управляю, индицирую - все ОК. Нужно приделать кнопку и по нажатию запускать подпрограмму. Как только выставляю разрешение внешних прерываний INT1 (sbi EIMSK,1 для М48й) - где-то зависает :( . Студия симулирует - нормально). Чем "вредны" внешние прерывания - по Вашему опыту? :cheers: <{POST_SNAPBACK}> Я так понял кнопка на внешнем прерывании. Вообще ИМХО не очень хорошо. Вопрос как оно среагирует на дребезг? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yung 0 29 апреля, 2005 Опубликовано 29 апреля, 2005 · Жалоба Очень похоже на дребезг. Попробуй для проверки при входе в прерывание поставить какой-нибудь свободный порт в 1, а при выходе из прерывания вернуть в 0. Тогда сможешь по крайней мере посмотреть, где находишься. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgyBey 0 29 апреля, 2005 Опубликовано 29 апреля, 2005 · Жалоба Я так понял кнопка на внешнем прерывании. Вообще ИМХО не очень хорошо. Вопрос как оно среагирует на дребезг? <{POST_SNAPBACK}> Уточняю: до дребезга дело не доходит! Как только ввожу команду "sbi EIMSK,1" (компилирую и заливаю во флэш) - нормально работающий до этого (по программе) контроллер останавливается (где-то) - АЦП не меряет (рез-т 0), управляющий вывод порта В = 0 - оптрон управления включен "навсегда", ничто не моргает - где-то стоит :( Т.е. ввод разрешения на внешнее прерывание УЖЕ чего-то портит Кнопку нажмут раз в сто лет так стоит ли вводить ее опрос ? А так - прерывание принято - по дребезгу ли, по потенциалу земли-ли - пошла программа обработки - и пусть себе дребезжит :tongue: Или ? ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DimSun 0 29 апреля, 2005 Опубликовано 29 апреля, 2005 · Жалоба Уточняю: до дребезга дело не доходит! Как только ввожу команду <{POST_SNAPBACK}> Ну тогда уточняй дальше. Как кнопка висит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgyBey 0 29 апреля, 2005 Опубликовано 29 апреля, 2005 · Жалоба Уточняю: до дребезга дело не доходит! Как только ввожу команду <{POST_SNAPBACK}> Ну тогда уточняй дальше. Как кнопка висит? <{POST_SNAPBACK}> STK-500 :rolleyes: Если по изменению состояния кнопки: PCINT13 (PortC, вывод5 - как вход) проводочком к штатной кнопке, Галочку через Хрегистр на разрешение этого прерывания и ... на кнопку не реагирует (работает как работал). А если INT1 (sbi EIMSK,1) - до кнопок, как говорил, не доходит... :laugh: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgyBey 0 29 апреля, 2005 Опубликовано 29 апреля, 2005 · Жалоба Чудеса с решетом :cranky: Сегодня ТАК себя уже не ведет. Сегодня "съедает" установку внешнего прерывания (INT1), зато следующим шагом после установки общего разрешения прерываний (sei) (в любом месте программы) прерывается! (от прерывания отправляю в ловушку - выставляю светодиоды и зацикливаю). Впечатление - считает "внешним прерыванием" любое телодвижение :angry2: Не даром и в книжке "Применение мик-ов Атмел" про внешние прерывания ни гу-гу. И так - очевидные (для тех кто поборол) гадости внешних прерываний - они есть ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvs157 0 29 апреля, 2005 Опубликовано 29 апреля, 2005 · Жалоба Чудеса с решетом :cranky: Сегодня ТАК себя уже не ведет. Сегодня "съедает" установку внешнего прерывания (INT1), зато следующим шагом после установки общего разрешения прерываний (sei) (в любом месте программы) прерывается! (от прерывания отправляю в ловушку - выставляю светодиоды и зацикливаю). Впечатление - считает "внешним прерыванием" любое телодвижение :angry2: Не даром и в книжке "Применение мик-ов Атмел" про внешние прерывания ни гу-гу. И так - очевидные (для тех кто поборол) гадости внешних прерываний - они есть ? <{POST_SNAPBACK}> Провод на кнопку длинный? Осциллографом смотрели, что происходит на этой линии? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vet 0 29 апреля, 2005 Опубликовано 29 апреля, 2005 · Жалоба vvs157, никаких гадостей нет, прерывания включаются и работают без танцев с бубном. Пишем обработчик, ставим соответствующий вектор прерывания, в процедуре инициализации периферии: - выставляем условия возникновения внешних прерываний (уровень/фронт), - снимаем флаги сработки внешних прерываний (единичками), - поднимаем биты разрешения внешних прерываний, - разрешаем прерывания вообще (SEI). По проблеме: подтягивающий резистор на входе висит/включен? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgyBey 0 4 мая, 2005 Опубликовано 4 мая, 2005 · Жалоба vvs157, никаких гадостей нет, прерывания включаются и работают без танцев с бубном. "- снимаем флаги сработки внешних прерываний (единичками), " Вот про Это - поподробнее, плиииииз. А то как только разрешаю внешнее прерывание (при наличии общего), либо разрешаю общее (при установленном вненшнем) контроллер радостно срывается в обработку внешнего прерывания, хотя никто ничего не трогал!!! Ни про кнопки ни про провода ПОКА и речи нет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgyBey 0 4 мая, 2005 Опубликовано 4 мая, 2005 · Жалоба Проблема продолжает стоять ! При включении разрешения внешнего прерывания (при наличии общего разрешения) контроллер, вместо следующей команды, отправляется обрабатывать внешнее прерывание, хотя его (прерывания) нет, а его (контроллер) - никто не просит этого делать !!! Даже Студио это старательно симулирует :( Вопрос: ОТКУДА появляется запрос на обработку, если никто не просил !? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vet 0 4 мая, 2005 Опубликовано 4 мая, 2005 · Жалоба GeorgyBey, до настройки типа внешнего прерывания вполне может установиться флаг прерывания; пример - после сброса ISCn1:0=00 (низкий уровень), на ноге - 0, флаг установился, и будет стоять после настройки, хотя, согласно ей, никакого прерывания быть не должно. После разрешения прерываний - имеем описанную Вами ситуацию. Поэтому между настройкой и разрешением прерываний не помешает сбросить флаги INTFn. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maxim 0 5 мая, 2005 Опубликовано 5 мая, 2005 · Жалоба У меня с 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-ой надо сделать тоже самое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgyBey 0 5 мая, 2005 Опубликовано 5 мая, 2005 · Жалоба Спасибо "vet" и "Maxim". Для всех, кто еще не сталкивался :a14: : Оказалось, что в железе все было нормально. ДЛЯ СИМУЛЯТОРА нужно было вручную устанавливать "pin" порта в "1", иначе он (симулятор) считал "0" на ножке "наступившим событием". Дребезг сказывается когда прерывание определяется по фронту "прерывающего" импульса. Фронт считается имеющимся, если на момент прихода внутреннего синхроимпульса на ножке "1после0"(или наоборот, а при предыдущем НЕ было!). Если контакт дребезжит т.е. подвижный элемент контакта подпрыгивает на неподвижном, то в момент прихода фронта синхроимпульса собственно контакта может и не быть :( - событие пропущено ! Всем спасибо, тему можно считать закрытой :cheers: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться