Схема разъема ps 2 клавиатуры компьютера. Исходный код прошивки
Итак произошел отказ мышки PS/2. Дефекты причём могут быть разными, например мышка начала при одном нажатии на клавишу выдавать два нажатия. Почему в качестве примера я привёл этот дефект? Потому, что в этом случае сложно свалить на неисправность кнопки. И в мастерскую такую мышку не понесёшь, так как ремонт мышки обойдётся как минимум вдвое дороже чем покупка новой. Так, что можно выбрасывать мышку? Совсем необязательно если у вас есть некоторые навыки в ремонте (например умение аккуратно провести пайку) или если у вас есть знакомый обладающий этими навыками и ему не жалко десяти минут для вас.
Распайка разъёма мыши PS/2
№ п/п |
Сигнал |
1 | Data |
2 | не задействован |
3 | Ground |
4 | +5V |
5 | Clock |
6 | не задействован |
Ремонт компьютерной мышки PS/2
Основная причина всех встречающихся дефектов мышки это ухудшение проводимости провода. Дефект очень легко вычисляется с помощью омметра. На исправной жиле провода омметр будет показывать 1-10 Ом, а если жила неисправна от 150 Ом и выше.
Теперь как ремонтировать. Сам разъём PS/2 не разборной, но как выяснилось он нам и не нужен. Как выяснилось неисправность кроется на участке провода от внутреннего разъёма мыши и до выхода провода из мыши. (Почему-то все производителе с относительно недавнего времени решили, что в этом месте должен быть переход с внутренней проводки на внешнюю + именно в месте выхода провода из мышки бывает самая большая нагрузка на провод). В общем выкусываем этот участок провода, (можно пойти двумя путями просто откусить край провода со стороны мышки и запаять его снова в мышку или выкусить участок и спаять провод (я предпочитаю второй вариант (всё равно стык будет внутри мышки))) зачищаем и залуживаем жилы кабеля, и восстанавливаем целостность провода. (Кстати сразу после выкусывания проверяем целостность жил провода)
Компьютерная техника не стоит на месте, она постоянно усовершенствуется, и зачастую на смену стационарным компьютерам приходят ноутбуки. А для ноутбука тоже нужна мышка, и куда девать старую мышку с круглым разъёмом? И тем более, если она прекрасно работает и по эргономике очень хорошо подходит к вашей руке... Выкидывать?
Нет, зачем же, выход есть - её надо переделать под разъём USB.
Есть 2 варианта: можно просто сделать переходник, или убрать старый кабель на мышке и подключить новый - с штекером USB. Схема распайки как видите довольно проста - всего 4 провода. Достаточно взять какой-нибудь старый кабель с USB-штекером, от фотоаппарата или мобильного телефона например, или можно купить такой кабель на барахолке и заменить его на мышке.
А назначение проводов USB-разъёма, ориентируясь по цвету и номерам, следующее:
1. красный - питание, 5 Вольт,
2. белый (серый) (D-) - передает данные от компьютера к мышке,
3. зеленый - передает данные с мышки на компьютер (D+),
4. черный - заземление (корпус).
Ориентируясь по цветам проводов можно быстро перепаять кабель, но, я вам все же советую перед тем как отпаять старый кабель - прозвоните тестером и лишний раз убедитесь, что цвета проводов соответствуют номерам на разъёме. Как показывает практика, человеческий фактор всё же присутствует и ошибки тоже бывают.
Используя данную схему распайки можно и клавиатуру с круглым PS/2 разъёмом переделать под разъём USB. Всё так же, подключив нужные провода к нужным контактам... Думаю, эта статья поможет с пользой утилизировать (приспособить) устаревшие, но ещё вполне хорошие и работоспособные детали от старых ПК.
Со временем возникает вопрос, как вводить данные в микроконтроллер ? Классическое решение, которое приходит большинство нам — использовать кнопки … протравить на плате дорожки и контактные площадки для кнопок , далее их припаять , решить как отслеживать нажатие кнопки — по прерыванию или через опрос состояния кнопок по циклу . Если кнопок много , они будут занимать значительное количество pin-ов микроконтроллера. Путь тернистый.
Я предлагаю использовать, то что у нас под рукой — простую PS/2 компьютерную клавиатуру . Из плюсов:
- вещь не дорогая;
- продается в любом компьютерном магазине
- нам доступно 101 клавиша
- займет клавиатура всего 2-pin микроконтроллера для синхросигнала и данных.
В качестве микроконтроллера я буду использовать ATmega328P
или Arduino UNO
.
Немного теории
Если вы вскроете оплетку кабеля для клавиатуры, то вы обнаружите 4-е провода :
- провод питания (5 В)
- провод земли
- провод синхросигнала (CLK)
- провод данных (DATA )
Каждая клавиша на клавиатуре имеет свой 8-и битный код , называемый скан-кодом и записывается в шестнадцатеричном виде (HEX), смотри ниже.
Когда вы нажимаете на клавишу , по SLK передаются прямоугольные импульсы а по DATA 11-и битный код:
Биты данных считываются компьютером при переходе CLK с высокого уровня на низкий.
Первый бит всегда равен 0 — это стартовый бит , далее идет 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-ему пину.
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<11)) { /* вырезаем из 11-и битного кадра, 8-и битные скан код */
scan_code |=(digitalRead(2)<
const int DataPin = 2 ; // канал DATA клавиатуры const int IRQpin = 3 ; // канал CLK клавиатуры int count = 1 ; // счетчик текущего бита 11-битного кода от клавиатуры int m = 0 ; // счетчик текущего бита скан-кода uint8_t = 0 ; // скан-код нажатой клавиши void ps2interrupt (void ) { /* обработчик прерывания от CLK клавиатуры */ /* считываем скан-код с клавиатуры по битно в переменную scan_code */ if ((count > 1 ) and (count < 11 ) ) { /* вырезаем из 11-и битного кадра, 8-и битные скан код */ |= (digitalRead (2 ) << m ) ; |