Предлагаю простой вариант реализации такого устройства, подключающегося к COM-порту компьютера, практически не требующий материальных затрат.
Клавиатура имеет до 12 кнопок, которые могут быть подключены при помощи hal-файлов конфигурации к любым сигналам в LCNC. Схема клавиатуры содержит 12 нормально разомкнутых кнопок, включенных в матрицу 3х4, 5-6 маломощных диодов (например КД521 или 1N4148) и 4 резистора на 3-6 кОм. Подключается семипроводным кабелем или шлейфом.
Для пробы спаял макет. Вот тестовый hal-файл.
Код: Выделить всё
loadrt threads name1=base-thread period1=30000 fp1=0 name2=servo-thread period2=1000000
loadrt serport io=0x3f8
addf serport.0.read base-thread
addf serport.0.write base-thread
loadrt matrix_kb config=3x4s
addf matrix_kb.0 servo-thread
setp matrix_kb.0.negative-logic 0
net col0 serport.0.pin-9-in => matrix_kb.0.col-00-in
net col1 serport.0.pin-8-in => matrix_kb.0.col-01-in
net col2 serport.0.pin-6-in => matrix_kb.0.col-02-in
net col3 serport.0.pin-1-in => matrix_kb.0.col-03-in
net row0 matrix_kb.0.row-00-out => serport.0.pin-4-out
net row1 matrix_kb.0.row-01-out => serport.0.pin-3-out
net row2 matrix_kb.0.row-02-out => serport.0.pin-7-out
start
К сожалению, драйвер serport содержит ошибки, пришлось его слегка подправить. Здесь исправленный исходник и скомпилированный драйвер. Его можно просто скопировать вместо имеющегося в папку rtlib.
С драйвером, который идет в системе, работа тоже возможна, но потребуются некоторые "костыли" в hal-файле .
Компонент matrix_kb выполняет сканирование клавиатуры и выдает состояние кнопок на 12 (в данном случае) выходов matrix_kb.0.key.r0c0 - matrix_kb.0.key.r2c3 (битовые), а также номер нажатой клавиши в matrix_kb.0.keycode (целое число).
Плюсы такой клавиатуры не только в простоте устройства, но и в достаточно хорошей помехоустойчивости из-за высоких уровней сигналов, используемых в COM-порте (размах от -10 до +10 вольт)
PS: Поскольку тема вызвала некоторый интерес, буду здесь выкладывать и разные другие "бюджетные" устройства с нестандартным использованием COM-порта.
В планах:
- подключение простого свитч-энкодера (сделал)
- работа с твердотельными (есть) и обычными реле.
- ручной энкодер с выходом TTL (штурвал, маховичок) (готово).
- реализация аналоговых входов (есть).
- увеличенная клавиатура (есть).