У меня есть три схемы подключения клавиатуры, все из которых я видел в различных приложениях, а некоторые я также использовал, но я хочу знать, есть ли какое-либо преимущество одного над другим. Клавиатура будет подключена непосредственно к контактам DIO микроконтроллера PIC, контакты 1,2,3 как ВЫХОДЫ, а контакты A,B,C,D как входы.
Клавиатуры не будет на плате, но она будет подключена через кабели к печатной плате, я не знаю, имеет ли это какое-то значение.
Номер 1 может быть разрушительным для вашего контроллера. Если бы вы использовали двухтактные выходы для столбцов, а строки в качестве входов, то нажатие двух клавиш в одной строке приведет к короткому замыканию источника питания через выходы микроконтроллера. Если выходы микроконтроллера могут быть сконфигурированы как открытые, то проблем нет, но на выходах должны быть еще и подтягивающие резисторы. Тогда у вас в основном есть номер 2, но с интегрированными подтягиваниями.
Номер 2. Та же история, если бы вы использовали строки в качестве выходных данных. Использование столбцов в качестве выходов имеет больше смысла, так как R1-R3 позволяют избежать короткого замыкания выходов. Обратите внимание, что низкий уровень выходного сигнала будет рассматривать последовательный/подтягивающий резистор как делитель напряжения, так что входное напряжение будет 0,1 В пост. тока, хотя обычно это не проблема.
Номер 3 не имеет делителя, но резисторы на входах не выполняют никакой функции. Подойдет вариант без последовательного резистора.
Так что 1) может быть абсолютным нет-нет. 3) немного лучше, чем 2), потому что у него нет делителя напряжения, но можно обойтись без последовательного резистора.
Вы можете просто добавить диоды в первую схему, если ваш микроконтроллер имеет встроенные подтягивающие или подтягивающие резисторы.
Показанный пример предполагает, что у вас есть подтягивания на ваших входах (чтобы выбрать столбец, вы должны установить его на низкий уровень), а состояние ключа инвертировано.
Если у вас на входах есть подтягивающие резисторы, вы меняете полярность диодов, и чтобы выбрать колонку, вы должны подать ее на высокий уровень. Вам не нужно инвертировать считанное значение.
Первая схема хороша, если вы используете подход двухфазного сканирования. На этапе 1 выводы GPIO строки настраиваются как входы с внутреннимивключены подтягивающие резисторы, а контакты GPIO столбца настроены как выходы, установленные на GND. На втором этапе роли меняются. В каждом случае 4-битное (или 3-битное) считывание ввода сохраняется, а «объединение» двух фаз дает 8-битное (или 7-битное) значение, которое можно декодировать в «кнопку X». нажал». Конечно, есть комбинации кнопок, которые неоднозначны для декодирования в этой схеме (например, коллинеарные). Вам также нужно будет обеспечить небольшую задержку между изменением функций контактов и чтением входных данных, чтобы контакты могли заряжаться. При этом это хороший подход с минимальным аппаратным обеспечением, и пока вы соблюдаете правила в программном обеспечении, для вашего контроллера нет опасности.
Оли Глейзер
Стивенвх
TiOLUWA
Стивенвх