Sommario:

Adattatore Arduino PS/2 a USB: 7 passaggi (con immagini)
Adattatore Arduino PS/2 a USB: 7 passaggi (con immagini)

Video: Adattatore Arduino PS/2 a USB: 7 passaggi (con immagini)

Video: Adattatore Arduino PS/2 a USB: 7 passaggi (con immagini)
Video: come riutilizzare una playstation 2 nel 2002 con una chiavetta usb 2024, Dicembre
Anonim
Adattatore da Arduino PS/2 a USB
Adattatore da Arduino PS/2 a USB
Adattatore da Arduino PS/2 a USB
Adattatore da Arduino PS/2 a USB

Hai mai desiderato usare la tua vecchia tastiera PS/2 con il tuo laptop o nuovo PC desktop e hai scoperto che non hanno più porte PS/2? E poi, invece di comprare un adattatore da PS/2 a USB economico come farebbe una persona normale, volevo usare il tuo Arduino come un adattatore da PS/2 a USB. Allora siete venuti nel posto giusto:)

Giusto avvertimento prima di entrare nel merito. Quando utilizzi il tuo UNO/Mega come dispositivo USB-HID (non limitato alla tastiera, può anche essere un mouse, un joystick, ecc.) perderai temporaneamente le sue funzioni come Arduino. Con questo intendo dire che non puoi usare le comunicazioni seriali e non puoi riprogrammarle tramite USB. Questo perché sovrascriveremo il firmware sul suo chip di interfaccia USB (piccolo vicino alla porta USB Atmega8U2 e 16U2 a seconda della revisione). Ma non preoccuparti, non puoi effettivamente murare il tuo UNO/Mega in questo modo è sempre reversibile.

Inoltre, per caso, se hai un Arduino che ha già una capacità USB-HID (Arduino Pro Micro o Leonardo, ecc. fai una ricerca su google) puoi dimenticare che questa istruzione sia mai esistita vai direttamente qui per salvarti da un mondo di problemi, basta prendendo in giro!

Forniture

  • Hardware

    • Arduino UNO o Mega
    • Tastiera PS/2
    • Facoltativamente, può tornare utile un Arduino aggiuntivo o qualsiasi tipo di programmatore USB (USBasp, ecc.).
  • Software

    • Atmel FLIP
    • Libreria PS2KeyAdvanced per Arduino IDE

Passaggio 1: cablaggio e configurazione

Cablaggio e configurazione
Cablaggio e configurazione
Cablaggio e configurazione
Cablaggio e configurazione
Cablaggio e configurazione
Cablaggio e configurazione
Cablaggio e configurazione
Cablaggio e configurazione

A seconda della situazione puoi trovare una scheda breakout o recuperare una vecchia porta da una scheda madre (il mio secondo tentativo) o se ti senti particolarmente lunatico puoi persino tagliare del tutto il jack viola ed esporre i 4 fili (il mio primo tentativo) e collegarli all'ONU.

Tastiera_Arduino

+5V(VCC)_+5V

TERRA_GND

OROLOGIO_PIN 2**

DATI_PIN3*

*Puoi cambiare il pin DATI in quello che vuoi, ma ricordati di aggiornare lo schizzo.

**CLOCK deve essere collegato a un pin di interruzione su Arduino che può essere solo PIN 2 o 3 (ricordarsi di aggiornare lo sketch) su UNO. Per maggiori informazioni e diverse configurazioni della scheda puoi controllare la sezione dei commenti degli esempi di libreria PS2KeyAdvanced.

Passaggio 2: test della tastiera

Prima di andare tutte le mani sul ponte, assicurati che tutto funzioni su tastiera e libreria.

Qui ho allegato una versione modificata di SimpleTest.ino da esempi di libreria PS2KeyAdvanced con pin di dati e clock aggiornati e anche una rappresentazione "make" e "break". Ecco alcune spiegazioni per l'output.

  • Questo sistema di scancode "make" e "break" e "Code" che è lo scancode isolato (c e 0xFF) della pressione o del rilascio del tasto gioca un ruolo importante nella conversione da PS/2 a USB e ti consiglio di studiare gli altri 2 esempi forniti con la libreria per capire meglio se hai intenzione di migliorare o modificare (rimappatura delle chiavi a diversi layout) lo schizzo finale. Inoltre puoi ottenere un elenco completo degli scancode PS/2 dalla libreria aprendo i file "PS2KeyAdvanced.h" o "PS2KeyCode.h" da "\Documents\Arduino\libraries\PS2KeyAdvanced\src\'
  • "Bit di stato" si riferisce ai tasti modificatori (Ctrl, Alt, Windows, Maiusc/Maiuscole) e vedrai che con ogni tasto modificatore aggiuntivo, questo valore cambia mentre il "Codice" principale del tasto normale (non modificatore) rimane invariato. Ma nello schizzo finale ho ignorato questo metodo e implementato questi tasti modificatori come semplici pressioni di tasti (Vedrai che questi tasti modificatori hanno anche scancode "make" e "break" indipendenti dai tasti normali indipendentemente dal fatto che vengano premuti più tasti.) perché rende le cose più facili con il protocollo USB-HID.

Passaggio 3: Anteprima di conversione da PS/2 a USB

Prima di aggiornare l'Atmega8U2 o 16U2 (UNO Rev3) per identificare il nostro Arduino come una tastiera USB, dovremmo assicurarci che tutte le cose di conversione funzionino correttamente e che lo schizzo finale sia caricato o altrimenti sarà un grosso problema continuare a sovrascrivere il firmware più e più volte tra i file esadecimali della tastiera originale e USB solo in modo da poter caricare lo schizzo corretto. Ciò diventa particolarmente vero se non si dispone di alcun programmatore esterno come un USBasp o un altro Arduino da utilizzare come ISP. Quindi qui caricheremo una versione "DEBUG" dello schizzo finale con un output leggibile dall'uomo (attraverso il monitor seriale) per testare le cose.

L'output che vedi sarà formattato in questo modo quando viene rilasciato ogni tasto, 00 00 00 00 00 00 00 00

Ecco una spiegazione di base per l'output previsto,

Per ogni nuova pressione del tasto modificatore multiplo dovresti ottenere una nuova riga con valori diversi per 'xx'. Infine, quando rilasci tutti i tasti modificatori, 'xx' dovrebbe diventare 00

xx 00 00 00 00 00 00 00 00

Per ogni nuova pressione di tasti multipla normale (per un esempio premeremo sia il tasto ipotetico a, il tasto b e il tasto c con i valori 'xx', 'yy' e 'zz' in quell'ordine) dovresti ottenere continuo (non obbligatorio) nuove righe come questa,

00 00 xx aa zz 00 00 00

quando rilasci solo il tasto b l'output dovrebbe cambiare in,

00 00 xx 00 zz 00 00 00

e se premi il nuovo tasto d con il valore 'nn' senza rilasciare il tasto a o il tasto b il tuo output dovrebbe cambiare in,

00 00 xx nn zz 00 00 00

e infine tornare a questo quando ogni tasto viene rilasciato,

00 00 00 00 00 00 00 00

e infine se premi Caps Lock, Num Lock o Scroll Lock dovresti ottenere qualcosa di simile con più righe contemporaneamente,

00 00 xx 00 00 00 00 00

00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00

Se tutto qui accade, sei d'oro per procedere!

Passaggio 4: spiegazione tecnica

Spiegazione tecnica
Spiegazione tecnica
Spiegazione tecnica
Spiegazione tecnica

Se vuoi puoi saltare questo passaggio. Questa è solo una spiegazione per le uscite precedenti. L'array di 8 byte di output che hai visto è formattato secondo la fig.1 sopra. Puoi imparare molto di più su questo e anche su come viene scritto il byte di stato dei tasti modificatori da questo wiki su USB-HID. Fondamentalmente ciò che fa il mio codice è ogni volta che viene premuto un nuovo tasto (il protocollo PS/2 si riferisce a questo come 'make') scorre gli ultimi 6 byte dell'array che vengono utilizzati per le normali pressioni dei tasti e compila il primo byte vuoto che trova con il relativo 'HID scancode' (mostrato come in fig.2 Inoltre è possibile trovare un elenco completo dal PDF allegato) per lo 'scancode PS/2' ricevuto. E infine, quando viene rilasciata la chiave pertinente (il protocollo PS/2 si riferisce a questo come 'break') il codice scorrerà l'array di byte corrente e cancellerà solo il byte pertinente.

Se hai seguito fino a qui e anche se leggi la pagina wiki vedrai che c'è un piccolo problema in questo metodo, normalmente quando la chiave viene rilasciata, nel protocollo HID i byte rimanenti vengono riorganizzati in modo da eliminare i byte vuoti tra i restanti byte non vuoti. Ma per qualche motivo, indipendentemente da quanti modi ho provato, non sono riuscito a farlo funzionare come previsto senza cancellare accidentalmente anche i byte indesiderati per i tasti premuti. Se puoi migliorarlo per farlo funzionare, lascia un commento. Sebbene alla fine della giornata questo problema non influisca sulla funzionalità della tastiera purché Arduino registri ancora ogni tasto premuto indipendentemente dall'ordine premuto (che non influisce su nulla nell'uso pratico).

Passaggio 5: caricamento dello schizzo finale

Quindi prima di aggiornare definitivamente il firmware di Atmega8U2 o 16U2 (UNO Rev3) per identificare il nostro Arduino come tastiera USB dobbiamo caricare il Final Sketch. Dopo averlo caricato, se vai al monitor seriale vedrai che stampa spazzatura con ogni nuovo tasto premuto, questo è un buon presagio che tutto funzioni come previsto e possiamo procedere al passaggio finale. SÌÌ!!!

Passaggio 6: aggiornamento del firmware

Finalmente puoi aggiornare il firmware del tuo Arduino per registrarlo come tastiera USB. Per questo non entrerò in molti dettagli in quanto renderà questo istruibile troppo a lungo.

  1. Segui questa guida da arduino.cc su "Aggiornamento dell'Atmega8U2 e 16U2 su uno Uno o Mega2560 usando DFU" ma invece di usare "Arduino-usbserial-uno.hex" usa l'allegato "Arduino-keyboard-0.3.hex"
  2. In FLIP ricordati di selezionare il dispositivo di destinazione come Atmega8U2 o 16U2 a seconda del tuo Arduino e, da selezionare il supporto di comunicazione scegli USB e infine Carica il file esadecimale corretto prima di selezionare Esegui.
  3. Se hai riscontrato un errore del driver, vai in Gestione dispositivi di Windows e seleziona per cercare il driver sconosciuto all'interno della directory di installazione di FLIP '\Programmi (x86)\Atmel\'
  4. Se hai riscontrato errori durante l'aggiornamento del firmware da FLIP più volte, chiudi FLIP ed esegui "Ripristina preferenze" da "Menu Start / FLIP \", quindi riavvia FLIP ed esegui i passaggi di configurazione prima di riprovare, di solito funziona per me.
  5. Se vuoi ripristinare Arduino al suo stato originale, segui alla lettera la guida arduino.cc sopra senza usare questo file esadecimale.

Passaggio 7: divertiti……

Godere……
Godere……

Ora goditi la tua tastiera da PS/2 a USB appena convertita… P. S. Questo Instructable è stato completamente scritto da una tastiera PS/2 esterna collegata al mio laptop tramite Arduino:)

Consigliato: