Клавиатура для маленького компьютера
Сделала себе маленькую клавиатуру:
… в которой дотрагиваться надо к контакту справа от буквы:
По устройству эта клавиатура – переменный резистор. С другой стороны – просто последовательность резисторов 100 Ом:
Весь этот большой длинный резистор подключен к питанию. А если дотронуться «карандашом» до контакта, то на него попадёт напряжение остатка резисторов (после точки контакта). Если этот «карандаш» прицепить к какому-то из пинов, принимающих аналоговую информацию, то команда analogRead() прочитает значение напряжения, которое соответствует определённой букве.
Это работает. Но, к сожалению, ни к чему не подключенный пин (при отсутствии контакта с клавиатурой) постоянно возвращает какие-то значения. Наверное, какие-то помехи. Ноль там будет только если подключить провод к земле.
Проблема решаема разными путями. В настоящей клавиатуре можно и механическим. Можно сделать кнопки с двумя пружинами разной жесткости, чтобы вначале замыкался контакт передачи информации о напряжении, а потом контакт существования сигнала. Информациию читать только если замкнуты оба.
Здесь же можно использовать два провода. Первый для считывания информации, а второй для кнопки. Только при нажатой кнопке читать данные. Этакая клавиатура требующая работы двух рук. Правая рук нажимает контакт, а левая нажимает кнопку, отправляя информации в контроллер.
Удобство под вопросом, но если очень надо вводить буквы, а не цифры, то лучше так, чем несколько раз нажимать кнопку как в кнопочном телефоне.
Это все интересно тем, что именно так работают все цифровые передачи данных. В них есть информационный канал и счётчик. Информация считывается только в момент включения счётчика (или выключения)
Если вопрос размеров не критичен, то проще настоящую клавиатуру подключить:
https://marsohod.org/11-blog/57-ps2proto
Про ps/2:
https://ru.wikipedia.org/wiki/PS/2_(порт)
Разъем:
Как и полагается любому устройству два провода на питание и землю. Как принято при цифровой передачи два провода на данные (DAT) и счётчик (CLS). .
Про передачу информации:
Перед подачей питания на устройство контроллер порта на материнской плате «слушает» CLK. При передаче от устройства (PS/2-клавиатуры или PS/2-мыши) к компьютеру используется следующий протокол. Устройство не начинает передачу, если Clock не находился в «1» по крайней мере 50 микросекунд.
… Информация может передаваться не только с клавиатуры, но и на клавиатуру (лампочки на ней, например, можно включить). Видимо обе стороны могут включать и выключать сигнал по счётчику (CLK), означающий передачу информации, но чтобы кто-то занялся передачей отсутствие сигнала должно быть не менее 50 микросекунд.
Чтобы клавиатура начала что-то передавать, компьютер должен со своей стороны включить CLK.
Устройство передаёт последовательно:
старт-бит — всегда ноль;
8 бит данных;
бит чётности;
стоп-бит — всегда единица.
Устройство устанавливает/меняет сигнал Data, когда Clock находится в логической единице. Контроллер на материнской плате читает данные, когда Clock находится в логическом нуле.
… Т.е клавиатура, с одной стороны, обнаружила нажатую на себе кнопку, а с другой то, что на CLK единица уже более 50 микросекунд. Она устанавливает значение на информационном канале (включено -1, выключено – 0) и только после этого на какое-то время выключает CLK, чтобы протолкнуть информацию в компьютер. Т.е на событие пина счетчика нужно вешать обработчик прерывания, сигнализирующий о том, что надо читать уже положеные на информационный канал данные.
Передаётся информационный пакет, позволяющий контролировать корректность информации. Если нет начального нуля и конечной единицы, то это ненастоящий пакет информации. А если переданный бит чётности не равен тому, что можно посчитать по переданным 8 битам, то что-то не так с переданной информацией.
Программа должна быть примерно такая же как для приёмника радиосигнала. Только в момент прихода волны счётчика надо считывать то, что находится на канале данных, а не записывать продолжительность волны.
|