Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 04.10.2011, 21:01  
begun
Гражданин KAZUS.RU
 
Регистрация: 18.07.2006
Сообщений: 858
Сказал спасибо: 228
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
begun на пути к лучшему
По умолчанию Как устранить дребезг на вход INT0

Здравствуйте друзья!
На вход INT0 стоит кнопка при нажатии которого должно отработаться
однократная оиерация ,однако из за дребезга контакта операция отрабатывается многократно.
введение задержки не помогает , так как прерывание запоминается и повторяется.После исчерпания своих возможностей решил очередной раз обратиться к опытным товарищам за помошь
Я делаю так:

interrupt [EXT_INT0] void ext_int0_isr(void)
{
delay_ms(20);
putchar (ox47);

}
и в терминале ,при отправлении через УАРТ, вместо одного появляется
2-3-4 символа.
В непрерывном цикле это делается без проблем ,однако тут загвостка.
Может опытным товаришам это в улыбку ,но что делать ,одним легко удается все, другим труднее.
Буду благодарен за любой совет.
Реклама:
begun вне форума  
Непрочитано 04.10.2011, 21:15  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: как устранить дребезг на вход INT0

паузы в прерываниях запрещены!
прерывание должно выполниться и снять флаг INTCON.INT0IE, чтобы выключить само себя. Апосля основная программа, отработав сигнал с кнопки, должно включить это прерывание снова.
Easyrider83 вне форума  
Непрочитано 04.10.2011, 21:16  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: как устранить дребезг на вход INT0

Вешать кнопки на ИНТы, как ДЕЛАЙить в прерывании - моветон...
Меняйте подход к задаче...
st_1 вне форума  
Непрочитано 04.10.2011, 21:22  
lsa
Почётный гражданин KAZUS.RU
 
Аватар для lsa
 
Регистрация: 22.06.2004
Адрес: Харьков
Сообщений: 1,488
Сказал спасибо: 3,207
Сказали Спасибо 3,010 раз(а) в 686 сообщении(ях)
lsa на пути к лучшему
По умолчанию Re: как устранить дребезг на вход INT0

Поставьте подтяжку на +питания 2-5 кОм. Поставьте кондесатор параллельно кнопке 0,1мкФ. Настройте прерывание INT по спадающему фронту. В обработке не делайте задержку, просто выставляйте флаг события (было нажатие). В основном цикле обрабатывайте этот флаг (отправляйте символ) и сбрасывайте флаг.
Как-то так.
lsa вне форума  
Непрочитано 04.10.2011, 21:29  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,547
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: как устранить дребезг на вход INT0

В прерывании установка флага воздействия на кнопку, в основном цикле обработка антидребезга и формирование сигнала нажатия. Либо вообще отказаться от прерываний по кнопке, и обрабатывать нажатие в основном цикле, хотя это уже зависит от конкретной задачи (энергопотребление и т.п.).
AJScorp вне форума  
Непрочитано 04.10.2011, 21:35  
lsa
Почётный гражданин KAZUS.RU
 
Аватар для lsa
 
Регистрация: 22.06.2004
Адрес: Харьков
Сообщений: 1,488
Сказал спасибо: 3,207
Сказали Спасибо 3,010 раз(а) в 686 сообщении(ях)
lsa на пути к лучшему
По умолчанию Re: как устранить дребезг на вход INT0

Сообщение от Easyrider83 Посмотреть сообщение
паузы в прерываниях запрещены!
Не запрещены - если прерывание от кнопки одно (нет других прерываний) и микроконтроллер не PIC.
lsa вне форума  
Непрочитано 04.10.2011, 21:38  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: как устранить дребезг на вход INT0

Сообщение от lsa Посмотреть сообщение
Не запрещены - если прерывание от кнопки одно (нет других прерываний) и микроконтроллер не PIC.
Я... вот только что... взял и запретил... НИЗЗЯЯ!!!
st_1 вне форума  
Непрочитано 04.10.2011, 21:41  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: как устранить дребезг на вход INT0

Сообщение от lsa Посмотреть сообщение
Поставьте подтяжку на +питания 2-5 кОм. Поставьте кондесатор параллельно кнопке 0,1мкФ.
Порочная практика... Затяжка фронтов... не всё кнопки проглатывают разряд ёмкости... некоторые начинают болеть... и даже сдыхать...
st_1 вне форума  
Непрочитано 04.10.2011, 22:08  
begun
Гражданин KAZUS.RU
 
Регистрация: 18.07.2006
Сообщений: 858
Сказал спасибо: 228
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
begun на пути к лучшему
По умолчанию Re: как устранить дребезг на вход INT0

друзья ,Благодарю за оперативные советы ,однако предложенные варианты последующей обработки нажатия в основном цикле
вызивают задержку выполнения ,если в это время программа находится на другом месте.
Мне же нужно мгновенное выполнение, т.е. остановка основного цикла при нажатии и незамедлительное выполнение.
Значит получается, что в самом прерывании трудно это осуществить?
begun вне форума  
Непрочитано 04.10.2011, 22:24  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: как устранить дребезг на вход INT0

Сообщение от begun Посмотреть сообщение
Значит получается, что в самом прерывании трудно это осуществить?
Все просто - по прерыванию INT0 поднимаете флаг какой-нибудь битовой переменной и выключаете прерывание INT0. Потом, когда будет свободное время, в основном цикле этот флаг обработаете и опустите.
Думаю, даже ядовитый Первый со мной согласится.
Easyrider83 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эрудиция и смекалка slavar1 Отвлекитесь, эмбеддеры! 12765 06.04.2024 20:45
[Решено] Так, рассказик :)) Я долго ржал :)) DK Отвлекитесь, эмбеддеры! 7 31.08.2007 22:33
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49
[Решено] Всем эмбеддерам посвящается... Decan Отвлекитесь, эмбеддеры! 0 24.10.2005 14:43


Часовой пояс GMT +4, время: 01:26.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot