Съдържание:

Arduino PS/2 към USB адаптер: 7 стъпки (със снимки)
Arduino PS/2 към USB адаптер: 7 стъпки (със снимки)

Видео: Arduino PS/2 към USB адаптер: 7 стъпки (със снимки)

Видео: Arduino PS/2 към USB адаптер: 7 стъпки (със снимки)
Видео: 1. Q Light Controller + Първи стъпки с QLC +. Принадлежности и функции 2024, Ноември
Anonim
Arduino PS/2 към USB адаптер
Arduino PS/2 към USB адаптер
Arduino PS/2 към USB адаптер
Arduino PS/2 към USB адаптер

Искали ли сте някога да използвате старата си PS/2 клавиатура с вашия лаптоп или нов настолен компютър и разбрахте, че те вече нямат PS/2 портове? И тогава вместо да отидете да си купите евтин PS/2 към USB адаптер, както би направил нормален човек, искаше да използва вашия Arduino като адаптер PS/2 към USB. Тогава сте попаднали на правилното място:)

Справедливо предупреждение, преди да влезем в него. Когато използвате вашето UNO/Mega като USB-HID устройство (Не се ограничава до клавиатура, може дори да е мишка, джойстик и т.н.), временно ще загубите функциите му като Arduino. С това искам да кажа, че не можете да използвате серийната комуникация и не можете да я препрограмирате чрез USB. Това е така, защото ще надпишем фърмуера на неговия USB интерфейсен чип (малко момче близо до USB порта Atmega8U2 и 16U2 в зависимост от ревизията). Но не се притеснявайте, че всъщност не можете да тухлите вашия UNO/Mega, като направите това, той винаги е обратим.

Също така случайно, ако имате Arduino, който вече има USB-HID способност (Arduino Pro Micro или Leonardo и т.н. направете търсене в Google), можете да забравите, че тази инструкция някога е съществувала, отидете директно тук, за да се спасите от свят на проблеми, просто шегувам се!

Консумативи

  • Хардуер

    • Arduino UNO или Mega
    • PS/2 клавиатура
    • По желание допълнителен Arduino или всякакъв вид USB програмист (USBasp и т.н.) може да бъде полезен.
  • Софтуер

    • Atmel FLIP
    • PS2Key Разширена библиотека за Arduino IDE

Стъпка 1: Окабеляване и настройка

Окабеляване и настройка
Окабеляване и настройка
Окабеляване и настройка
Окабеляване и настройка
Окабеляване и настройка
Окабеляване и настройка
Окабеляване и настройка
Окабеляване и настройка

В зависимост от ситуацията можете или да намерите пробивна дъска, или да спасите старо пристанище от дънна платка (вторият ми опит), или ако се чувствате особено мрачни, можете дори да отрежете напълно лилавия жак и да изложите 4 -те проводника (първият ми опит) и свържете ги с UNO.

Клавиатура _ Arduino

+5V (VCC) _+5V

ЗАЗЕМЛЕНИЕ_GND

ЧАСОВНИК _ ПИН 2 **

ДАННИ _ ПИН3*

*Можете да промените щифта на DATA на това, което искате, но не забравяйте да актуализирате скицата.

** CLOCK трябва да бъде свързан към прекъсващ щифт на Arduino, който може да бъде само PIN 2 или 3 (не забравяйте да актуализирате скицата) на UNO. За повече информация и различни конфигурации на дъската можете да проверите секцията за коментари на PS2KeyAdvanced библиотечни примери.

Стъпка 2: Тестване на клавиатурата

Преди да отидете с всички ръце на палубата, първо се уверете, че всичко работи на клавиатурата и библиотеката.

Тук съм приложил модифицирана версия на SimpleTest.ino от PS2KeyAdvanced библиотечни примери с актуализиран часовник и пинове за данни, както и представяне „make“и „break“. Ето някои обяснения за изхода.

  • Тази „make“и „break“система за сканиране и „Code“, която е изолиран (c & 0xFF) код за сканиране или при натискане на клавиш, или при освобождаване на клавиши, играе важна роля при преобразуването на PS/2 в USB и ви препоръчвам да изучите другите 2 примера, които се доставят с библиотеката, за да разберете по -добре, ако планирате да подобрите или промените (пренасочване на ключове към различни оформления) крайната скица. Също така можете да получите пълен списък с PS/2 сканиращи кодове от библиотеката, като отворите файлове „PS2KeyAdvanced.h“или „PS2KeyCode.h“от „\ Documents / Arduino / libraries / PS2KeyAdvanced / src \“
  • "Битове на състоянието" се отнася до модификаторните клавиши (Ctrl, Alt, Windows, Shift/Caps) и ще видите, че с всеки допълнителен модификаторен ключ тази стойност се променя, докато основният "код" на нормалния (немодифициращ) ключ е непроменен. Но в последната скица пренебрегнах този метод и приложих тези модификаторни клавиши като прости натискания на клавиши (Ще видите, че тези модификаторни клавиши също имат „make“и „break“сканиращ код, независим от нормалните клавиши, независимо дали са натиснати няколко клавиша.) защото улеснява нещата с USB-HID протокол.

Стъпка 3: Преглед на PS/2 към USB преобразуване

Преди да актуализираме Atmega8U2 или 16U2 (UNO Rev3), за да идентифицираме нашия Arduino като USB клавиатура, трябва да се уверим, че всички неща за преобразуване работят правилно и последната финална скица е качена, или в противен случай ще бъде голяма болка да продължите да пишете фърмуер отново и отново между оригиналните и USB-клавиатурните шестнадесетични файлове, само за да можете да качите правилната скица. Това става особено вярно, ако нямате външен програмист като USBasp или друг Arduino, който да използвате като ISP. Така че тук ще качим „DEBUG“версия на последната скица с четим от човека изход (през серийния монитор), за да тестваме нещата.

Изходът, който виждате, ще бъде форматиран така, когато всеки ключ бъде освободен, 00 00 00 00 00 00 00 00

Ето основно обяснение за очаквания резултат,

За всяко ново натискане на клавиш с множество модификатори трябва да получите нов ред с различни стойности за 'xx'. И накрая, когато освободите всички модификаторни клавиши „xx“трябва да стане 00

xx 00 00 00 00 00 00 00

За всяко ново многократно нормално натискане на клавиши (за пример ще натискаме както хипотетичен клавиш a, ключ b и ключ c със стойности „xx“, „yy“и „zz“в този ред) трябва да получавате непрекъснато (не е задължително) нови редове като тази,

00 00 xx yy zz 00 00 00

когато отпуснете само клавиш b, изходът трябва да се промени на,

00 00 xx 00 zz 00 00 00

и ако натиснете нов клавиш d със стойност 'nn', без да отпускате клавиш a или ключ b, вашият изход трябва да се промени на,

00 00 xx nn zz 00 00 00

и накрая се върнете към това, когато всеки ключ бъде освободен,

00 00 00 00 00 00 00 00

и накрая, ако натиснете Caps Lock, Num Lock или Scroll Lock, трябва да получите нещо подобно с няколко реда едновременно,

00 00 xx 00 00 00 00 00

00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00

Ако всичко тук се случи, вие сте златни, за да продължите!

Стъпка 4: Техническо обяснение

Техническо обяснение
Техническо обяснение
Техническо обяснение
Техническо обяснение

Ако искате, можете да пропуснете тази стъпка. Това е само обяснение за предишните резултати. Изходният 8-байтов масив, който видяхте, е форматиран съгласно горната фиг.1 Можете да научите много повече за това, както и как байтът за състоянието на ключовете на модификатора се записва от тази уики за USB-HID. По принцип моят код прави всеки път, когато се натисне нов клавиш (протокол PS/2 нарича това „make“), той преминава през последните 6 байта от масива, които се използват за нормално натискане на клавиши, и попълва първия празен байт, който намира със съответния „HID код за сканиране“(показан на фиг. 2 Също така можете да намерите пълен списък от прикачения PDF) за получения „PS/2 сканиращ код“. И накрая, когато съответният ключ бъде освободен (протоколът PS/2 нарича това „прекъсване“), кодът ще премине през текущия байтов масив и ще изчисти само съответния байт.

Ако сте следвали до тук, а също и ако прочетете уики страницата, ще видите, че има малък проблем в този метод, обикновено при освобождаване на ключа, в HID протокола останалите байтове се пренареждат така, че да се отървете от празните байтове между останалите непразни байтове. Но по някаква причина, независимо от начина, по който опитах, не успях да го накарам да работи по предназначение, без случайно да изчистя нежеланите байтове и за натиснатите клавиши. Ако можете да подобрите това, за да работи, моля, оставете коментар. Въпреки че в крайна сметка този проблем не засяга функционалността на клавиатурата, стига Arduino да регистрира всяко натискане на клавиш, независимо от реда на натискане (което не влияе на нищо в практическата употреба).

Стъпка 5: Качване на последната скица

Така че преди най -накрая да актуализирате фърмуера на Atmega8U2 или 16U2 (UNO Rev3), за да идентифицирате нашия Arduino като USB клавиатура, трябва да качим Final Sketch. След като качите това, ако отидете на серийния монитор, ще видите, че той отпечатва боклук с всеки натиснат нов клавиш, това е добра поличба, че всичко работи по предназначение и можем да преминем към последната стъпка. ДА !!!

Стъпка 6: Актуализиране на фърмуера

Накрая можете да актуализирате фърмуера на вашия Arduino, за да го регистрирате като USB клавиатура. За това няма да навлизам в много подробности, тъй като това ще направи тази инструкция твърде дълга.

  1. Следвайте това ръководство от arduino.cc относно „Актуализиране на Atmega8U2 и 16U2 на Uno или Mega2560 с помощта на DFU“, но вместо да използвате „Arduino-usbserial-uno.hex“, използвайте свързаната „Arduino-keyboard-0.3.hex“
  2. В FLIP не забравяйте да изберете целевото устройство като Atmega8U2 или 16U2 в зависимост от вас Arduino и от избора на комуникационен носител изберете USB и накрая Заредете правилния шестнадесетичен файл, преди да изберете run.
  3. Ако сте срещнали грешка в драйвера, отидете в диспечера на устройства с Windows и изберете да потърсите неизвестния драйвер в директорията за инсталиране на FLIP '\ Program Files (x86) Atmel \'
  4. Ако сте се сблъскали с грешки при актуализиране на фърмуера от FLIP няколко пъти, затворете FLIP и стартирайте „Нулиране на предпочитанията“от „Старт меню / FLIP \“и след това рестартирайте FLIP и направете стъпките за конфигуриране, преди да опитате отново, това обикновено работи при мен.
  5. Ако искате да възстановите Arduino в първоначалното му състояние, просто следвайте горното ръководство arduino.cc към буквата, без да използвате този шестнадесетичен файл.

Стъпка 7: Насладете се на ……

Наслади се……
Наслади се……

Сега се насладете на новоконвертираната PS/2 в USB клавиатура …. P. S. Този Instructable е изцяло написан от външна PS/2 клавиатура, свързана към моя лаптоп чрез Arduino:)

Препоръчано: