Записки инженера
Со временем возникает вопрос, как вводить данные в микроконтроллер? Классическое решение, которое приходит большинство нам — использовать кнопки… протравить на плате дорожки и контактные площадки для кнопок, далее их припаять, решить как отслеживать нажатие кнопки — по прерыванию или через опрос состояния кнопок по циклу. Если кнопок много, они будут занимать значительное количество pin-ов микроконтроллера. Путь тернистый.
Я предлагаю использовать, то что у нас под рукой — простую PS/2 компьютерную клавиатуру. Из плюсов:
- вещь не дорогая;
- продается в любом компьютерном магазине
- нам доступно 101 клавиша
- займет клавиатура всего 2-pin микроконтроллера для синхросигнала и данных.
В качестве микроконтроллера я буду использовать ATmega328P или Arduino UNO.
Немного теории
Если вы вскроете оплетку кабеля для клавиатуры, то вы обнаружите 4-е провода:
- провод питания (5 В)
- провод земли
- провод синхросигнала (CLK)
- провод данных (DATA)
Каждая клавиша на клавиатуре имеет свой 8-и битный код, называемый скан-кодом и записывается в шестнадцатеричном виде (HEX), смотри ниже.
Когда вы нажимаете на клавишу, по SLK передаются прямоугольные импульсы а по DATA 11-и битный код:
Биты данных считываются компьютером при переходе CLK с высокого уровня на низкий.
Первый бит всегда равен — это стартовый бит, далее идет 8-емь бит скан-кода, после чего бит контроля четности и в конце стоповый бит, который всегда равен 1.
Как подключить PS/2 клавиатуру к микроконтроллеру?
На самом деле порт PS/2 компьютерный клавиатуры это разновидность разъема Mini-DIN, её 6-и пиновый вариант.
В клавиатуре установлен min-din 6 pin штекер (папа), мы все его видели на конце кабеля клавиатуры.
Гнездо min-din 6 pin (мама) находится на материнской плате, для подключения к микроконтроллеру нам придется его выпаивать из старой клавиатуры, что не удобно.
Я советую приобрести нормальное гнездо min-din 6 pin для кабеля, например на ebay.ru он стоит ~ 1$. Выглядит он следующим образом:
(слева в собранном виде, справа в разобранном)
В качестве примера я буду подключать клавиатуру к Arduino UNO (контроллер ATmega328P), от нас требуется подключить проводки по следующей распиновки.
Помощь паяльника не понадобится, провода обжимаются пассатижами в металлические зажимы, в результате у меня получился следующий переходник.
В вашем случае концы проводков вы можете припаять к плате микроконтроллера, я буду использовать pin-ы Arduino UNO.
- GND подключаем к GND Arduino UNO
- Vcc подключим к 5V Arduino UNO
- DATA подключим 2-pin Arduino UNO
- CLK подключим к 3-pin Arduino UNO
Далее останется только подключить клавиатуру к гнезду.
Исходный код прошивки
В интернете для работы с PS/2 клавиатурой в больше половины случаев используют библиотеку ps2keyboard, где через цикл проверяют состояние «переменной — буфера» обмена с клавиатурой.
Я не сторонник проверять что-то через цикл, прошивка будет занята только работой с клавиатурой.
А если нам нужно производить расчеты или работать с каким-нибудь медленным оборудованием? Тут будет что-то страдать или наши расчеты или скорость реакции на клавиатуру.
Я предлагаю использовать прерывание…
PIN контроллера принимающий CLK (синхроимпульсы) от клавиатуры нужно настроить как внешнее прерывание при переходе из высокого состояние в низкий и в обработчике считывать бит данных с DATA. Алгоритм обработчика прерывания должен побитно накапливать посылаемый скан-код с клавиатуры.
Код для Arduino, подключаем DATA к 2-ому пину, CLK подключим к 3-ему пину.
123456789101112131415161718192021222324252627282930313233343536373839 | const int DataPin = 2; // канал DATA клавиатурыconst int IRQpin = 3; // канал CLK клавиатурыint count=1; // счетчик текущего бита 11-битного кода от клавиатурыint m=0; // счетчик текущего бита скан-кодаuint8_t scan_code=0; // скан-код нажатой клавишиvoid ps2interrupt(void) { /* обработчик прерывания от CLK клавиатуры */ /* считываем скан-код с клавиатуры по битно в переменную scan_code */ if ((count>1) and (count |
Источник: http://s-engineer.ru/mikrokontroller-podklyuchaem-ps2-klaviaturu/
Почему не работает клавиатура?
И так у вас перестала работать клавиатура, и вы не знаете что делать. Не беда сегодня я написал небольшую статью о том, почему клавиатура может не работать описал причины и их решения. Скорее всего, каждый сталкивался с этой проблемой.
Да это очень частое явление. Поэтому каждому будеn, полезно узнать, почему не работает клавиатур и как решить эту проблему. Если учесть то что хорошая клавиатура может стоит достаточно дорого то лучше попробовать самому решить проблему и попробовать восстановить работоспособность клавиатуры чем сразу же бежать в магазин за новой.
И так представим ситуации, вы включили компьютер, он загрузился, но клавиатура перестала подавать признаки жизни. Первое что в большинстве случаев делает пользователе, это просто перезагружает компьютер еще раз. Но и после этого клавиатур работать не начала. И так первое что нужно вам узнать это через какой разъем у вас подключена клавиатура USB или PS/2
Не работает клавиатура с разъемом PS/2
Первая и самая простая причина это просто клавиатура сломалась.
Вторая причина отошёл разъем PS/2 в этом случае нужно заново подключить и перезагрузить компьютер, так как клавиатура определяется в процессе загрузки системы. Если клавиатуру с разъемом PS/2 выдернуть и снова подключить в процессе работы компьютера она не определится. На горячею такое может пройти только на новых материнских платах.
Третья причина сбились настройки БИОСа. В этом случаем вам придется зайти в БИОС (в процессе загрузки нужно нажать кнопку DEL) И найти пункт меня, отвечающий за работоспособность клавиатуры.
Подробно описывать не буду так у всех меню БИОСа разное. Ищите меню KeyBoard. Очень часто встречается такая ситуация когда разъем просто выгорал.
Тут единственным решением будет приобретения переходника с PS/2 на USB.
Не работает клавиатура с разъемом USB
Первая причина такая же как и в случае PS/2 клавиатура не работает потому что сломалась.
Вторая причина тоже аналогичная, по каким-то причинам отошел кабель USB. Но тут все горазда проще, чем в случае с PS/2 просто вставляем кабель на место и все. Если клавиатура в рабочем состоянии, то она снова заработает.
Третья причина сбились настройки БИОСа. Тут также продеться зайти в него и посмотреть, не отключены ли у вас USB разъемы, если отключены, то включаем и радуемся.
Четвертая причина сломан разъем или выгорел. Просто пробуем подключить клавиатур в другой разъем USB.
Не работает часть кнопок на клавиатуре
В большинстве случаев это происходит по вине, каких либо приложений. Самый простой способ все проверить это в текстовом документе, проверить работоспособность всех кнопок если они не работаю, то значить ваше клавиатуре пришёл конец. Так же неопытные пользователи очень часто жалуются на то что не работает цифровая клавиатуру тут все просто нажимаем кнопку Num LocK.
Ну, вот наверно и все если что вспомню, то обязательно допишу статью. Конечно, для тех, кто хоть немного знаком с компьютером это не является большой проблемой, но все же, надеюсь, что кому-то моя статья поможет.
Источник: http://www.softo-mir.ru/pochemu-ne-rabotaet-klaviatura/
Описание интерфейса PS2
ПодробностиКатегория: РазноеСоздано 20 Апрель 2010Автор: Николай КовачПросмотров: 60713
Несмотря на то, что USB клавиатур и мышей становится все больше и больше, компьютеры со «старым» PS2 интерфейсом все еще выпускаются. Посмотрите на системный блок Вашего компьютера сзади. Вы видите два небольших шестиконтактных разъемчика, один над другим, зеленый и фиолетовый? Это они. Они служат для подключения мыши и клавиатуры стандарта PS2.
Для начала, немного технической информации.
Как работает интерфейс PS2?
Порывшись в интернете находим наиболее достоверную информацию о PS2 здесь: http://www.computer-engineering.org/, автор Adam Chapweske, за что мы ему крайне признательны. Статья эта большая и на английском языке, поэтому попробуем перевести на русский самое необходимое.Первое – это описание контактов разъема PS2.
В разъеме MINIDIN 6 контактов, но используются только 4 из них.
Слева нарисован разъем, который вставляется. Он устанавлявается на шнур мыши или клавиатуры. Справа нарисован разъем устанавливаемый на материнскую плату компьютера. Нумерация контактов у них, естественно зеркальная, потому, что при вставлянии одного разъема в другой сигналы одного имени должны совпадать.
Сигналы интерфейса:
- Data (передаваемые данные)
- Not Implemented (не используетя)
- Ground (Земля)
- VCC (+5V) (Питание)
- Clock (сигнал синхронизации передаваемых данных)
- Not Implemented (не используется).
Второе – это электрический интерфейс.
Клавиатура (или мышь) подключена к контроллеру на материнской плате по схеме «открытый коллектор». Что это такое? Схему можно нарисовать примерно так:
Схема «открытый коллектор» используется когда одним сигналом могут управлять несколько устройств. В нашем случае это контроллер на материнской плате и контроллер внутри клавиатуры. Они могут передавать данные навстречу друг другу.
Например Клавиатура посылает коды нажатых клавиш, а компьютер посылает в клавиатуру команду зажечь светодиоды CAPS/NUM/SCROLL LOCK.
В исходном состоянии, когда данные не передаются, оба сигнала Data и Clock находятся в логической единице (на них напряжение +5В).
Такое состояние будет если оба контроллера снимут управляющее напряжение с транзисторов (ClockOut и DataOut) и они закрыты. Так как транзисторы закрыты, то сигналы «подтянуты вверх» к напряжению питания резисторами. Читать текущее состояние сигналов оба контроллера могут прямо с контактов DataIn и ClockIn.
Управлять линией очень легко. Контроллер подает управляющее напряжение на базу транзистора (сигналы DataOut и ClockOut), он открывается, через него течет ток и соответствующий сигнал Data или Clock получается «притянут к земле», на нем получается логический ноль.
Что делать если оба контроллера захотят одновременно передать навстречу друг другу? Ну во-первых, ничего страшного на физическом уровне не случится, ведь «притянутый к земле» сигнал «притянуть» еще раз не получится. Во-вторых, конечно это проблема для уровня передачи данных.
Оба контроллера, как два вежливых собеседника, должны уметь слушать друг друга и дослушать до конца. Это обеспечивается специальным протоколом. Например контроллер, перед передачей своих данных не должен начинать передачу данных если состояние сигналов недавно менялось.
Третье – это протокол.
При передаче от устройства (PS2 клавиатуры или PS2 мыши) к компьютеру используется следующий протокол. Устройство не начинает передачу, если Clock не находился в «1» по крайней мере 50 микросекунд. Устройство передает последовательно:
- старт бит – всегда ноль;
- 8 бит данных;
- бит четности;
- стоп бит – всегда единица.
Устройство устанавливает/меняет сигнал Data когда Clock находится в логической единице. Контроллер на материнской плате читает данные, когда Clock находится в логическом нуле. Примерно так:
Частота сигнала Clock примерно 10-16.7кГц. Время от фронта сигнала Clock до момента изменения сигнала Data не менее 5 микросекунд. Так написано в той статье, на которую я сделал ссылку в начале. Четно говоря я очень сомневаюсь, что производители придерживаются этих значений.
Контроллер материнской платы может сигнализировать устройству о невозможности приема опустив сигнал Clock в логический ноль. На практике этого по моему тоже никто не делает.
При передаче в обратную сторону команд от контроллера на материнской плате компьютера к клавиатуре или мыши протокол отличается от описанного выше.
Последовательность передаваемых бит здесь хитрее:
- хост контроллер опускает сигнал Clock в ноль на время примерно 100 микросекунд;
- хост контроллер опускает сигнал Data в ноль формируя старт бит;
- хост контроллер отпускает сигнал Clock в логическую единицу, клавиатура фиксирует старт бит;
- далее клавиатура генерирует сигнал Clock, а хост контроллер подает передаваемые биты;
- после того, как хост контроллер передал все свои биты, включая бит четности и стоп бит, клавиатура посылает последний бит «ноль», который является подтверждением приема.
Поскольку одним сигналом управляют два устройства, то довольно трудно понять, кто в данный момент времени управляет сигналом. Именно по этому диаграмма нарисована двумя цветами. Красный цвет – сигнал управляется хост контроллером, а синий – сигнал управляется клавиатурой.
Четвертое – это коды и команды, которые посылают мыши, клавиатуры и контроллер компьютера. Это довольно сложная тема… Пожалуй опишу все это в следующей статье.
Ну и конечно, мы собираемся сделать из платы Марсоход какой-то прототип клавиатуры. Уже скоро!
Источник: https://marsohod.org/11-blog/56-ps2
Как переделать клавиатуру из DIN в PS/2
На такой работе, как у меня, неизбежно скапливается запас всяческого компьютерного старья. Причем часто это просто морально устаревшая техника и девайсы, которые работают замечательно, но никому уже не нужны. Например, есть целый штабель клавиатур, рабочих и не очень. И если лишних рабочих клавиатур PS/2 нет, то рабочих клавиатур с DIN-разъемом пока достаточно.
В то же время на такой работе, как у меня, компьютерщик должен иметь 2-3 запасных комплекта мышей и клавиатур для одновременного ремонта компов. И вот сегодня в очередной раз мне не хватило клавиатуры PS/2. Пришлось переделать такую клавиатуру из старой клавиатуры с DIN разъемом. Вот как это делается.
С точки зрения электрических сигналов DIN -клавиатура не отличается от PS/2 клавиатуры.
Можно просто отрезать разъем PS/2 от старой нерабочей мышки или нерабочей PS/2 клавиатуры и прикрутить этот разъем на клавиатуру вместо DIN. Для этого нужно узнать маркировку проводов клавиатуры. Берём клавиатуру с DIN-разъёмом и отрезаем этот разъем.
Прозваниваем тестером разъем DIN и находим какому штырьку соответствует провод какого цвета. В моём случае DIN имел такую цветовую маркировку, фото кликабельны:Внимание! На разных моделях цвет проводов может отличаться, но положение сигналов на разъеме DIN одинаково.
Записываем цветовую маркировку разъема DIN
СИГНАЛ | ЦВЕТ |
CLC | Белый |
GND | Серебристый |
DAT | Зелёный |
VCC | Красный |
Достаём старую нерабочую шариковую мышь с разъемом PS/2 и отрезаем от нее разъем PS/2. Прозваниваем тестером разъем PS/2 и находим какому штырьку соответствует провод какого цвета. В моём случае PS/2 имел такую цветовую маркировку:
Внимание! На разных моделях цвет проводов может отличаться, но положение сигналов на разъеме PS/2 одинаково.
Записываем цветовую маркировку разъема PS/2
СИГНАЛ | ЦВЕТ |
CLC | Белый |
GND | Зелёный |
DAT | Оранжевый |
VCC | Синий |
Теперь находим какой цвет проводов клавиатуры DIN соответствует какому цвету проводов разъема PS/2.
СИГНАЛ | ЦВЕТ проводовразъема PS/2 | ЦВЕТпроводов клавиатуры разъема DIN |
CLC | Белый | Белый |
GND | Зелёный | Серебристый |
DAT | Оранжевый | Зелёный |
VCC | Синий | Красный |
По этой полученной таблице скручиваем провода клавиатуры и разъёма PS/2.
Изолируем скрученные проводки друг от друга изолентой и проверяем работу клавиатуры.
Если перепутали цвета, сгорит клавиатура или порт компьютера. Или просто не будет работать клавиатура.
А если всё делали внимательно, клавиатура будет работать.
Источник: http://www.comp-man.info/2011/07/din-ps2.html
Interface 1bis: работа клавиатуры и мыши
Adblockdetector