Выше я делал небольшой обзор вариантов подключения нескольких кнопок к одному аналоговому порту МК.
Там все кнопки отдельные.
А на днях я натолкнулся на вариант подключения к одному аналоговому входу почти целой матрицы. Только не помню где...
Есть некоторая нелинейность, но работает. Плохо только, что матрица кнопок 4х4 получается урезаной. Можно подключить и полную матрицу 4х4, но появляется нелинейность.
На графике ниже, показывающем зависимость выходного напряжения от номера нажатой кнопки видно, что если подключать матрицу, выбросив портящие её резисторы R4, R5 и R6, то нелинейность становится ещё хуже. Но всё равно вариант рабочий.
Помня, что запитка подобных делителей не источником напряжения, а источником тока хорошо линеаризует характеристику, пересчитал резисторы и получил отличный результат.
График ниже показывает, что линейность отличная:
Изменения:
Резисторы R1,R2,R3 на 4 КОм.
Резисторы R4,R5,R6 заменены перемычками.
Резисторы R7,R8,R9,R10 на 1 КОм.
Схема запитывается любым источником тока, подключенным к точке VCC. С этой же точки снимается напряжение и подаётся на аналоговый вход МК.
При указанных значениях резисторов и токе 0.3мА выходное напряжение меняется от 0,3В до 4,8В с шагом 0,3В.
Высокая линейность и большой шаг позволяют сделать вывод, что по такому же принципу к одному входу АЦП можно подключить матрицу на большее число кнопок.
Отправлено спустя 12 минут 31 секунду:
Вот пример использования стандартной матричной клавиатуры 4х4 в пульте управления лабораторного БП:
Справа есть табличка, в которой показана зависимость выходного напряжения схемы от номера нажатой кнопки.
Весь диапазон напряжений от 0,3В до 4,8В.
Если на выходе напряжение равно напряжению питания 5В, значит ни одна из кнопок не нажата.
Так как минимальное значение выходного напряжения равно 0,3В, то использована ещё и кнопка энкодера, при нажатии которой выходное напряжение становится равно нулю.
Отправлено спустя 14 минут 38 секунд:
Мне сказали, что увеличение сопротивления контакта в кнопках приводит к ложным командам. А сопротивление окислившихся контактов кнопки может достигать сотен ом.
При указанных номиналах и токе 0,3мА получаем шаг 0,3В. Кнопка может иметь либо нулевое сопротивление (в идеале), либо повышенное.
По этому примем допустимое увеличение напряжения при увеличении сопротивления кнопки, например, половину шкалы - 0...+0,15В. На это же значение настраивается и логика отработки нажатий в программе.
То есть, кнопка считается нажатой, если соответствующее ей напряжение лежит в диапазоне 0,3...0,45В.
От 0,45В до следующей кнопки, с напряжением на 0,3В больше, оставляем защитный промежуток. Следующая кнопка бужет отрабатываться только при напряжении 0,6...0,75В и т.д.
При токе 0,3мА получается, что сопротивление кнопки не должно превышать 0,15В/0,3мА=0,5КОм.
То есть, схема будет работоспособна при повышенном до 500Ом сопротивлении кнопки. С учётом защитного промежутка ещё больше.
Но если мало, то ни чего не мешает увеличить допустимый порог сопротивления кнопки, увеличением сопротивлений резисторов схемы и уменьшением тока.
Например, при увеличении сопротивления резисторов в 10 раз (4КОм > 40КОм, 1КОм > 10КОм) и уменьшении тока в 10 раз (0,3мА > 0,03мА) получаем такой же диапазон выходных напряжений 0,3В...4,8В при прежнем шаге 0,3В, но с допустимым увеличением сопротивления копок до 5КОм. То есть, тоже в 10 раз.
При этом правда повышается чувствительность схемы к утечкам и нужно будет принимать меры - например, покрывать плату сдеталями лаком...
В общем, компромисс можно найти.
Кстати, при таком приличном допуске, похоже, нет необходимости даже в применении прецизионных резисторов в схеме. Допуска 5% вполне хватит. Это уменьшит допустимый порог сопротивления кнопки с 500Ом до 450Ом в худшем случае...