|
Опрос клавиатуры на С, Как написать компактный и "красивый" код? |
|
|
|
 |
Ответов
|
Jun 23 2018, 19:56
|
Профессионал
    
Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364

|
Ну развели... Проблема дребезга полностью освещена даже в Вики: https://ru.wikipedia.org/wiki/%D0%94%D1%80%...%82%D0%BE%D0%B2В частности программные методы борьбы: Цитата При программном формировании очищенного от дребезга контакта сигнала наибольшее распространение получили три из них:
1.Путём установки временной задержки — программа, обнаружив замкнутое состояния контакта, игнорирует его состояние на время, заведомо большее длительности дребезга, и спустя это время снова проверяет состояние контакта. Если после этого времени состояние контакта замкнутое, то соответствующая переменная меняет значение. 2.Методом подсчёта числа совпадающих значений сигнала замкнутости — программа многократно считывает состояние контакта, и, если последовало определённое количество подтверждений замкнутости в течение заданного промежутка времени (определяется экспериментально и выбирается в пределах от 10 до 100), контакт считается устойчиво замкнутым. 3.Методом подсчёта времени устойчивого состояния — программа в течение заданного времени многократно считывает состояние контакта. Если в течение заданного времени не обнаружено ни одного изменения состояния на противоположное, то контакт считается устойчиво замкнутым. В противном случае, если было обнаружено изменение состояния в течение заданного времени, то подсчёт времени прерывается (или продолжается, но с установкой флага или подсчётом количества изменений состояния для оценки физического состояния механических контактов) и контакт считается разомкнутым или с неустойчивым состоянием (если такая информация используется в программе). Время дребезга для контактов клавиатуры до нескольких миллисекунд (до 5). Forger по сути предложил метод №1 суть которого сравнить 2 измерения с временным промежутком времени завершения переходного процесса на контакте. Кстати, не обязательно постоянно опрашивать. Если есть необходимость глубоко дрыхнуть и просыпаться по сигналу нажатия, то никто не мешает в прерывании которое разбудило запустить таймер на те самые несколько мс в котором и принять решение чего это такого только что было... ЗЫ. На самом деле есть еще более тупой метод борьбы с дребезгом - RC-цепочка после контакта плюс триггер Шмитта который есть на входах многих современных контроллеров...
|
|
|
|
|
Jun 23 2018, 21:07
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (ArtemKAD @ Jun 23 2018, 22:56)  Forger по сути предложил метод №1 суть которого сравнить 2 измерения с временным промежутком времени завершения переходного процесса на контакте. Нет, у него другой метод, которым и я пользуюсь. Суть его в том, что от клавиатуры чисто электрически не может прийти ложный сигнал о нажатии (провода до кнопок короткие, подтяжки достаточно низкоомные). И если такой сигнал пришел - кнопку точно нажали. А проверять факт отпускания и/или повторного нажатия нужно не раньше, чем через время, заведомо большее времени дребезга, но меньшее времени возможного повторного нажатия. Если после нажатия считано разомкнутое состояние кнопки - значит ее или начали отпускать (попали в дребезг) или уже отпутили. Если в момент отпускания мы попали на дребезг и считали замкнутое сотояние кнопки - никакого криминала, в следующем цикле опроса считаем разомкнутое сотояние уже после окончания дребезга. Если кнопка дребезжит дольше 50 мс - ей место в помойке, поэтому 50 мс - вполне разумный компромисс между временем дребезга и временем реакции на изменение. А повторно нажать кнопку быстрее, чем через 100 мс не сможет даже неадекватный оператор (помешанных на играх опустим). QUOTE (ArtemKAD @ Jun 23 2018, 22:56)  ЗЫ. На самом деле есть еще более тупой метод борьбы с дребезгом - RC-цепочка после контакта плюс триггер Шмитта который есть на входах многих современных контроллеров... С натяжкой подходит для одиночных кнопок и не годится для матричных клавиатур.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 24 2018, 06:52
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(ArtemKAD @ Jun 24 2018, 02:20)  Я б с таким подходом в автомобиле ноги бы точно протянул. Разве что провода действительно короткие. В автомобилях подтяжки ставят достаточно низкоомные. В одном из проектов для опроса такой кнопки мне пришлось ставить реально низкоомные резисторы, через которые при нажатии кнопки шел довольно немалый ток. Чтобы не спалить эти резисторы, питание на них подавалось кратковременно (около 1мс) и непосредственно перед опросом кнопок. Опрос - периодический (50мс). С "классической" постоянной подтяжкой (около 1мА) эти кнопки, которые находятся снаружи кабины камаза, через какое-то время эксплуатации переставали работать - постепенно окислялись контакты. Но относительно большой ток подтяжки (около 0,15 А), видать, "выжигал" тонкий слой окисла и кнопки работали как ни в чем не бывало. Глянул конкретные значения: 150 Ом (24В). А резисторы всего лишь в корпусе 1206. Но, если бы оставил постоянную подтяжку, то пришлось бы ставить 5..10 Вт резисторы. Один "минус" такой схемы - нужен доп. транзистор для программного управления подтяжкой.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
Сообщений в этой теме
Make_Pic Опрос клавиатуры на С Jun 23 2018, 05:17 Forger Цитата(Make_Pic @ Jun 23 2018, 08:17) Опр... Jun 23 2018, 06:38 Make_Pic Цитата(Forger @ Jun 23 2018, 09:38) ...
Д... Jun 23 2018, 07:20  Forger Цитата(Make_Pic @ Jun 23 2018, 10:20) Я н... Jun 23 2018, 08:05  AlexandrY RE: Опрос клавиатуры на С Jun 23 2018, 13:40   Forger ЦитатаB такая генерация спасает от рутины громозди... Jun 23 2018, 13:54    AlexandrY Цитата(Forger @ Jun 23 2018, 16:54) Отлич... Jun 23 2018, 14:09     Forger Цитата(AlexandrY @ Jun 23 2018, 17:09) Во... Jun 23 2018, 14:13      AlexandrY Цитата(Forger @ Jun 23 2018, 17:13) Друго... Jun 23 2018, 14:22       Forger Цитата(AlexandrY @ Jun 23 2018, 17:22) Та... Jun 23 2018, 14:29        AlexandrY Цитата(Forger @ Jun 23 2018, 17:29) Какие... Jun 23 2018, 14:43         Forger Цитата(AlexandrY @ Jun 23 2018, 17:43) Че... Jun 23 2018, 14:54   x893 Цитата(AlexandrY @ Jun 23 2018, 16:40) ..... Jun 23 2018, 15:01    Сергей Борщ QUOTE (x893 @ Jun 23 2018, 18:01) Но это ... Jun 23 2018, 16:01     AlexandrY Цитата(Сергей Борщ @ Jun 23 2018, 19:01) ... Jun 23 2018, 17:25 x893 Цитата(Forger @ Jun 23 2018, 09:38) ...
д... Jun 23 2018, 08:03 iliusmaster Обычно, чтобы ничего постояно не опрашивать, все с... Jun 23 2018, 17:17 Forger Цитата(iliusmaster @ Jun 23 2018, 20:17) ... Jun 23 2018, 18:03 k155la3 Цитата(iliusmaster @ Jun 23 2018, 20:17) ... Jun 24 2018, 08:23 Forger Цитата(ArtemKAD @ Jun 23 2018, 22:56) Ну ... Jun 23 2018, 20:43  Forger Цитата(Сергей Борщ @ Jun 24 2018, 00:07) ... Jun 23 2018, 21:17 ArtemKAD Импульсную подтяжку еще и на кнопку - знаете вы то... Jun 24 2018, 07:23 Forger Цитата(ArtemKAD @ Jun 24 2018, 10:23) Имп... Jun 24 2018, 08:10  ArtemKAD Цитата(Forger @ Jun 24 2018, 11:10) Извра... Jun 25 2018, 22:31   AlexandrY Цитата(ArtemKAD @ Jun 26 2018, 01:31) Кон... Jun 26 2018, 05:17    Forger Цитата(AlexandrY @ Jun 26 2018, 08:17) Чт... Jun 26 2018, 05:25    iliusmaster Цитата(AlexandrY @ Jun 26 2018, 08:17) Чт... Jun 26 2018, 05:30     =L.A.= Цитата(iliusmaster @ Jun 26 2018, 08:30) ... Jun 26 2018, 05:44      haker_fox QUOTE (=L.A.= @ Jun 26 2018, 13:44) Писан... Jun 26 2018, 06:32       Forger Имхо, физика процесса тут не очень однозначная: ра... Jun 26 2018, 06:52     AlexandrY Цитата(iliusmaster @ Jun 26 2018, 08:30) ... Jun 26 2018, 07:42      Forger Цитата(AlexandrY @ Jun 26 2018, 10:42) По... Jun 26 2018, 07:49      iliusmaster Цитата(AlexandrY @ Jun 26 2018, 10:42) А ... Jun 28 2018, 15:55       AlexandrY Цитата(iliusmaster @ Jun 28 2018, 18:55) ... Jun 28 2018, 19:40        Herz Цитата(AlexandrY @ Jun 28 2018, 22:40) Ну... Jun 28 2018, 19:49         AlexandrY Цитата(Herz @ Jun 28 2018, 22:49) Коллега... Jun 28 2018, 20:27          Forger Вот еще немного любопытной информации про электрич... Jun 28 2018, 20:28           AlexandrY Цитата(Forger @ Jun 28 2018, 23:28) Вот е... Jun 29 2018, 04:36            Forger Цитата(AlexandrY @ Jun 29 2018, 07:36) У ... Jun 29 2018, 05:08             AlexandrY Цитата(Forger @ Jun 29 2018, 08:08) И не ... Jun 29 2018, 05:39              Forger Цитата(AlexandrY @ Jun 29 2018, 08:39) Ищ... Jun 29 2018, 05:50               AlexandrY Цитата(Forger @ Jun 29 2018, 08:50) По-хо... Jun 29 2018, 06:40                Forger Цитата(AlexandrY @ Jun 29 2018, 09:40) От... Jun 29 2018, 06:51                 AlexandrY Цитата(Forger @ Jun 29 2018, 09:51) Пруфы... Jun 29 2018, 06:56                  Forger Цитата(AlexandrY)Также вам предлагаю помолчать отн... Jun 29 2018, 07:05          rx3apf Цитата(AlexandrY @ Jun 28 2018, 23:27) То... Jun 28 2018, 20:41           AlexandrY Цитата(rx3apf @ Jun 28 2018, 23:41) Все б... Jun 28 2018, 20:43          Herz Цитата(AlexandrY @ Jun 28 2018, 23:27) С ... Jun 28 2018, 23:13        rx3apf Цитата(AlexandrY @ Jun 28 2018, 22:40) (д... Jun 28 2018, 20:11    ArtemKAD Цитата(AlexandrY @ Jun 26 2018, 08:17) Чт... Jun 28 2018, 14:42 Herz Цитата(ArtemKAD @ Jun 24 2018, 10:23) Имп... Jun 24 2018, 09:50  Forger Цитата(Herz @ Jun 24 2018, 12:50) Греть р... Jun 24 2018, 10:03   Herz Цитата(Forger @ Jun 24 2018, 13:03) Напри... Jun 25 2018, 10:02    Forger Цитата(Herz @ Jun 25 2018, 13:02) А зачем... Jun 25 2018, 12:13     AlexandrY Цитата(Forger @ Jun 25 2018, 15:13) Вы ве... Jun 25 2018, 12:24      Forger Цитата(AlexandrY @ Jun 25 2018, 15:24) А ... Jun 25 2018, 12:32 iliusmaster У музыкантов нужно точно отслеживать длительность ... Jun 24 2018, 09:30 Forger Цитата(iliusmaster @ Jun 24 2018, 12:30) ... Jun 24 2018, 09:38 k155la3 Цитата(iliusmaster @ Jun 24 2018, 12:30) ... Jun 24 2018, 09:57 iliusmaster Ну раз музыканты это специфика, то вот еще один пр... Jun 24 2018, 11:11 Forger Цитата(iliusmaster @ Jun 24 2018, 14:11) ... Jun 24 2018, 11:21 k155la3 Цитата(iliusmaster @ Jun 24 2018, 14:11) ... Jun 24 2018, 13:07  Make_Pic Цитата(k155la3 @ Jun 24 2018, 17:07) Мой ... Jun 25 2018, 02:06   AlexandrY Цитата(Make_Pic @ Jun 25 2018, 05:06) Тем... Jun 25 2018, 08:49   k155la3 Цитата(Make_Pic @ Jun 25 2018, 05:06) Тем... Jun 25 2018, 09:09    AlexandrY Цитата(k155la3 @ Jun 25 2018, 12:09) Вот ... Jun 25 2018, 10:35   arhiv6 Цитата(Make_Pic @ Jun 25 2018, 09:06) Тем... Jun 27 2018, 05:34 k155la3 Цитата(Make_Pic @ Jun 23 2018, 08:17) . .... Jun 26 2018, 08:41 Jenya7 В последних проектах юзаем ADP5589. Изначально я б... Jun 26 2018, 14:35 Forger Цитата(Jenya7 @ Jun 26 2018, 17:35) В пос... Jun 26 2018, 15:24  haker_fox QUOTE (Forger @ Jun 26 2018, 23:24) Имхо,... Jun 27 2018, 02:32   Forger Цитата(haker_fox @ Jun 27 2018, 05:32) Ну... Jun 27 2018, 04:35  k155la3 Цитата(Forger @ Jun 26 2018, 18:24) Код в... Jun 27 2018, 06:36 AlexandrY Цитата(Jenya7 @ Jun 26 2018, 17:35) В пос... Jun 27 2018, 05:08 haker_fox QUOTE (Forger @ Jun 27 2018, 12:35) Спорн... Jun 27 2018, 07:22 rx3apf Напряжение, очевидно, нужно чтобы пробить пленку. ... Jun 28 2018, 15:59 Forger Цитата(iliusmaster)
Цитата(rx3apf)
Вот: https://el... Jun 28 2018, 16:04
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|