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

 
 
> Опрос клавиатуры на С, Как написать компактный и "красивый" код?
Make_Pic
сообщение Jun 23 2018, 05:17
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Опрос клавиатуры на С -> Как написать компактный и "красивый" код?
Дайте pls примеры опроса матрицы клавиш на С (C++ не надо).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ArtemKAD
сообщение Jun 23 2018, 19:56
Сообщение #2


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

Группа: Свой
Сообщений: 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-цепочка после контакта плюс триггер Шмитта который есть на входах многих современных контроллеров...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 23 2018, 21:07
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Jun 23 2018, 23:20
Сообщение #4


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

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата(Сергей Борщ @ Jun 24 2018, 00:07) *
Суть его в том, что от клавиатуры чисто электрически не может прийти ложный сигнал о нажатии (провода до кнопок короткие, подтяжки достаточно низкоомные). И если такой сигнал пришел - кнопку точно нажали.


Я б с таким подходом в автомобиле ноги бы точно протянул. Разве что провода действительно короткие.
Go to the top of the page
 
+Quote Post
Forger
сообщение Jun 24 2018, 06:52
Сообщение #5


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

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



Цитата(ArtemKAD @ Jun 24 2018, 02:20) *
Я б с таким подходом в автомобиле ноги бы точно протянул. Разве что провода действительно короткие.

В автомобилях подтяжки ставят достаточно низкоомные.
В одном из проектов для опроса такой кнопки мне пришлось ставить реально низкоомные резисторы, через которые при нажатии кнопки шел довольно немалый ток.
Чтобы не спалить эти резисторы, питание на них подавалось кратковременно (около 1мс) и непосредственно перед опросом кнопок. Опрос - периодический (50мс).

С "классической" постоянной подтяжкой (около 1мА) эти кнопки, которые находятся снаружи кабины камаза, через какое-то время эксплуатации переставали работать - постепенно окислялись контакты.
Но относительно большой ток подтяжки (около 0,15 А), видать, "выжигал" тонкий слой окисла и кнопки работали как ни в чем не бывало.

Глянул конкретные значения: 150 Ом (24В). А резисторы всего лишь в корпусе 1206.
Но, если бы оставил постоянную подтяжку, то пришлось бы ставить 5..10 Вт резисторы.

Один "минус" такой схемы - нужен доп. транзистор для программного управления подтяжкой.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 18:34
Рейтинг@Mail.ru


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