воскресенье, 5 августа 2012 г.

Доработка матричной клавиатуры.



Матричные клавиатуры обычно состоят из проводов образующих строки, проводов образующих столбцы и кнопок каждая из которых соединяет какой либо один провод-строку с каким либо одним проводом-столбцом (см. пример на рис.1). При нажатии на кнопку соответствующие ей провод-строка и провод-столбец замыкаются друг на друга. Матричная клавиатура являются средством ввода информации, информация полученная с матричной клавиатуры может быть собрана и обработана микроконтроллером (если возможности микроконтроллера позволяют это сделать). Преимущество матричной клавиатуры перед отдельными кнопками, подключенными каждая к отдельному выводу микроконтроллера, в том что матричная клавиатура позволяет передать больше информации при использовании меньшего (по сравнению с просто кнопками) числа выводов микроконтроллера. Определять нажатую кнопку в матричной клавиатуре можно например подавая, с выводов микроконтроллера, последовательно на каждую строку (или столбец) единицу (или ноль)(имеется в виду напряжение уровня логической единицы или нуля) и считывая со столбцов (или строк соответственно) уровни напряжения (каждый из которых могут быть единицей или нулем (но может быть и не всегда)) тем же микроконтроллером. У матричной клавиатуры присутствует недостаток - не все комбинации нажатых кнопок могут быть определены описанным выше методом (и возможно большинством остальных), пример этого недостатка иллюстрируется на рисунке1:
Рисунок 1 - Недостаток матричной клавиатуры

Рисунок 2 - Матричная клавиатура с диодами


Нажатые кнопки могут быть определены точно так как диоды не пропускают единицу в соседние строки. Если клавиатуру нельзя разобрать и вставить последовательно с кнопками диоды то эту клавиатуру необходимо дорабатывать используя её внешние выводы. В таком случае определять все комбинации нажатых кнопок вряд ли получиться (хотя можно попробовать). Матричная клавиатура предназначается для определения нажатия одной кнопки если нажато несколько кнопок то за нажатую можно принять ту которая была нажата первой. Для решения данной проблемы может быть применена схема на рисунке 3 (или реализующая ту же функцию схема на рисунке 4):



Если на всех входах X1, X2 и X3 данной схемы (см. рисунок 3) нули то на всех выходах Y1, Y2 и Y3 нули так как ноль хотя бы на одном из входов элемента И (&) дает ноль на выходе этого элемента. Если на один из входов (например X1) поступает единица то на выходе соответствующего этому входу элемента И будет единица так как на других его входах тоже единицы (по тому что ноли с других выходов инвертируются в единицы инверторами и подаются на эти входы). Единица на одном из выходов будет удерживать нули на других выходах пока на все входы не будут поданы нули (так получается по тому что единица с выхода подается на инверторы подключенные к входам других элементов И, нули с этих инверторов как бы запирают остальные элементы И). Схема на рисунке 4 выполняет ту же функцию. Использованием 4х элементов 4И и 12ти элементов НЕ (инверторов) можно составить схему для 4х входов и 4х выходов и т.д. но при большом количестве строк и/или столбцов клавиатуры схема выйдет слишком громоздкой (это справедливо и для следующей схемы но в ней элементов поменьше).



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


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

7 комментариев:

  1. Блииин... 21-й век! Диоды, компараторы, логика... Заради чего? Контроллер ведь РЯДОМ!

    ОтветитьУдалить
    Ответы
    1. Популярный предрассудок "если не новое и не модное то хуже". Эмиттерно связанная логика работает гораздо быстрее контроллеров. Контроллер - устройство последовательное, логика же может работать параллельно, контроллер будет пропускать переключения ещё огого как, а с логикой не одного пропущено не будет. Оно не старое оно просто другое и для другого.

      Удалить
  2. К чему тут скорость? Клавиатура ОЧЕНЬ медленное устройство! Достаточно опроса один раз в 10 миллисекунд, и даже реже. Не смешите людей.

    ОтветитьУдалить
  3. Для матричной клавиатуры ВООБЩЕ ничего не нужно. Даже резисторов (если она рядом с контроллером), не говоря уже об этом огороде!))

    ОтветитьУдалить
    Ответы
    1. Вы наверное не читали статью прежде чем написать данный комментарий. Данный "огород" нужен для "защиты от дурака" который нажимает более одной кнопки за раз. Такая проблема реально существует и я её не сам придумал. Я много проблем сам придумывал но точно не эту.

      Удалить
  4. Дурак нажал несколько клавиш и чо? И без Вашего огорода отслеживается и игнорируется/предупреждается и т.п. В чём проблема? Или для того что бы отслеживать АБСОЛЮТНО ВСЕ нажатия дурака?))) Да на кой это надо!)) Хотя бы один убедительный пример? Ну если только сферический конь в вакууме!)))

    ОтветитьУдалить
  5. А я вот сам пришёл к такой же конструкции. И мне необходимо отслеживать много нажатых одновременно кнопок, ибо это должна быть не клавиатура, а шахматная доска. И, я думаю, что по-другому это работать не будет.
    Так, что я удовлетворен, что я не глупость выдумал, а такая идея имеет право на жизнь.

    ОтветитьУдалить