Показать сообщение отдельно
Старый 17.03.2016, 12:09   #746
Trantor
Старший Пользователь
 
Регистрация: 15.02.2013
Город: Москва
Регион: 77, 97, 99, 177
Машина: x-trail T30
Сообщений: 400
Trantor is on a distinguished road
Post

Если путаются соседние кнопки

На входе ардуино в схеме Берсенева стоит делитель из резистора 3200 Ом (3,2К)
и резисторов кнопок 100,100+100,100+100+100 и.т.д. Ом.
Значение потенциала для аналогового входа для первой кнопки - 5В *(100/3200)=0,16В.

Напряжение меряется 10-битным АЦП, 5В соответствует значению 1023 в памяти контроллера, 0В - 0, всего 1024 градации аналогового сигнала потенциала.
В коде у нас получается для первой кнопки значение (0,16/5)*1024=34.

Для второй кнопки - 5В *(200/3200)=0,33В
в коде (0,33/5)*1024=68.

Итак, разница по коду у схемы Берсенева между значениями соседних кнопок - 34 единицы, запас на вариацию сопротивления кнопки (см ниже) - 3 единицы.
Это вполне достаточно для устойчивой селекции разных кнопок. Если у вас номиналы резисторов иные - нужно проверить по данным формулам разницу по коду
между соседними кнопками и если она меньше - можно попробовать уменьшить сопротивление резистора со значением 3,2К, но не менее, чем до 2К, это даст
увеличение разницы в полтора раза.

Если неустойчиво читаются кнопки (через раз):
Скорее всего вариация аналогового сигнала у Вас превышает заложенную по умолчанию. По-хорошем надо с этим бороться стабилизацией 5В, качественными
соединениями, экранированием проводов.

Но есть и другой, "ленивый" путь.

В программе Берсенева есть такой параметр
unsigned int res_key_delta = 3;
Как я понял, это зона нечувствительности, в которой может "плавать" измеренное значение аналогового сигнала при сравнении с запомненным значением. Можно попробовать ее аккуратно увеличить. При этом важно не превысить половину минимальной разницы между соседними сигналами кнопок в коде (описано выше).
Значительное увеличение данного параметра может привести к путанице с соседними кнопками. В общем, аккуратно увеличивать, пока проблемы не исчезнуть, реально может помочь увеличение на 2-3 единицы.
Например так:
unsigned int res_key_delta = 5;
__________________
http://www.pccar.ru/showthread.php?t=18648 мой проект.
Icar DS , Cityguide,bGEO, Семь дорог.
I3 3220T, 4Gb, W10х32. SSD 128Gb
Trantor вне форума   Ответить с цитированием