Свежие обсуждения
Компьютеры

Эмуляция клавиатуры компьютера микроконтроллером?

1 6

Есть задумка использовать для одного устройства клавиатуру компьютера в качестве устройства сопряжения.
То есть, вместо кнопок клавы подключаю мс ключей, управляемые внешними датчиками.
Специально написанная программа следит за нажатием кнопок и выводит на экран стилизованное изображение датчика, соответствующего нажатой кнопке. Одно нажатие - вывод изображения, повторное нажатие - выключение.
Пока экспериментируем с цифровой клавиатурой (NumLock).

Всё бы хорошо, но у клавиатуры есть ограничение - она не отрабатывает одновременное нажатие нескольких кнопок.
Две кнопки сразу ещё получается отработать. Три - нужно изгаляться. А четыре - ни как...
А нужно, чтобы хоть сразу все нажимай, потому что датчики могут сработать все одновременно. Пока планируется 14 датчиков.

Пока вижу только один выход - последовательный и периодический опрос кнопок-датчиков.
Прикинул вариант решения по старинке - жёсткой логикой, но многовато корпусов получается - аж 15 штук. В принципе, не страшно, но хочется чего-то более оригинального...

Есть ещё идея - эмулировать контроллер клавиатуры PIC контроллером.
Например, PIC16F828 с 16-ю портами. Два порта на выводы "Data"" и "Clock, для подключения к компьютеру, а оставшиеся 14 - аккурат, на все датчики...
Аппаратная часть получается явно проще.
Но встал вопрос программы, эмулирующей работу стандартной клавиатуры...

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

 

Если уж соберетесьставить контроллер, подумайте о контроллере с USB. Реализовать HID устройство не проблема, под некоторые контроллеры даже примеры готовые есть. Драйвера таким устройствам не нужны.

 

Dron_Gus: ...подумайте о контроллере с USB.

Проблема с программированием...

Видел готовые модули - платка, с большой мс, по периметру которой выводы и разъём USB. При увеличении просматривается, что мс - PIC микроконтроллер, кажется, 18-й серии.
24 порта ввода\вывода.
Цена, конечно, не малая, но наводка - из России. В этом проблема. А в Украине пока не нашёл...

Dron_Gus: Реализовать HID устройство не проблема...

А это что такое?

 

Human Interface Device - интерфейс для всяких мышек, джойстиков, клавиатур т.д. В Windows есть стандартный драйвер. Правда, есть некоторые ограничения на скорость передачи данных, но для Вашего случая их можно не учитывать. За счет того, что драйвер уже готовый, пользуется большой популярностью у разработчиков.

 

а почему не получается одновременные нажатия кнопок обрабатывать? насколько я помню PS/2, на нажатие кнопки идет один скан-код, на отпускание - другой. что позволяет существовать комбинациям клавиш типа Ctrl+Alt+Delete.

 

хотя, может какая конкретная клавиатура ограничения имеет...

 

Dron_Gus:
интерфейс для всяких мышек, джойстиков, клавиатур т.д
Это про что? Поясните, плиз.
Просто занимался изучением клавиатурного PS/2 (пока пришлось отложить на время). Аппаратная часть - две линии "Data" и "Clock", с ОК. Поскольку, у 628-го ПИКа такой вывод только один, придётся использовать 3 ноги, плюс дополнительный ключевой транзистор, с обвязкой.
Кстати, а кто может подкинуть информацию по мышиному PS/2, и насколько у них протоколы совместимы с комовым?

 

HID это протокол "поверх" USB. Я его предложил, как самый простой в реализации за счет готового драйвера.

 

Dron_Gus, а где об этом HID можно узнать подробнее? С уклоном в практическую часть...

rfc: а почему не получается одновременные нажатия кнопок обрабатывать?

Потому что при нажатии нескольких кнопок одновременно, клава выдаёт скен-код последней нажатой клавиши.
С отключением ещё хуже - если, например, нажаты две клавиши, и отпускается одна, то клава вообще ни чего не выдаёт.

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

Найти бы спецификацию на код клавы...
Осциллографом смотрю - не сложнее кода RC-5 дистанционок .

Gregory: Аппаратная часть - две линии "Data" и "Clock", с ОК. Поскольку, у 628-го ПИКа такой вывод только один, придётся использовать 3 ноги...

Вы имеете в виду Открытый Коллектор?
А зачем клаве он нужен?
Становлюсь осциллографом на выводы "Data" и "Clock" разъёма и вижу постоянку +5В. При нажатии клавиши появляются две пачки импульсов отрицательной полярности длительностью, примерно, 0,8мс. На обоих выходах, кажется, синхронно. Разница только в том, что на "Clock" просто две пачки импульсов, а на "Data" первый - импульс, а второй - комбинация оных, соответсвующая нажатой клавише.
Принтскрин в аттаче (зелёный - "Clock", жёлтый - "Data"). На нижней осциллограмме растянутый импульс с вывода "Data".

Так что, думаю, хватит двух портов.

156678.djvu

 

DWD: Человек, отрабатывающий программную часть, говорит, что консультации в инете (на программистских форумах), так же, подтверждают максимум нажатий в 3 кнопки одновременно.

Да врёт он

Вот специально пробую, нажимаю кнопку, и не отпуская её - следующую:

йцук - так 4 кнопки, на "е" уже затык;
йцукгшщз - так 8 (видимо разные группы кнопок).
Можете сами проверить
Так что не всё так плохо, если сигналов не 104, то можно раскидать...

Про USB вот хороший сайт: http://www.beyondlogic.org/usbnutshell/usb1.htm