Fórum témák
» Több friss téma |
Helló Mindenki!
Szeretnék PS2-es billentyűzetet PIC-hez illeszteni. A Google-ben csak angol leírást találtam és az angol nem az erősségem, gondoltam előbb megkérdezem itt az okos kollégákat, tudnak-e segíteni (talán így gyorsabb). - Szóval, valamilyen konkrét protokoll-ra lenne szükségem, ami alapján fel tudom programozni a PIC-et. Köszönöm!
Hát a protokoll az a PS2 protokoll. Szerintem nem kell sok angol tudás a megértéséhez, én legalábbis az alábbi két oldal alapján összehoztam egy PS2 dekódoló rutint C-ben egy 18F2550-hez. Nem bonyolult a C kód sem, nem nagy dolog átírni asm-re. Ha érdekel a kód, amit írtam, megoszthatom. Mondjuk egyenlőre csak a billentyűzet által küldött adatok fogadása van meg, a billentyűzet felé még nincs kész a kommunikáció, de az gondolom nemis annyira lényeges számodra.
A lényeg, hogy az órajel láb lefutó élére kell reagálni, és ebben a pillanatban megnézni az adatlábat. Az adatlábon megjelenő jel ugyanolyan, mint a soros porton megjelenő, csak itt 9 adatbit van, és a sebességet az órajel láb határozza meg, nincs szabványos sebesség. http://www.electronic-engineering.ch/microchip/projects/keyboard/v1...x.html http://www.networktechinc.com/ps2-prots.html
Találtam magyar linkeket:
http://vfx.freeweb.hu/info/index.html http://www.vfx.hu/info/atkeyboard.html
Szerintem érdekel bennünket a kód. Miért kell ezt mindig megkérdezni? Kódot föl, oszt' kész...
Jóvan, csak ráncba kell szedni, meg némi kommentet hozzáadni, hogy érthető legyen más számára is.
Nagyon örülnék a programnak, de azt hiszem más ide látogatók is...
Imába foglalom a neved, ha megkapom Előre is nagyon köszönöm
Na itt kód. Csak ami magyarul van kommentezve, az kell a PS2 feldolgozásához. Nem megszakításból van az egész kezelve, mert az valamiért bezavar az usb-nek, de ezt remélem nem gond átírni, ha úgy kell.
Várom a kérdéseket.
Most nézem, benn maradt két sor:
if (kod==0x22) LATCbits.LATC2^=1; Ez szintén csak egy ledet kapcsolt ki-be, amikor a bejövő kód 0x22 volt. Csak a teszteléshez kellett, amúgy nincs rá szükség.
Jól használható a mikroe compiler-ei is. Mindegyik ismeri a PS2-t.
Bővebben: Link
Hello!
Egy dolgot nem értek. Miért akar (kell) a számítógép adatot küldeni a billentyűzet felé?
Pl. ha két billentyűzet van egy gépre kötve, akkor egyiken benyomon a NumLock-ot és a másikon is bekapcsol a led. Ezért kell például. De sok olyan dolog van amiért még szükség van rá. Nem egy billentyű van, ahol néhány működési paramétert gépen tudsz szetupolni.
Továbbá fel kell szólítani a billentyűt indulásnál, és el kell indítani az init folyamatot.
vagy pl a gép azt mondja, hogy én most energiatakarékos állapotba kapcsolok, te is kapcsold ki magad, esetleg figyeld X billentyű lenyomását...
(bár nem tudom hogy létezik-e ilyen, de nem lenne hülyeség)
Az egyik ilyen látható dolog, az a ledek állapotának beállítása. A num lock az egy ugyanolyan gomb, mint pl. a C betű. Generál egy kódot a lenyomás pillanatában, amit elküld a gépnek. A ledet a gombnyomás közvetlenül nem állítja. A gép amikor vett egy Num Lock jelet, akkor sajátmagának eldönti, hogy most a be vagy kikapcsolt állapotban legyen-e a num lock funkció, és küld egy parancsot a billentyűzet felé, hogy kapcsold már be (vagy ki) a num lock ledet.
A másik, hogy az adatátvitel során van hibaellenőrzés is, paritásbit segítségével. Ha a gép hibásnak érzékeli a vett adatot, akkor küld parancsot a billentyűzet felé, hogy ismételd már meg az előzőt. Azután van olyan is, hogy a gép periódikusan lekérdezheti, hogy a billentyűzet jelen van-e. Küld egy Echo parancsot (asszem EEh), amire a billentyűzet szintén Echo-val (EEh) válaszol. Ha nincs válasz, akkor valami probléma van, ebben az esetben megpróbálhatja resetelni a billentyűzetet. PS2 billentyűzetnél az ismétlés sebességét is szintén egy paranccsal lehet állítani. (USB billentyűnél az ismétlés is szoftveresen van megoldva, csak a billentyű lenyomásakor és felengedésekor van kódgenerálás.) Viszont a billentyűk funkciója nem módosítható. Ha lenyomtál valamit, az mindig ugyanazt a kódot generálja. Az állíthatóság (pl. multimédiás billentyűzeteknél) szoftveresen van megoldva. Persze elvileg nem lehetetlen megoldani, hogy az adott gomb másik kódot generáljon, de idáig még nem láttam erről szóló leírást a neten. Az indításnál igazából nem lenne lényeges a kétirányú kommunikáció. Bekapcsoláskor a billentyűzet küld egy BAT jelet (Basic Assurance Test), amivel jelzi a gépnek, hogy jelen van, és hogy készen áll a működésre.
Értem. És mi van akkor, hogyha, mint a címben is szerepel, mikrokontrollerhez akarom csatlakoztatni a billentyűzetet. Akkor is feltétlen szükség van az oda - vissza kommunikációra?
az csak egy fícsör... vagy használod vagy nem...
Úgy értem, hogy ha a num lock LED-jet nem használom. Nekem csak a billentyűk kellenet. A billentyűn nem kell semmiféle visszajelzés. Ekkor elég csak a egy irányú komunikáció, nem?
Akkor elég. Bekapcsolás után 7-800ms múlva kapsz a billentyűzettől egy BAT jelet, és azután készen áll a működésre.
Egy PS/2 billentyűzetet szeretnék bekötni PIC16F88-hoz, hogy a RA2 lábra data, RA3 pedig clock menjen. A kód már kész, csupán a bekötéshez kellene segítség: piros, sárga, zöld és barna erek jönnek a billentyűzettől, és ha a sárgát negatívra húzom, akkor folyamatosan villog a billentyűzet, viszont ha a barna(?) és zöld(?) a tápfesz, akkor pedig folyamatosan világít. Azt kellene elérni, hogy ugyanúgy, mint rendes számítógépnél egyet villanjon, majd lehessen használni. Tehát mit hova kössek?
(?)Nem vagyok benne biztos...
Köszi, a billentyűzeten eredetileg DIN csatlakozó volt, csak kérdés, hogy annak hasonlítanak-e az ér-színei PS/2-höz... Viszont holnap ez alapján megpróbálom kimérni...
PS2 felületet implementáltam PIC-re (F883) és egy PS2/USB átalakítón
át viszek be adatokat egy PC-be,t.k. billentyűzetet emulálok. A "NUMLOCK" állapotát ki lehet olvasni a PS2 felületen? Kösz. a válaszokat előre is.
A billentyűzet nem foglalkozik a numlock állapotával, mindössze scan kódokat küld a billentyű lenyomásakor és felengedésekor. A scan kódok nem függnek a módosító billentyűktől (shift, ctrl, capsloc, numlock stb). A scan kódok asc2 kóddá történő átalakítása már a PC (illetve a te esetedben a kontroller) feladata. Magyarul ha lenyomod a numlock billenytűt, elküldi a numlock billentyű scan kódját. A kontrollered feladata lesz, hogy ekkor küldjön a billentyűnek egy led állapot parancsot (amiben a numlock led már ellentétes állapotban lesz), és másik kódlapot használj az asc2 kóddá alakításhoz. ARM-hez itt egy ps2 billentyű és egér driver, ebből kibogarászható a működése.
Én a kontrollerről küldöm a scan kódokat a PC-re, de a billentyűzettel beállított NUMLOCK állapotától függ, hogy pl. a numerikus gombok "4"-es gombja scan kódjának küldése egy excel cellába a "4" -es számjegyet ír vagy a kurzort mozgatja egy cellával balra.
A PC h'60'-as címen található R/W regisztere mutatja a NUMLOCK állapotát.Ehhez akartam hozzáférni a PS2 felületről. Most esett le a húszfilléres. Küldök egy NUMLOCK scan kódot és beolvasom a PC-ről jövő, a LED-eket kapcsolgató választ. Ha nem jó,küldök még egyet. Kösz hogy foglalkoztál a dologgal. A hozzászólás módosítva: Nov 8, 2021
Igen, a numlock scan kód küldés és led állapot parancs figyelése is jó, vagy akár használhatod a különálló nyíl gombok scan kódjait is. Ezek ugyan két bájtosak, de nem hiszem, hogy ez problémát jelentene.
|
Bejelentkezés
Hirdetés |