реклама на сайте
подробности

 
 
> Прерывания по кнопке, Возникновение прерывания при нажатии на кнопку
aBoomest
сообщение Feb 1 2014, 07:54
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 167
Регистрация: 24-12-08
Из: Россия
Пользователь №: 42 714



Здравствуйте.
Возникло несколько вопросов.
В статье от TI
http://processors.wiki.ti.com/index.php/MS...hPad_PushButton
есть формула по расчету емкости конденсатора в зависимости от подтягивающего резистора и времени дребезга.
Как определить время дребезга. Производители (по моим расспросам) не особо знают это значение, а уж продавцы кнопочек и подавно.
Откуда берется коэффициент 0.69?
Как програмно можно избавиться от дребезга?

В программе делаю прерывание от кнопки (схема и диаграмма сигналов приведена на рисунке)


Бит P1IES устанавливаю в ноль (сбрасываю), т.е. прерывание возникает при отпускании кнопки (согласно схемы).

Картинка с осциллографа (нарастает не быстро т.к. есть параллельный кондерчик)
Работает нормально.

Однако в 20-30% нажатий прерывание так же возникает и при 1->0 переходе (импульс красного цвета на первой схеме)
Плюс картинка с осциллографа


Что это может быть?

Сообщение отредактировал aBoomest - Feb 2 2014, 07:31


--------------------
C уважением!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
Mihey_K
сообщение Feb 1 2014, 12:15
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 156
Регистрация: 27-09-06
Из: Irkutsk
Пользователь №: 20 747



Время дребезга для кнопки вряд ли какой производитель Вам скажет. Это не тумблер и не реле, где контакты доводятся. Известен лишь порядок - десятки мс. Продолжительность дребезга напрямую зависит от скорости, силы нажатия и степени износа механики. Для расчета используется известная формула тау RC-цепи. Полное время успокоения от дребезга t = 5 * тау. Вот схема под эту формулу.

П.Хоровиц, У.Хилл - Искусство схемотехники, глава 9.04/Дребезг контактов механического ключа.
Эта схема гарантированно защитит от дребезга, в отличие от схемы в статье, о чем автор и написал. А коэффициент 0.69 видимо автор получил эмпирически с учетов емкости порта МК, чтобы формула точнее вычисляла.
На последней картинке не понял, что изображено - что такое красное, что синее?
Программная обработка дребезга основана на чтении состоянии порта через промежутки времени - например, после срабатывания прерывания делаем паузу на время дребезга, далее читаем порт 10 раз подряд через 1 мс., если все значение = 1, значит кнопка гарантировано нажата.
Лично всегда делаю защиту от дребезга как на схеме и никаких проблем.

Цитата
Что это может быть?

Если речь о красном выбросе на осциллограмме, то это похоже на запись 1 в порт.

Сообщение отредактировал Mihey_K - Feb 1 2014, 12:35


--------------------
Блог о разработке на CC430, SIM900, GPS, ARM и не только...
Go to the top of the page
 
+Quote Post
aBoomest
сообщение Feb 2 2014, 07:39
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 167
Регистрация: 24-12-08
Из: Россия
Пользователь №: 42 714



Спасибо за ответ.
Подредактировал 1-й пост, чтоб было удобнее.

Получается так что при нажатии кнопки время разряда будет С2R2, а при отпускании время заряда (R1+R2)C2 ?

На счет картинок.
На первой картинке схематично показано то, что на второй и третей картинках подтверждено осциллограммами.
Прерывание у меня должно возникать при отпускании кнопки т.к. P1IES &= ~MyButtonBit. Это первая картинка синенький импульс и вторая картинка - осциллограмма. Хорошо работает.

Но в 20-30% нажатий прерывание возникает ТАКЖЕ и в момент нажатия кнопки (однако этого не должно быть). Это первая картинка - красный импульс (он появляется не всегда), а так же подтверждение этому третья картинка - осциллограмма.

Что это может быть?

Сообщение отредактировал aBoomest - Feb 3 2014, 04:21


--------------------
C уважением!
Go to the top of the page
 
+Quote Post
Mihey_K
сообщение Feb 2 2014, 13:41
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 156
Регистрация: 27-09-06
Из: Irkutsk
Пользователь №: 20 747



Сделайте схему первую, что по земле, с таким же номиналами. Там время разряда 5 * R2 * C2, время заряда 5 * (R1 + R2) * C2. Если не поможет, то код в студию.


--------------------
Блог о разработке на CC430, SIM900, GPS, ARM и не только...
Go to the top of the page
 
+Quote Post
aBoomest
сообщение Feb 3 2014, 17:50
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 167
Регистрация: 24-12-08
Из: Россия
Пользователь №: 42 714



Спасибо за советы.
Получилось так.

Работает вроде бы стабильно: никаких лишних импульсов пока не наблюдал. Я конечно раньше в кнопки осциллографом не тыкался (не приходилось), но как-то кажется что фронты очень уж пологие. Или я преувеличиваю?


--------------------
C уважением!
Go to the top of the page
 
+Quote Post
V_G
сообщение Feb 3 2014, 23:44
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Я делаю без конденсаторов, чисто программно.
По первому прерыванию от кнопки все последующие прерывания запрещаются. На время дребезга (с запасом) заводится таймаут (часто - по прерыванию от таймера, но можно сделать по-разному). По завершении таймаута сбрасываются пришедшие запросы на прерывания от кнопок (дребезг), считывается актуальное состояние кнопок и вновь разрешаются прерывания от них.
Go to the top of the page
 
+Quote Post
aBoomest
сообщение Feb 4 2014, 08:02
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 167
Регистрация: 24-12-08
Из: Россия
Пользователь №: 42 714



А можно вместо 100К поставить например 47К, чтоб чуть уменьшить постоянную времени, или это не желательно (не рекомендовано)?


--------------------
C уважением!
Go to the top of the page
 
+Quote Post
Mihey_K
сообщение Feb 5 2014, 01:59
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 156
Регистрация: 27-09-06
Из: Irkutsk
Пользователь №: 20 747



Цитата
А можно вместо 100К поставить например 47К, чтоб чуть уменьшить постоянную времени, или это не желательно (не рекомендовано)?
Можете как угодно в любую сторону менять номиналы R и/или C для получения требуемой постоянной времени. На 47k получите ~20 мс.


--------------------
Блог о разработке на CC430, SIM900, GPS, ARM и не только...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th August 2025 - 11:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.02001 секунд с 7
ELECTRONIX ©2004-2016