Spisu treści:

Przejściówka Arduino PS/2 na USB: 7 kroków (ze zdjęciami)
Przejściówka Arduino PS/2 na USB: 7 kroków (ze zdjęciami)

Wideo: Przejściówka Arduino PS/2 na USB: 7 kroków (ze zdjęciami)

Wideo: Przejściówka Arduino PS/2 na USB: 7 kroków (ze zdjęciami)
Wideo: Ten pendrive niszczy komputer ⚠️ Oto jak działa! 2024, Lipiec
Anonim
Przejściówka Arduino PS/2 na USB
Przejściówka Arduino PS/2 na USB
Przejściówka Arduino PS/2 na USB
Przejściówka Arduino PS/2 na USB

Czy kiedykolwiek chciałeś użyć swojej starej klawiatury PS/2 z laptopem lub nowym komputerem stacjonarnym i dowiedziałeś się, że nie mają już portów PS/2? A potem, zamiast kupować tani adapter PS/2 na USB, tak jak zrobiłby to normalny człowiek, chciałem użyć Arduino jako adaptera PS/2 na USB. Trafiłeś we właściwe miejsce:)

Uczciwe ostrzeżenie, zanim w to wejdziemy. Kiedy używasz UNO/Mega jako urządzenia USB-HID (nie ogranicza się do klawiatury, może to być nawet mysz, joystick itp.), tymczasowo utracisz funkcje Arduino. Mam na myśli to, że nie możesz używać komunikacji szeregowej i nie możesz jej przeprogramować przez USB. Dzieje się tak, ponieważ będziemy nadpisywać oprogramowanie układowe na chipie interfejsu USB (mały facet w pobliżu portu USB Atmega8U2 i 16U2 w zależności od wersji). Ale nie martw się, nie możesz tak naprawdę zepsuć swojego UNO/Mega, robiąc to, zawsze jest to odwracalne.

Również przez przypadek, jeśli masz Arduino, które ma już funkcję USB-HID (Arduino Pro Micro lub Leonardo itp., Wyszukuj w Google), możesz zapomnieć o tej instrukcji, która kiedykolwiek istniała, przejdź bezpośrednio tutaj, aby uratować się od świata kłopotów, po prostu żartuję!

Kieszonkowe dzieci

  • Sprzęt komputerowy

    • Arduino UNO lub Mega
    • Klawiatura PS/2
    • Opcjonalnie może się przydać dodatkowy Arduino lub dowolny programator USB (USBasp itp.).
  • Oprogramowanie

    • Atmel FLIP
    • Biblioteka PS2KeyAdvanced dla Arduino IDE

Krok 1: Okablowanie i konfiguracja

Okablowanie i konfiguracja
Okablowanie i konfiguracja
Okablowanie i konfiguracja
Okablowanie i konfiguracja
Okablowanie i konfiguracja
Okablowanie i konfiguracja
Okablowanie i konfiguracja
Okablowanie i konfiguracja

W zależności od sytuacji możesz znaleźć tablicę zaciskową lub uratować stary port z płyty głównej (moja druga próba) lub jeśli czujesz się wyjątkowo nastrojowy, możesz nawet całkowicie odciąć fioletową wtyczkę i odsłonić 4 przewody (moja pierwsza próba) i podłącz je do ONZ.

Klawiatura_Arduino

+5V(VCC)_+5V

UZIEMIENIE_GND

ZEGAR_PIN 2**

DANE_PIN3*

*Możesz zmienić kod PIN DANYCH na dowolny, ale pamiętaj, aby zaktualizować szkic.

**ZEGAR musi być podłączony do pinu przerwania w Arduino, który może być tylko PIN 2 lub 3 (pamiętaj, aby zaktualizować szkic) na UNO. Aby uzyskać więcej informacji i różne konfiguracje płyt, możesz sprawdzić sekcję komentarzy w przykładowych bibliotekach PS2KeyAdvanced.

Krok 2: Testowanie klawiatury

Zanim przejdziesz wszystkie ręce na pokład, najpierw upewnij się, że wszystko działa na klawiaturze i bibliotece.

Tutaj załączyłem zmodyfikowaną wersję SimpleTest.ino z przykładów biblioteki PS2KeyAdvanced ze zaktualizowanymi pinami zegara i danych, a także reprezentacją „make” i „break”. Oto wyjaśnienie wyników.

  • Ten system skanowania „make” i „break” oraz „Code”, który jest izolowanym (c i 0xFF) skankodem po naciśnięciu klawisza lub zwolnieniu klawisza, odgrywa ważną rolę w konwersji PS/2 na USB i polecam ci studiowanie pozostałe 2 przykłady, które są dostarczane z biblioteką, aby lepiej zrozumieć, jeśli planujesz ulepszyć lub zmienić (przemapować klawisze do różnych układów) ostateczny szkic. Możesz również uzyskać pełną listę skankodów PS/2 z biblioteki, otwierając pliki „PS2KeyAdvanced.h” lub „PS2KeyCode.h” z „\Documents\Arduino\libraries\PS2KeyAdvanced\src\”
  • „Bity stanu” odnoszą się do klawiszy modyfikujących (Ctrl, Alt, Windows, Shift/Caps) i zobaczysz, że z każdym dodatkowym klawiszem modyfikującym ta wartość się zmienia, podczas gdy główny „Kod” normalnego (bez modyfikatora) klawisza pozostaje niezmieniony. Ale w końcowym szkicu zignorowałem tę metodę i zaimplementowałem te klawisze modyfikujące jako proste naciśnięcia klawiszy (Zobaczysz, że te klawisze modyfikujące mają również kod skanowania "make" i "break" niezależny od normalnych klawiszy, niezależnie od tego, czy naciśnięto wiele klawiszy.) ponieważ ułatwia to dzięki protokołowi USB-HID.

Krok 3: Podgląd konwersji PS/2 na USB

Przed aktualizacją Atmega8U2 lub 16U2 (UNO Rev3) w celu zidentyfikowania naszego Arduino jako klawiatury USB, powinniśmy upewnić się, że wszystkie elementy konwersji działają poprawnie, a ostateczny szkic jest przesłany, w przeciwnym razie będzie to duży problem, aby nadpisywać oprogramowanie układowe raz za razem między oryginalnymi plikami szesnastkowym klawiatury i USB, aby można było przesłać poprawny szkic. Staje się to szczególnie prawdziwe, jeśli nie masz żadnego zewnętrznego programatora, takiego jak USBasp lub inny Arduino, którego mógłbyś używać jako ISP. Więc tutaj prześlemy wersję „DEBUG” ostatecznego szkicu z czytelnym dla człowieka wyjściem (przez monitor szeregowy), aby przetestować rzeczy.

Widoczne dane wyjściowe będą sformatowane w ten sposób po zwolnieniu każdego klawisza, 00 00 00 00 00 00 00 00

Oto podstawowe wyjaśnienie oczekiwanego wyniku,

Dla każdego nowego naciśnięcia klawisza z wielokrotnym modyfikatorem powinien pojawić się znak nowej linii z różnymi wartościami „xx”. Wreszcie po zwolnieniu wszystkich klawiszy modyfikujących 'xx' powinno zmienić się na 00

xx 00 00 00 00 00 00 00

Dla każdego nowego wielokrotnego normalnego naciśnięcia klawisza (na przykład naciśniemy oba hipotetyczne klawisze a, klawisz b i klawisz c z wartościami 'xx', 'yy' i 'zz' w tej kolejności) powinieneś uzyskać ciągłość (nieobowiązkowe) nowe linie takie jak ta,

00 00 xx rr zz 00 00 00

gdy zwolnisz tylko klawisz b, wyjście powinno zmienić się na,

00 00 xx 00 zz 00 00 00

a jeśli naciśniesz nowy klawisz d z wartością 'nn' bez zwalniania klawisza a lub klawisza b twoje wyjście powinno zmienić się na,

00 00 xx nn zz 00 00 00

i wreszcie wróć do tego, gdy każdy klawisz zostanie zwolniony,

00 00 00 00 00 00 00 00

i na koniec, jeśli naciśniesz Caps Lock, Num Lock lub Scroll Lock, powinieneś otrzymać coś takiego z wieloma liniami jednocześnie,

00 00 xx 00 00 00 00 00

00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00

Jeśli wszystko się tutaj wydarzy, jesteś złoty, aby kontynuować!

Krok 4: Wyjaśnienie techniczne

Wyjaśnienie techniczne
Wyjaśnienie techniczne
Wyjaśnienie techniczne
Wyjaśnienie techniczne

Jeśli chcesz, możesz pominąć ten krok. To tylko wyjaśnienie poprzednich wyników. Wyjściowa tablica 8 bajtów, którą widziałeś, jest sformatowana zgodnie z powyższym rys. 1. Możesz dowiedzieć się więcej na ten temat, a także o tym, jak bajt stanu klawiszy modyfikujących jest zapisywany z tej wiki o USB-HID. Zasadniczo to, co robi mój kod, to za każdym razem, gdy zostanie naciśnięty nowy klawisz (protokół PS/2 nazywa to „make”), przechodzi przez ostatnie 6 bajtów tablicy, które są używane do normalnych naciśnięć klawiszy, i wypełnia pierwszy pusty bajt, który znajduje z odpowiednim „skanem HID” (pokazano jak na rys. 2 Można również znaleźć pełną listę z załączonego pliku PDF) dla otrzymanego „skanowania PS/2”. I wreszcie, gdy odpowiedni klucz zostanie zwolniony (protokół PS/2 nazywa to „przerwą”), kod przejdzie przez bieżącą tablicę bajtów i wyczyści tylko odpowiedni bajt.

Jeśli podążałeś do tego miejsca, a także czytałeś stronę wiki, zobaczysz, że jest mały problem w tej metodzie, zwykle po zwolnieniu klawisza, w protokole HID pozostałe bajty zostają uporządkowane, aby pozbyć się pustych bajtów między pozostałymi niepustymi bajtami. Ale z jakiegoś powodu, niezależnie od tego, na ile sposobów próbowałem, nie mogłem go uruchomić zgodnie z przeznaczeniem bez przypadkowego wyczyszczenia niechcianych bajtów dla naciśniętych klawiszy. Jeśli możesz to poprawić, aby działało, zostaw komentarz. Chociaż w ostatecznym rozrachunku ten problem nie wpływa na funkcjonalność klawiatury, o ile Arduino rejestruje każde naciśnięcie klawisza niezależnie od kolejności wciskania (co nie wpływa na nic w praktycznym użytkowaniu).

Krok 5: Przesyłanie ostatecznego szkicu

Więc zanim w końcu zaktualizujesz oprogramowanie Atmega8U2 lub 16U2 (UNO Rev3), aby zidentyfikować nasze Arduino jako klawiaturę USB, musimy przesłać ostateczny szkic. Po przesłaniu tego, jeśli przejdziesz do monitora szeregowego, zobaczysz, że drukuje śmieci z każdym nowym wciśniętym klawiszem, to dobry znak, że wszystko działa zgodnie z przeznaczeniem i możemy przejść do ostatniego kroku. TAK!!!

Krok 6: Aktualizacja oprogramowania sprzętowego

Na koniec możesz zaktualizować oprogramowanie układowe swojego Arduino, aby zarejestrować je jako klawiaturę USB. W tym celu nie będę się zagłębiał w szczegóły, ponieważ sprawi to, że będzie to zbyt długie.

  1. Postępuj zgodnie z tym przewodnikiem z arduino.cc na temat „Aktualizacji Atmega8U2 i 16U2 na Uno lub Mega2560 przy użyciu DFU”, ale zamiast używać „Arduino-usbserial-uno.hex” użyj dołączonego „Arduino-keyboard-0.3.hex”
  2. W programie FLIP pamiętaj, aby wybrać urządzenie docelowe jako Atmega8U2 lub 16U2 w zależności od Arduino i z wyboru medium komunikacyjnego wybierz USB i na koniec załaduj odpowiedni plik hex przed wybraniem run.
  3. Jeśli napotkałeś błąd sterownika, przejdź do menedżera urządzeń systemu Windows i wybierz wyszukiwanie nieznanego sterownika w katalogu instalacyjnym FLIP '\Program Files (x86)\Atmel\'
  4. Jeśli wielokrotnie napotkałeś błędy podczas aktualizacji oprogramowania sprzętowego z FLIP, zamknij FLIP i uruchom 'Reset Preferences' z 'Start menu\FLIP\', a następnie uruchom ponownie FLIP i wykonaj czynności konfiguracyjne przed ponowną próbą, to zwykle działa dla mnie.
  5. Jeśli chcesz przywrócić Arduino do pierwotnego stanu, postępuj zgodnie z powyższym przewodnikiem arduino.cc do litery bez używania tego pliku szesnastkowego.

Krok 7: Ciesz się……

Cieszyć się……
Cieszyć się……

Teraz ciesz się nowo przekonwertowaną klawiaturą PS/2 na USB…. PS Ten Instruktaż został w pełni napisany z zewnętrznej klawiatury PS/2 podłączonej do mojego laptopa przez Arduino:)

Zalecana: