Inhoudsopgave:

Arduino PS/2 naar USB-adapter: 7 stappen (met afbeeldingen)
Arduino PS/2 naar USB-adapter: 7 stappen (met afbeeldingen)

Video: Arduino PS/2 naar USB-adapter: 7 stappen (met afbeeldingen)

Video: Arduino PS/2 naar USB-adapter: 7 stappen (met afbeeldingen)
Video: Makeblock Untimate Robot Kit Part 2 : Robtic Arm Explaine, Software, Code App and Having Fun demo 2024, Juli-
Anonim
Arduino PS/2 naar USB-adapter
Arduino PS/2 naar USB-adapter
Arduino PS/2 naar USB-adapter
Arduino PS/2 naar USB-adapter

Heb je ooit je oude PS/2-toetsenbord willen gebruiken met je laptop of nieuwe desktop-pc en ontdekte je dat ze geen PS/2-poorten meer hebben? En in plaats van een goedkope PS/2-naar-USB-adapter te kopen zoals een normaal persoon zou doen, wilde je je Arduino gebruiken als een PS/2-naar-USB-adapter. Dan ben je hier aan het juiste adres:)

Eerlijke waarschuwing voordat we erop ingaan. Wanneer u uw UNO/Mega als USB-HID-apparaat gebruikt (niet beperkt tot toetsenbord, het kan zelfs een muis, joystick, enz. zijn), verliest u tijdelijk zijn functies als Arduino. Daarmee bedoel ik dat je de seriële communicatie niet kunt gebruiken en je kunt hem niet herprogrammeren via de USB. Dit komt omdat we de firmware op de USB-interfacechip zullen overschrijven (klein mannetje in de buurt van de USB-poort Atmega8U2 en 16U2, afhankelijk van de revisie). Maar maak je geen zorgen, je kunt je UNO/Mega niet echt bricken door dit te doen, het is altijd omkeerbaar.

Ook als je toevallig een Arduino hebt die al een USB-HID-mogelijkheid heeft (Arduino Pro Micro of Leonardo, enz. Doe een Google-zoekopdracht), je kunt vergeten dat deze instructable ooit heeft bestaan, ga hier direct heen om jezelf te redden van een wereld van problemen, gewoon grapje!

Benodigdheden

  • Hardware

    • Arduino UNO of Mega
    • PS/2-toetsenbord
    • Optioneel kan een extra Arduino of elk soort USB-programmeur (USBasp, enz.) Van pas komen.
  • Software

    • Atmel FLIP
    • PS2KeyAdvanced-bibliotheek voor Arduino IDE

Stap 1: Bedrading en installatie

Bedrading en installatie
Bedrading en installatie
Bedrading en installatie
Bedrading en installatie
Bedrading en installatie
Bedrading en installatie
Bedrading en installatie
Bedrading en installatie

Afhankelijk van de situatie kun je een breakout-bord vinden of een oude poort van een moederbord redden (mijn 2e poging) of als je je bijzonder humeurig voelt, kun je zelfs de paarse aansluiting helemaal doorknippen en de 4 draden blootleggen (mijn 1e poging) en sluit ze aan op de UNO.

Toetsenbord_Arduino

+5V(VCC)_+5V

GROND_GND

KLOK_PIN 2**

GEGEVENS_PIN3*

* U kunt de DATA-pin wijzigen in wat u maar wilt, maar vergeet niet om de schets bij te werken.

**CLOCK moet worden aangesloten op een interrupt-pin op Arduino die alleen PIN 2 of 3 kan zijn (vergeet niet om de schets bij te werken) op een UNO. Voor meer informatie en verschillende bordconfiguraties kun je het commentaargedeelte van PS2KeyAdvanced-bibliotheekvoorbeelden raadplegen.

Stap 2: Toetsenbord testen

Voordat je alle hens aan dek gaat, moet je eerst controleren of alles werkt op toetsenbord en bibliotheek.

Hier heb ik een aangepaste versie van SimpleTest.ino uit PS2KeyAdvanced-bibliotheekvoorbeelden bijgevoegd met bijgewerkte klok- en gegevenspinnen en ook een "make" en "break" -weergave. Hier is enige uitleg voor de output.

  • Dit "make" en "break" scancode-systeem en "Code", de geïsoleerde (c & 0xFF) scancode van het indrukken of loslaten van een toets, speelt een belangrijke rol bij de conversie van PS/2 naar USB en ik raad je aan om dit te bestuderen de andere 2 voorbeelden die bij de bibliotheek worden geleverd om een beter begrip te krijgen als u van plan bent om de uiteindelijke schets te verbeteren of te wijzigen (sleutels opnieuw toe te wijzen aan verschillende lay-outs). U kunt ook een volledige lijst met PS/2-scancodes uit de bibliotheek halen door de bestanden 'PS2KeyAdvanced.h' of 'PS2KeyCode.h' te openen vanuit '\Documents\Arduino\libraries\PS2KeyAdvanced\src\'
  • "Statusbits" verwijst naar modificatietoetsen (Ctrl, Alt, Windows, Shift/Caps) en u zult zien dat met elke extra modificatietoets deze waarde verandert terwijl de hoofdcode van de normale (niet-modificatietoets) ongewijzigd blijft. Maar in de laatste schets heb ik deze methode buiten beschouwing gelaten en deze modificatietoetsen geïmplementeerd als eenvoudige toetsaanslagen (u zult zien dat deze modificatietoetsen ook een "make" en "break" scancode hebben, onafhankelijk van de normale toetsen, ongeacht of er meerdere toetsen worden ingedrukt.) omdat het dingen gemakkelijker maakt met het USB-HID-protocol.

Stap 3: PS/2 naar USB-conversievoorbeeld

Voordat we de Atmega8U2 of 16U2 (UNO Rev3) updaten om onze Arduino als een USB-toetsenbord te identificeren, moeten we ervoor zorgen dat alle conversie-dingen correct werken en dat de definitieve definitieve schets wordt geüpload, anders zal het een grote pijn zijn om de firmware keer op keer tussen de originele en USB-toetsenbord hex-bestanden, zodat u de juiste schets kon uploaden. Dit geldt vooral als je geen externe programmeur zoals een USBasp of een andere Arduino hebt om als ISP te gebruiken. Dus hier zullen we een 'DEBUG'-versie van de definitieve schets uploaden met een door mensen leesbare uitvoer (via de seriële monitor) om dingen uit te testen.

De uitvoer die u ziet, wordt als volgt geformatteerd wanneer elke toets wordt losgelaten, 00 00 00 00 00 00 00 00

Hier is een basisverklaring voor de verwachte output,

Voor elke nieuwe toetsdruk met meerdere modificaties zou u een nieuwe regel moeten krijgen met verschillende waarden voor 'xx'. Als u ten slotte alle modificatietoetsen loslaat, moet 'xx' 00 worden

xx 00 00 00 00 00 00 00

Voor elke nieuwe meervoudige normale toetsaanslagen (voor een voorbeeld zullen we zowel hypothetische toets a, toets b als toets c met de waarden 'xx', 'yy' en 'zz' in die volgorde indrukken) moet u continu krijgen (niet verplicht) nieuwe regels zoals deze,

00 00 xx yy zz 00 00 00

wanneer u alleen toets b loslaat, moet de uitvoer veranderen in,

00 00 xx 00 zz 00 00 00

en als u op nieuwe toets d met waarde 'nn' drukt zonder toets a of toets b los te laten, moet uw uitvoer veranderen in,

00 00 xx nn zz 00 00 00

en kom hier tenslotte op terug wanneer elke toets wordt losgelaten,

00 00 00 00 00 00 00 00

en ten slotte, als je op Caps Lock, Num Lock of Scroll Lock drukt, zou je zoiets moeten krijgen met meerdere regels tegelijk,

00 00 xx 00 00 00 00 00

00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00

Als alles hier gebeurt, ben je goud waard om door te gaan!

Stap 4: Technische uitleg

Technische uitleg
Technische uitleg
Technische uitleg
Technische uitleg

Als je wilt, kun je deze stap overslaan. Dit is slechts een verklaring voor de vorige outputs. De output 8 bytes array die je zag is geformatteerd volgens de bovenstaande fig.1. Je kunt hier veel meer over leren en ook hoe de statusbyte van de modificatietoetsen wordt geschreven vanuit deze wiki over USB-HID. Wat mijn code in feite doet, is dat elke keer dat een nieuwe toets wordt ingedrukt (PS/2-protocol verwijst hiernaar als 'make'), het door de laatste 6 bytes van de array gaat die worden gebruikt voor normale toetsaanslagen, en de eerste invult lege byte vindt hij met de relevante 'HID scancode' (weergegeven als in fig.2 Ook kunt u een volledige lijst vinden in de bijgevoegde PDF) voor de ontvangen 'PS/2 scancode'. En tot slot, wanneer de relevante sleutel wordt vrijgegeven (PS/2-protocol noemt dit 'break'), zal de code door de huidige byte-array bladeren en alleen de relevante byte wissen.

Als je tot hier hebt gevolgd en ook als je de wiki-pagina leest, zul je zien dat er een klein probleem is in deze methode, normaal gesproken wanneer de sleutel wordt vrijgegeven, in het HID-protocol worden de resterende bytes opnieuw gerangschikt om lege bytes kwijt te raken tussen de resterende niet-lege bytes. Maar om de een of andere reden, ongeacht op hoeveel manieren ik het probeerde, kon ik het niet laten werken zoals bedoeld zonder per ongeluk ook ongewenste bytes voor ingedrukte toetsen te wissen. Als je dit kunt verbeteren om het werkend te krijgen, laat dan een reactie achter. Hoewel dit probleem uiteindelijk geen invloed heeft op de functionaliteit van het toetsenbord, zolang de Arduino nog steeds elke ingedrukte toets registreert, ongeacht de volgorde waarin ze zijn ingedrukt (wat in praktisch gebruik niets beïnvloedt).

Stap 5: De definitieve schets uploaden

Dus voordat je eindelijk de firmware van Atmega8U2 of 16U2 (UNO Rev3) bijwerkt om onze Arduino als een USB-toetsenbord te identificeren, moeten we de Final Sketch uploaden. Nadat je dit hebt geüpload, als je naar de seriële monitor gaat, zul je zien dat het afval wordt afgedrukt met elke nieuwe toets die wordt ingedrukt. Dit is een goed voorteken dat alles werkt zoals bedoeld en we kunnen doorgaan naar de laatste stap. JAAAA!!!

Stap 6: De firmware bijwerken

Eindelijk kunt u de firmware van uw Arduino bijwerken om deze te registreren als USB-toetsenbord. Hiervoor ga ik niet in veel details ingaan, omdat dit te lang instructief zal zijn.

  1. Volg deze gids van arduino.cc over 'Updating the Atmega8U2 and 16U2 on a Uno of Mega2560 using DFU' maar gebruik in plaats van 'Arduino-usbserial-uno.hex' het bijgevoegde 'Arduino-keyboard-0.3.hex'
  2. Vergeet in FLIP niet om het doelapparaat te selecteren als Atmega8U2 of 16U2, afhankelijk van je Arduino, en kies uit het communicatiemedium USB en laad tenslotte het juiste hex-bestand voordat je run selecteert.
  3. Als je een driverfout tegenkomt, ga dan naar Windows Device Manager en selecteer om te zoeken naar de onbekende driver in de installatiemap van FLIP '\Program Files (x86)\Atmel\'
  4. Als je fouten tegenkomt tijdens het meerdere keren bijwerken van de firmware van FLIP, sluit je FLIP en voer je 'Reset Preferences' uit vanuit 'Start menu\FLIP\' en start je FLIP opnieuw en voer je de configuratiestappen uit voordat je het opnieuw probeert. Dit werkt meestal voor mij.
  5. Als je je Arduino in de oorspronkelijke staat wilt herstellen, volg dan de bovenstaande arduino.cc-handleiding naar de letter zonder dit hex-bestand te gebruiken.

Stap 7: Geniet van……

Genieten van……
Genieten van……

Geniet nu van uw pas geconverteerde PS/2 naar USB-toetsenbord… PS Deze Instructable is volledig geschreven vanaf een extern PS/2-toetsenbord dat via de Arduino op mijn laptop is aangesloten:)

Aanbevolen: