Innehållsförteckning:

Arduino PS/2 till USB -adapter: 7 steg (med bilder)
Arduino PS/2 till USB -adapter: 7 steg (med bilder)

Video: Arduino PS/2 till USB -adapter: 7 steg (med bilder)

Video: Arduino PS/2 till USB -adapter: 7 steg (med bilder)
Video: ЛЮБОВЬ С ДОСТАВКОЙ НА ДОМ (2020). Романтическая комедия. Хит 2024, Juli
Anonim
Arduino PS/2 till USB -adapter
Arduino PS/2 till USB -adapter
Arduino PS/2 till USB -adapter
Arduino PS/2 till USB -adapter

Har du någonsin velat använda ditt gamla PS/2 -tangentbord med din bärbara dator eller nya stationära dator och fått reda på att de inte har PS/2 -portar längre? Och sedan hellre än att köpa en billig PS/2 till USB -adapter som en vanlig person skulle göra, ville använda din Arduino som en PS/2 till USB -adapter. Då har du kommit till rätt ställe:)

Rättvis varning innan vi går in på det. När du använder din UNO/Mega som en USB-HID-enhet (inte begränsat till tangentbord, det kan till och med vara en mus, joystick, etc.) förlorar du tillfälligt dess funktioner som en Arduino. Med det menar jag att du inte kan använda seriekommunikationen och du kan inte omprogrammera den via USB. Detta beror på att vi kommer att skriva över firmware på dess USB-gränssnittschip (liten kille nära USB-porten Atmega8U2 och 16U2 beroende på revisionen). Men oroa dig inte, du kan faktiskt inte tegla din UNO/Mega genom att göra det, det är alltid reversibelt.

Även om du har en Arduino som redan har en USB-HID-funktion (Arduino Pro Micro eller Leonardo, etc gör en Google-sökning) kan du glömma att denna instruerbara någonsin existerade gå direkt hit för att rädda dig själv från en värld av problem, bara skojar!

Tillbehör

  • Hårdvara
    • Arduino UNO eller Mega
    • PS/2 -tangentbord
    • Eventuellt kan en extra Arduino eller någon form av USB -programmerare (USBasp, etc.) vara till nytta.
  • programvara
    • Atmel FLIP
    • PS2KeyAdvanced -bibliotek för Arduino IDE

Steg 1: Anslutning och installation

Kabeldragning och installation
Kabeldragning och installation
Kabeldragning och installation
Kabeldragning och installation
Kabeldragning och installation
Kabeldragning och installation
Kabeldragning och installation
Kabeldragning och installation

Beroende på situationen kan du antingen hitta en utbrottstavla eller rädda en gammal port från ett moderkort (mitt andra försök) eller om du känner dig särskilt humörig kan du till och med klippa av den lila kontakten och avslöja de 4 trådarna (mitt första försök) och anslut dem till UNO.

Tangentbord_Arduino

+5V (VCC) _+5V

GRUND_GND

CLOCK_PIN 2 **

DATA _ PIN3*

*Du kan ändra DATA -stiftet till vad du vill, men kom ihåg att uppdatera skissen.

** CLOCK måste anslutas till en avbrottsstift på Arduino som endast kan vara antingen PIN 2 eller 3 (kom ihåg att uppdatera skissen) på en UNO. För mer information och olika brädkonfigurationer kan du kontrollera kommentarsektionen i PS2KeyAdvanced -biblioteksexempel.

Steg 2: Testa tangentbord

Innan du går alla händer på däck måste du först se till att allt fungerar på tangentbord och bibliotek.

Här har jag bifogat en modifierad version av SimpleTest.ino från PS2KeyAdvanced biblioteksexempel med uppdaterad klocka och datapinnar och även en "make" och "break" representation. Här är en förklaring till utgången.

  • Detta "make" och "break" scancode-system och "Code" som är den isolerade (c & 0xFF) scancoden för antingen knapptryckning eller tangentutlösning spelar en viktig roll i PS/2 till USB-konvertering och jag rekommenderar dig att studera de andra två exemplen som följer med biblioteket för att få en bättre förståelse om du planerar att förbättra eller ändra (ommappa nycklar till olika layouter) den sista skissen. Du kan också få en fullständig lista över PS/2 -skanningskoder från biblioteket genom att öppna antingen 'PS2KeyAdvanced.h' eller 'PS2KeyCode.h' -filer från '\ Documents / Arduino / libraries / PS2KeyAdvanced / src \'
  • "Statusbits" avser modifieringstangenter (Ctrl, Alt, Windows, Shift/Caps) och du kommer att se att med varje ytterligare modifieringsnyckel ändras detta värde medan huvudkoden "normal" (icke-modifierande) nyckel är oförändrad. Men i slutskissen har jag bortsett från denna metod och implementerat dessa modifieringstangenter som enkla knapptryckningar (Du kommer att se att dessa modifieringstangenter också har "make" och "break" scancode oberoende av normala tangenter oavsett om flera tangenter trycks eller inte.) eftersom det underlättar med USB-HID-protokoll.

Steg 3: Förhandsvisning av PS/2 till USB -omvandling

Innan du uppdaterar Atmega8U2 eller 16U2 (UNO Rev3) för att identifiera vår Arduino som ett USB-tangentbord bör vi se till att alla konverteringsgrejer fungerar korrekt och att den sista slutskissen laddas upp eller annars blir det en stor smärta att fortsätta skriva över firmware igen och igen mellan original- och USB-tangentbordet hex-filer bara så att du kan ladda upp rätt skiss. Detta blir särskilt sant om du inte har någon extern programmerare som en USBasp eller en annan Arduino att använda som en ISP. Så här kommer vi att ladda upp en "DEBUG" -version av den sista skissen med en läsbar utmatning (via seriell bildskärm) för att testa saker.

Utmatningen du ser kommer att formateras så här när varje nyckel släpps, 00 00 00 00 00 00 00 00

Här är en grundläggande förklaring till den förväntade produktionen,

För varje ny tangenttryckning med flera modifierare bör du få en ny rad med olika värden för 'xx'. Slutligen när du släpper alla modifieringsnycklar 'xx' ska bli 00

xx 00 00 00 00 00 00 00 00

För varje ny multipel normal knapptryckning (för ett exempel trycker vi på både hypotetisk tangent a, tangent b och tangent c med värdena 'xx', 'yy' och 'zz' i den ordningen) bör du få kontinuerlig (inte obligatorisk) nya linjer som detta,

00 00 xx åå zz 00 00 00

när du bara släpper nyckel b bör utgången ändras till,

00 00 xx 00 zz 00 00 00

och om du trycker på ny knapp d med värdet 'nn' utan att släppa tangent a eller tangent b bör din utmatning ändras till,

00 00 xx nn zz 00 00 00

och slutligen återgå till detta när varje nyckel släpps,

00 00 00 00 00 00 00 00

och slutligen om du trycker på antingen Caps Lock, Num Lock eller Scroll Lock bör du få något liknande med flera rader samtidigt,

00 00 xx 00 00 00 00 00

00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00

Om allt här händer är du gyllene att fortsätta!

Steg 4: Teknisk förklaring

Teknisk förklaring
Teknisk förklaring
Teknisk förklaring
Teknisk förklaring

Om du vill kan du hoppa över det här steget. Detta är bara en förklaring till de tidigare utgångarna. Utmatningen 8 bytes array som du såg är formaterad enligt ovanstående fig.1 Du kan lära dig mycket mer om detta och även hur modifieringsknapparnas statusbyte skrivs från denna wiki om USB-HID. I grund och botten vad min kod gör är varje gång en ny tangent trycks (PS/2-protokollet kallar detta som 'make') den bläddrar igenom de sista 6 byten i matrisen som används för normala tangenttryckningar och fyller i den första tom byte den hittar med den relevanta 'HID scancode' (visas som i fig.2 Du kan också hitta en fullständig lista från bifogad PDF) för den mottagna 'PS/2 scancode'. Och slutligen när den relevanta nyckeln släpps (PS/2 -protokollet hänvisar till detta som "break") kommer koden att cykla genom den aktuella byte -arrayen och rensa endast den relevanta byten.

Om du följt till här och även om du läser wikisidan kommer du att se att det finns ett litet problem med den här metoden, normalt när nyckeln släpps, ordnas resterande byte i HID-protokollet för att bli av med tomma byte mellan återstående icke-tomma byte. Men av någon anledning oavsett hur många sätt jag försökte kunde jag inte få det att fungera som det var tänkt utan att oavsiktligt rensa oönskade byte för tryckta knappar också. Om du kan förbättra detta för att få det att fungera, lämna en kommentar. Även om detta i slutändan inte påverkar tangentbordets funktionalitet så länge Arduino fortfarande registrerar varje tangenttryckning oavsett deras tryckta ordning (vilket inte påverkar någonting i praktisk användning).

Steg 5: Ladda upp den sista skissen

Så innan du äntligen uppdaterar firmware för Atmega8U2 eller 16U2 (UNO Rev3) för att identifiera vår Arduino som ett USB -tangentbord måste vi ladda upp Final Sketch. När du har laddat upp det här, om du går till den seriella bildskärmen kommer du att se att det skriver ut skräp med varje ny knapp tryckt, detta är ett bra tecken på att allt fungerar som avsett och vi kan gå vidare till sista steget. JIPPIE!!!

Steg 6: Uppdatera firmware

Slutligen kan du uppdatera firmware på din Arduino för att registrera den som USB -tangentbord. För detta kommer jag inte att gå in på många detaljer eftersom det kommer att göra detta instruerbart för långt.

  1. Följ den här guiden från arduino.cc om 'Uppdatera Atmega8U2 och 16U2 på en Uno eller Mega2560 med DFU' men istället för att använda 'Arduino-usbserial-uno.hex' använd det bifogade 'Arduino-keyboard-0.3.hex'
  2. I FLIP kom ihåg att välja målenhet som Atmega8U2 eller 16U2 beroende på dig Arduino och från välj kommunikationsmedium välj USB och Slutligen Ladda rätt hex -fil innan du väljer kör.
  3. Om du stötte på ett drivrutinsfel, gå till Windows enhetshanteraren och välj för att söka efter den okända drivrutinen i installationskatalogen för FLIP '\ Program Files (x86) Atmel \'
  4. Om du stötte på fel när du uppdaterade firmware från FLIP flera gånger, stäng FLIP och kör 'Återställ inställningar' från 'Start -meny / FLIP \' och starta sedan om FLIP och gör konfigurationsstegen innan du försöker igen, det brukar fungera för mig.
  5. Om du vill återställa din Arduino till sitt ursprungliga tillstånd följer du ovanstående arduino.cc -guide till bokstaven utan att använda denna hex -fil.

Steg 7: Njut ……

Njut av……
Njut av……

Njut nu av ditt nyligen konverterade PS/2 till USB -tangentbord …. P. S. Denna instruktionsbok var helt skriven från ett externt PS/2 -tangentbord anslutet till min bärbara dator via Arduino:)

Rekommenderad: