Ps 2 распиновка. Исходный код прошивки

Со временем возникает вопрос, как вводить данные в микроконтроллер ? Классическое решение, которое приходит большинство нам — использовать кнопки … протравить на плате дорожки и контактные площадки для кнопок , далее их припаять , решить как отслеживать нажатие кнопки — по прерыванию или через опрос состояния кнопок по циклу . Если кнопок много , они будут занимать значительное количество pin-ов микроконтроллера. Путь тернистый.

Микроконтроллер оценивает ключевую информацию на клавиатуре для генерации кода сканирования клавиатуры. Чтобы неправильно вставить кабель, на штепселе находится стрелка маркировки или вмятина на экранирующей пластине, которая затем должна указывать вверх.

Назначение вышеуказанных соединений

Назначение контактов показано в таблице 2. Является внешним источником питания для клавиатуры и мыши. Без необходимости покупать новую материнскую плату. Компьютерная мышь была подключена к последовательному интерфейсу.

  • Этого недостаточно для быстрого самосвала.
  • Таким образом, латентность ниже.
Разъемы для мыши и клавиатуры механически идентичны. Только занятость отличается. Розетки и заглушки отмечены цветом, чтобы избежать путаницы. Зеленый цвет означает мышь, а фиолетовый - клавиатура. Есть, однако, также разъемы и разъемы, которые не имеют этого цветового кодирования.

Я предлагаю использовать, то что у нас под рукой — простую PS/2 компьютерную клавиатуру . Из плюсов:

  • вещь не дорогая;
  • продается в любом компьютерном магазине
  • нам доступно 101 клавиша
  • займет клавиатура всего 2-pin микроконтроллера для синхросигнала и данных.



В качестве микроконтроллера я буду использовать ATmega328P или Arduino UNO .

Исходный код прошивки

Они используются для различных электронных устройств. Оба разъема являются стандартами Германского института стандартизации. Есть официально семь различных вариантов с разным числом контактов. Структурные различия гарантируют, что различные разъемы и разъемы не могут быть заменены.

Мнение клиента: Буклет с компьютерной технологией действительно понятен, свободен от балласта и отличного справочника. В целом, очень рекомендуемая книга. Для каждого нажатия или отпускания ключа микроконтроллер отправляет идентификационный код, который называется кодом сканирования. Для одновременного нажатия нескольких клавиш клавиатура генерирует другой код при нажатии клавиши и при отпускании клавиши. Если микроконтроллер замечает, что клавиша нажата, новый сгенерированный код будет иметь значение увеличенной пульсации дюйма Следует учитывать, что при выполнении импульса мы можем производить подборы, которые дублируют сигнал.

Немного теории

Если вы вскроете оплетку кабеля для клавиатуры, то вы обнаружите 4-е провода :

  • провод питания (5 В)
  • провод земли
  • провод синхросигнала (CLK)
  • провод данных (DATA )

Каждая клавиша на клавиатуре имеет свой 8-и битный код , называемый скан-кодом и записывается в шестнадцатеричном виде (HEX), смотри ниже.

Чтобы устранить их, клавиатура также имеет схему, которая очищает сигнал. Существуют различные раскладки клавиатуры, созданные для пользователей разных языков. Вариант этого используется пользователями английского языка. Современные компьютеры позволяют использовать клавиатуры на разных языках для клавиатуры, которые физически соответствуют одному языку. Эти дистрибутивы могут быть модификациями ранее существовавших, или они могут быть совершенно новыми. Они позволяют вам управлять и обмениваться данными между одним и разными периферийными устройствами или между двумя компьютерами.


Когда вы нажимаете на клавишу , по SLK передаются прямоугольные импульсы а по DATA 11-и битный код:


Биты данных считываются компьютером при переходе CLK с высокого уровня на низкий.

Между различными портами связи мы имеем. В сегодняшних бляшках можно выделить один из его его, будучи клавиатурой, фиолетовой, а мышь - зеленой. 3 Форма: для этих портов имеется 2 разных разъема. Эти два разъема являются электронно одинаковыми, единственное, что меняется, - это их внешний вид. Материнская плата имеет гнездовой разъем. . Двунаправленный порт способен отправлять. 8-битный вход и выход. Сегодня в многофункциональных принтерах этот порт можно назвать двунаправленным.

Эти порты имеют женский тип длиной около 38 мм с 25 контактами, сгруппированными в два ряда. Параллельный порт состоит из 17 строк и 8 строк. Сигнальные линии формируются тремя. Расположение в компьютерной системе. . Кабель имеет охватываемый разъем в центре, окруженный небольшим металлическим кольцом, выступающим. Со стороны устройства разъем представляет собой отверстие, покрытое другим металлическим кольцом, которое меньше, чем у кабеля, так что оно удерживается без него.

Первый бит всегда равен 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 ), от нас требуется подключить проводки по следующей распиновки.

Это программная идея, с которой можно привыкнуть, но сила, которую она дает во встроенной системе, стоит того. Простота протокола и асинхронный характер часов, генерируемых клавиатурой, делают этот простой запуск для ознакомления с прерываниями и обработчиками прерываний.

Первый шаг - выяснить, какой провод является. Надеюсь, после того, как вы отключите разъем, вы увидите, что в кабеле клавиатуры есть 4 цветных провода. Теперь вам нужно выяснить, какой провод является. Вы можете сделать это с помощью мультиметра и проверить сопротивление от данного штыря на разъеме до конца обрезания провода. Как только вы узнаете, какой провод является, это хорошая идея отметить его или, по крайней мере, записать его где-нибудь.

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


В вашем случае концы проводков вы можете припаять к плате микроконтроллера , я буду использовать pin-ы Arduino UNO .

Чтобы отправить ход клавиш, клавиатура начинает движение по часовой стрелке. На заднем фронте линии синхронизации линия данных представляет текущий бит. Каждое нажатие клавиши отправляется как 11 бит: сначала бит начала 0, затем 8 бит кода сканирования, затем бит четности и, наконец, бит остановки.

Как и печальный случай со стандартами и протоколами, обычно существует несколько разных версий. Несмотря на то, что большинство общих символов представлены одним 8-битным кодом сканирования, некоторые из них являются «расширенными» ключами, чей код сканирования более 8 бит. В этом случае клавиатура просто отправляет два набора из 11 бит кадров.

  • 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)<11) { Serial.print(scan_code,HEX); /* ВЫВОДИМ */ Serial.println(); m=0; count=1; scan_code=0; } } void setup() { delay(1000); Serial.begin(9600); pinMode(DataPin, INPUT); pinMode(IRQpin, INPUT); attachInterrupt(1, ps2interrupt, FALLING); //посадим на прерывание от 3 pin (канал клавиатуры CLK) обработчик ps2interrupt Serial.begin(9600); } void loop() { delay(1000); }

Это необходимо для глобальных переменных, которые могут быть заданы обработчиком прерываний, а затем прочитаны либо основным кодом, либо другим обработчиком прерываний. Это ключевое слово говорит компилятору не делать каких-либо предположений о том, когда или как переменная может измениться. Всякий раз, когда вы имеете дело с прерываниями, вам нужно подумать о том, как долго будет выполняться прерывание. Например, в этом проекте клавиатура отправляет данные примерно в 10 кГц. Мы не говорим, что не стоит долго работать с обработчиками прерываний, которые много обрабатывают, но вам просто нужно знать, сколько времени вам нужно для обработки, и каков эффект отсутствия других прерываний.

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 ) ;

Вторник, 04 Февраля 2014 г. 11:33 + в цитатник

Итак произошел отказ мышки PS/2. Дефекты причём могут быть разными, например мышка начала при одном нажатии на клавишу выдавать два нажатия. Почему в качестве примера я привёл этот дефект? Потому, что в этом случае сложно свалить на неисправность кнопки. И в мастерскую такую мышку не понесёшь, так как ремонт мышки обойдётся как минимум вдвое дороже чем покупка новой. Так, что можно выбрасывать мышку? Совсем необязательно если у вас есть некоторые навыки в ремонте (например умение аккуратно провести пайку) или если у вас есть знакомый обладающий этими навыками и ему не жалко десяти минут для вас.

Распайка разъёма мыши PS/2

№ п/п

Сигнал

1 Data
2 не задействован
3 Ground
4 +5V
5 Clock
6 не задействован

Ремонт компьютерной мышки PS/2

Основная причина всех встречающихся дефектов мышки это ухудшение проводимости провода. Дефект очень легко вычисляется с помощью омметра. На исправной жиле провода омметр будет показывать 1-10 Ом, а если жила неисправна от 150 Ом и выше.

Теперь как ремонтировать. Сам разъём PS/2 не разборной, но как выяснилось он нам и не нужен. Как выяснилось неисправность кроется на участке провода от внутреннего разъёма мыши и до выхода провода из мыши. (Почему-то все производителе с относительно недавнего времени решили, что в этом месте должен быть переход с внутренней проводки на внешнюю + именно в месте выхода провода из мышки бывает самая большая нагрузка на провод). В общем выкусываем этот участок провода, (можно пойти двумя путями просто откусить край провода со стороны мышки и запаять его снова в мышку или выкусить участок и спаять провод (я предпочитаю второй вариант (всё равно стык будет внутри мышки))) зачищаем и залуживаем жилы кабеля, и восстанавливаем целостность провода. (Кстати сразу после выкусывания проверяем целостность жил провода)



Понравилась статья? Поделиться с друзьями: