Какая схема лучше для подключения клавиатуры к MCU?

У меня есть три схемы подключения клавиатуры, все из которых я видел в различных приложениях, а некоторые я также использовал, но я хочу знать, есть ли какое-либо преимущество одного над другим. введите описание изображения здесьКлавиатура будет подключена непосредственно к контактам DIO микроконтроллера PIC, контакты 1,2,3 как ВЫХОДЫ, а контакты A,B,C,D как входы.

Клавиатуры не будет на плате, но она будет подключена через кабели к печатной плате, я не знаю, имеет ли это какое-то значение.

Ответы (3)

Номер 1 может быть разрушительным для вашего контроллера. Если бы вы использовали двухтактные выходы для столбцов, а строки в качестве входов, то нажатие двух клавиш в одной строке приведет к короткому замыканию источника питания через выходы микроконтроллера. Если выходы микроконтроллера могут быть сконфигурированы как открытые, то проблем нет, но на выходах должны быть еще и подтягивающие резисторы. Тогда у вас в основном есть номер 2, но с интегрированными подтягиваниями.

Номер 2. Та же история, если бы вы использовали строки в качестве выходных данных. Использование столбцов в качестве выходов имеет больше смысла, так как R1-R3 позволяют избежать короткого замыкания выходов. Обратите внимание, что низкий уровень выходного сигнала будет рассматривать последовательный/подтягивающий резистор как делитель напряжения, так что входное напряжение будет 0,1 В пост. тока, хотя обычно это не проблема.

Номер 3 не имеет делителя, но резисторы на входах не выполняют никакой функции. Подойдет вариант без последовательного резистора.

Так что 1) может быть абсолютным нет-нет. 3) немного лучше, чем 2), потому что у него нет делителя напряжения, но можно обойтись без последовательного резистора.

Подумал, что я мог бы также удалить свой, мозг переутомился ... Я прочитал это, так как столбцы являются выходными данными, а строки - входными данными в примере?
@Oli - В 1) это не имеет значения, и стрелок нет, но я отредактирую свой ответ, чтобы он соответствовал другим.
для 2) подтягивания находятся в рядах, которые будут входными данными, так что, я думаю, все в порядке, верно? а вы говорите, что последовательные резисторы на колонках не нужны? и я не получил вашего объяснения по (3). Вы говорите, что последовательные резисторы только в рядах могут быть удалены? потому что, если все последовательные резисторы удалены, это становится таким же, как (1)
@TiOLUWA - я не говорил, что резисторы выходов могут быть удалены. Они необходимы, чтобы избежать проблем номер один. Но последовательный резистор для входов бесполезен, так как входы имеют высокое сопротивление.

Вы можете просто добавить диоды в первую схему, если ваш микроконтроллер имеет встроенные подтягивающие или подтягивающие резисторы.

Подключение клавиатуры

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

Если у вас на входах есть подтягивающие резисторы, вы меняете полярность диодов, и чтобы выбрать колонку, вы должны подать ее на высокий уровень. Вам не нужно инвертировать считанное значение.

Первая схема хороша, если вы используете подход двухфазного сканирования. На этапе 1 выводы GPIO строки настраиваются как входы с внутреннимивключены подтягивающие резисторы, а контакты GPIO столбца настроены как выходы, установленные на GND. На втором этапе роли меняются. В каждом случае 4-битное (или 3-битное) считывание ввода сохраняется, а «объединение» двух фаз дает 8-битное (или 7-битное) значение, которое можно декодировать в «кнопку X». нажал». Конечно, есть комбинации кнопок, которые неоднозначны для декодирования в этой схеме (например, коллинеарные). Вам также нужно будет обеспечить небольшую задержку между изменением функций контактов и чтением входных данных, чтобы контакты могли заряжаться. При этом это хороший подход с минимальным аппаратным обеспечением, и пока вы соблюдаете правила в программном обеспечении, для вашего контроллера нет опасности.

Я понимаю, что этот метод сканирования не был предложен ОП, но я хотел объяснить контекст программного обеспечения, в котором имеет смысл использовать первую схему.
я видел этот метод сканирования, используемый в одном из примечаний к приложению микрочипов с использованием их расширителя портов. Есть ли у него какие-либо преимущества по сравнению с обычным методом, когда вы опускаете каждый COL один за другим?
@TiOLUWA это двухфазный метод, так что в принципе вы можете сканировать матрицу быстрее