PS2 miš i BASIC Stamp računalo
Colin Fahey
1. Uvod
U ovom se članku opisuje kako PS/2 miša može biti imitiran je BASIC Stamp računalo.
Ovo istraživanje je neformalni.

Unutrašnjost starog stila (premještati loptu) računalni miš: "Microsoft Intellimouse" (Ja je zamijenila optički senzori s dugim žice.)
A miš ima dvije osovine: "X" i "Y". Kada se miš je premještena "vodoravno," "X" kotačić miša unutar rotira. Kada se miš je premještena "vertikali" (na površini), "Y" kotačić miša unutar rotira. Za proizvoljne miš motion, "X" i "Y" kotačima kretati prema "horizontalne" i "vertikalne" komponente miša pokretu.

Optički interruptor kotača unutar miša
Obavijest o rupe u točkovima unutar miša. Kada točak rotira, infracrveno svjetlo emitirano (IR) po jedan IR dioda koja zraci svjetlo (LED) je prekinuta više puta, to ocijeni proporcionalnu stopu rotacije kotača. Ovako, miš zna koliko "prirasta" (koji se nazivaju i "ticks)" miš osi je premještena u određenom vremenskom razdoblju.
Određivanje smjera kretanja uključuje korištenje 2 light senzori, koji se nalazi u neposrednoj blizini zajedno, uz jedan axis parallel na kretanje pod točkove. (Oba senzori su u jednu 3-pin komponenta je prikazano u nastavku.)

Mouse IR light senzor (ima dva IR detektora u jednom paketu)
Centar pin, paket je pozitivni napon kolektor;
Lijevi i desni igle su lijevi i desni senzor output emitters.
Let us ime dva senzora u paket "A" i "B". Smatram točak je u početku na rotation angle takva da IR svjetlo je blokiran od postizanja i senzori.
Kao kotača rotira, IR svjetlost od odašiljač će konačno moći proći kroz rupu u kolo i dosega jednog od dva senzora, kao što je senzor "A". Ako je rotirajući kotač i dalje u istom smjeru, na kraju drugi senzor, "B", moći će se primio IR svjetlo. Ako je rotirajući kotač i dalje u istom smjeru, na kraju je IR svjetlo će biti blokiran od postizanja senzor "A". Ako je rotirajući kotač i dalje u istom smjeru, na kraju je IR svjetlo će biti blokiran od postizanja senzor "B".
Dakle, redoslijed je:
(A,B): ..., (0,0), (1,0), (1,1), (0,1), ...
Ako točak rotira u suprotnom smjeru, 4-term slijed prikazan iznad će biti obrnuto, počevši od trenutnog stanja.
S ta dva signala senzora možemo odrediti brzina rotacije, i smjeru.

The sklopovska pločica od Microsoft Intellimouse
Da biste razumjeli više o tome kako je miš strujni krugovi interpretira u svjetlu senzori i komunicira s osobnom računalu (PC) (preko PS/2 signali), studirao sam na sklopovska pločica.
The mikročip ima sljedeće ime tiskani na njemu: SPCP05A.
A pretraživanje Interneta za riječ "SPCP05A" pokazuje da je čip je proizvela je tvrtka pod nazivom "Sunplus Technology Co.". Informacije o "SPCP05A" mikročip može steći iz tog poduzeća.
Ovdje su tehničke specifikacije i "SPCP05A" mikročip:
Sljedeća slika prikazuje signale i kočiće za "SPCP05A (PS/2 3D mouse)" mikročip.

Signali i kočiće za "SPCP05A (PS/2 3D mouse)" mikročip
The "SPCP05A" je zapravo maleni računalu! To je skup instrukcija i RAM, i ROM, i interne vremena, itd. U stvari, opis, "SPCP05A" mikročip u informacije koje se Sunplus Co. jedva se odnosi na specifičnu upotrebu na mikročip "miš" za "računalo" sklopove. Ovaj čip je svestran sklop.
Sam studirao u krug tragove na sklopovska pločica od Microsoft Intellimouse u obliku sljedeće približne shematski:

Približan shematski od Microsoft Intellimouse (Ja sam nedostaje nekoliko capacitors, ali to shematski je gotovo savršena.)
Bui Van Chu, u Australiji, pročitajte moj članak i poslao mi više kompletna shema, koja se pojavljuje u sljedećoj slici.

The PS/2 miš shematske, poslao me prema Bui Van Chu iz Australije
U krug je vrlo jednostavna.
The mouse buttons (left, middle, desno) ići direktno na ulazi na mikročip.
Tri para svjetla senzori, (("X", "Y", "Z"), za (horizontalno kretanje, vertikalna kretanja, i srednji kotačić miša)) poslati signale izravno na druge ulazi na čip.
The PS/2 signali DATA i CLK (sat) i odgovaraju I/O signali na čip.
I shvatili su shematske čim sam završila je crtež (prateći tragove na sklopovska pločica).
Jedna stvar mi u početku nije bila razumjeti način na koji je IR LEDs su povezani s mikročip (pin 16: "PB1"), umjesto njihove negativne terminali (Katoda) jednostavno se spojeni izravno na terenu. To je važno!
2. Moj prvi pokušaj da se kontrola miša pokret
Sljedeći komentari se odnose na gibanje duž jedne osi (kao što su "X", ili horizontalno, axis).
Prvo što sam pokušao je jedan objekt se kreće između IR LED i senzor pair - za simuliranje djelovanja rotirajućeg kolo unutar miša. To je radio. Ne bih mogao uzrokovati kursor miša za kretanje zaslonom jednostavnim pomicanjem prepreka kroz IR snop svjetlosti više puta, u istom smjeru.
Dalje, ja Uklonili 3-pin senzor dio od pločica sklopa miša, priložen i žice za pločica sklopa u mjesto na senzor. Sam ručno vezan jedna žica na pozitivan napon na senzor simuliraju aktivnost. Ja povezana dva signala na snagu u skladu sa sljedećim pattern (kao da "0" predstavlja "off," i "1" predstavlja "na):"
(0,0), (1,0), (1,1), (0,1), ...
To je radio. Sam mogao pomicati pokazivač miša na zaslonu s ovim dosadan i povezivanju Odspajanje od žice u uzorak prikazan iznad. Unazad uzorak iz trenutnog stanja u slijed bi pomaknite pokazivač u suprotnom smjeru.
Zbog toga su tako dobro ide, odlučio sam se spojiti na žice da releji (kontrolira RS-232). To bi u osnovi dopustiti mene za napraviti točno što sam učinio s loose žice: povezivanje je senzor signali na snagu terminal u odgovarajući slijed. Jedina razlika bi bila činjenica da su ljudska (meni) ne bi da je zamorno povezivanju i Prekidanje veze.
Ali ... to nije rad!
Nakon puno prilagodjavanja, otpornici i capacitors, itd, ja napravio neobično otkriće: Ako sam se tiče određene terminala u krug, to je radio savršeno! Rješenje za ovaj misterij pojavljuje se u sljedećem poglavlju.
3. The infracrveno svjetlo (IR) mora biti modulirani
Nakon nekog frustrirajuće eksperimenti sam imao novu misao: IR svjetlo može biti pulsiranje na visoke frekvencije, i čip može očekivati da primite ovu frekvencija. Stalno svijetlo (ili moje simulirane konstanta senzor output) bi mogle biti odbačene. Bio sam pomalo zbunjen i činjenica da je ambijent svjetlu jednog halogen lamp kat bio je prihvatljiv, ali znao sam da čak i žarulje sa žarnom niti imati prepoznatljiv modulacija.
Pokušao sam pulsiranje jedan IR LED na visoke frekvencije i blokiranje, senzori prema očekivanom obrascu. Internet izrađen!
To je ona! The IR LEDs u miša pločica sklopa mora biti treperi at high speed, i mikročip mora očekivati ovu treperi uz relativno niska stopa prekida svjetlo koje je rotirajući kotač (sa rupama).
By pulsiranje u IR LEDs, i očekuju ovu pulsiranje u unblocked senzor izlazni signal, čip može odbiti bilo koji ambijent IR signali ometali rad mišem. Na primjer, zalutao svjetlosti od drugih (konstanta) IR izvora neće interefere s mišem.
Ja povezana audio pojačalo na senzor izlaz, a zatim sam neka senzor uzeti u ambijentu light cast by moj kat halogenih lampica. Čuo sam jedan poseban ton (60 Hz). Kad sam zatamnjene svjetiljka, ton koliko je raslo, i napokon prestao kad je svjetlo je off. Dakle, ovo senzor lako preuzima se u 60 Hz modulacija u žarulja sa žarnom niti od mojih halogenim floor lamp!
Tražite, sada, na shematske od PS/2 miš pločica sklopa, značaj i IR LEDs biti spojen na pin na mikročip (umjesto da se istosmjerna struja) je očigledan. The mikročip upravlja treperi od IR LEDs kroz I/O pin, mikročip i može se veľu svoju namjeru da se flash ID LEDs s primio senzor inputa, a time odbacuju svako zalutao signali (zbog ne-IR svjetlo treperi). (Međutim, korelacija nije potrebno. Jednostavno otkrivanje minimalni broj treperi tačkama mogao biti prag za primanje senzor ono što se umeće.)
4. IR senzori s pojasni filtri
Možete pronaći posebne IR senzori, pakiranog u tranzistor kao oblik s tri vodi, koje su "sinkroniziran" na određene modulirani IR svjetlost frekvencije (npr., 38 kHz).

Napjev IR light senzor (maksimalna osjetljivost na svjetlo 38 kHz modulacija)
Pojasni strujna kola je sadržana unutar uređaja, zajedno s IR foto-transistors.
Tako, IR LED može biti općenito pulsed na učestalost 38 kHz senzor tako da će primiti svjetlost i neka se električni signal ići na senzor izlaza.
Prenošenja informacija, svjetlo od IR LED može biti prekinuta i relativno niska stopa (npr. od 1 do 100 puta u sekundi). Ova niskofrekvencijska pulsiranje je u suradnji s neprekidan visoke frekvencije pulsiranje, odnosno, niskofrekvencijska pulsiranje mogu smatrati modulating visokih frekvencija pulsiranje. The high-frequency pulsiranje je kao "val nosilac" na kojem su informacije signal (relativno niska-frekvencijska modulacija) je nosio.
Međutim, sam provjerio da IR senzori u Microsoft Intellimouse nemamo takva modulacija filtriranje. Međutim, sklop se zahtijeva da IR svjetlo biti modulirani na neki način, osim u low-frequency prekidima svjetla koje je kotač s rupama.
Sljedeća skica pokazuje razliku u senzor signali za konstanta IR LED svjetlo treperi i IR LED svjetlo za različite faze miš kotač okreće.

Sensor izlazni signali za slučaj konstantnog IR svjetlo i svjetlo treperi IR slučaju.
5. Simulacijom pomoću miša input BASIC Stamp računalo
The "BASIC Stamp 2" računalo ima dovoljno programmability provođenja PS/2 protokol. Stoga, "BASIC Stamp 2" računalo može biti spojeni izravno na PS/2 port osobnog računala (PC) i može oponašati jednog PS/2 miša ili tipkovnice.
5.1 The PS/2 protokol
U godinama 1998 kroz 2003, većinu osobnih računala je PS/2 portovi za miša i tipkovnice.
The PS/2 luke je 4 signali: (1) CLOCK; (2) DATA; (3) +5V; (4) GROUND.
The PS/2 port omogućuje uređaja za slanje podataka u vojsci, a domaćin svibanj poslati podatke na uređaje. Sve stranke na PS/2 port (obično samo jedan uređaj i pružatelja usluga) moraju dijeliti i signali moraju otkriti ako drugi party je trenutno koristi signale.
Kako signali mogu se dijeliti? Signal (kao što su CLOCK ili DATA) je obično "plutajuće" visoka, što znači da je signal je spojen na pozitivni napon preko otpora s visoku otpornost (na primjer, 4 kilo-Ohms). Tako je signal se tumačiti kao logičan "visoke" slušanje svih stranaka. Bilo koja stranka može se povuci linija niske (preko TTL logika) kad stranka namjerava poslati podatke. Kada stranka završava slanjem paketa, omogućuje ići na signale indefinitely, tako da plutaju visoke opet.
Za slanje podataka iz jednog uređaja (npr., miša ili tipkovnice) na osobnom računalu (PC), morate poslati podatke u 11-bitni paketa, koji se sastoji od sljedećih bita: (1) start bit ("0"); (2) 8 bitova podataka (LSB prvi); (3) bit parnosti "(neparna" parnost); (4) stop bita "(1)." Imajte na umu da je "neparna parnost" je kada je ukupan broj bitova "1" u bita podataka i bit parnosti kombinaciji je neparan broj.
Sljedeći dijagram ilustrira prijenos jednog paketa podataka:

PS/2 protokol: uređaj za host (PC) paketa
The DATA line bi trebao biti postavljen na odgovarajuće vrijednosti prije dovođenja u CLOCK line niska. The DATA vrijednost bi trebala ostati postavljena do CLOCK linija je vrati nazad, pa do high. Kada CLOCK linija je potvrdio da budu visoke, DATA vrijednost može biti promijenjena na sljedeći bitni vrijednost.
Tipična clock speed je relativno spor, o 10 kHz da 17 kHz. To je 100 microseconds dolje do 70 microseconds za svaki period takta.
Scenariju domaćin (PC) slanje podataka na uređaj je sličan uređaj šalje podatke na glavno računalo, ali u svim slučajevima uređaj upravlja CLOCK signal tijekom prijenosa podataka. Osim toga, bitni podaci poslani iz domaćin (na uređaj za postavljanje CLOCK low) bi trebao biti latched kada uređaj omogućuje CLOCK signal napraviti tranziciju prema visokim.
Internet pretraživanje će otkriti mnoge opise PS/2 signali i detalje o protokol.
5.2 PS/2 miš podataka paketi
Kada se računalo čizme, operativni sustav se pokreće i na kraju komunicira sa mišem da biste odredili vrstu miša. By default the mouse svibanj ponašati kao općenito PS/2 mišem. Međutim, ako se utvrdi da operacijski sustav miša je zapravo "3D PS/2" mišem (na primjer, miš s kotača), može se reći da promijeni miš na 3D PS/2 miša protokol.
Kada move the mouse, ili pritisnite mišem ili oslobađanje gumbe, miš strujni krugovi šalje podatke na glavno računalo (PC), sa naznakom što drzava promjene su se dogodile otkad je prethodno stanje indikacija.
The općenito PS/2 miš šalje sljedeća tri paketa u vojsci:
------------------------
D7 D6 D5 D4 D3 D2 D1 D0 (The D0 bit (LSB) is sent first)
------------------------
(1) YV XV YS XS 1 0 R L (overflow, sign, buttons)
(2) X7 X6 X5 X4 X3 X2 X1 X0 (X movement; -128 to +127)
(3) Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 (Y movement; -128 to +127)
L = Left Button State (1 = pressed down)
R = Right Button State (1 = pressed down)
XS = Direction of X movement (1 = LEFT)
YS = Direction of Y movement (1 = UP)
XV = Overflow of X movement value (1 = X overflow occured)
YV = Overflow of Y movement value (1 = Y overflow occured)
X7,...,X0 : X movement; 8-bit 2's-complement signed byte (-128 to +127)
Y7,...,Y0 : Y movement; 8-bit 2's-complement signed byte (-128 to +127)
Here are examples of data sent to the host (PC):
------------------------------------------------
(The least-significant bit of each data byte is sent first.)
Move Left 1 unit : 0x18, 0xFF, 0x00
Move Right 1 unit : 0x08, 0x01, 0x00
Move Down 1 unit : 0x28, 0x00, 0xFF
Move Up 1 unit : 0x08, 0x00, 0x01
Press Left Button : 0x09, 0x00, 0x00
Release Left Button : 0x08, 0x00, 0x00
Press Right Button : 0x0C, 0x00, 0x00
Release Right Button : 0x08, 0x00, 0x00
To je vrlo uobičajena imati "3D PS/2" mišem (na primjer, s mišem kotača koja također služi kao srednji gumb). Takav miš šalje četiri paketa podataka na host (PC).
------------------------
D7 D6 D5 D4 D3 D2 D1 D0 (The D0 bit (LSB) is sent first)
------------------------
(1) YV XV YS XS 1 M R L (overflow, sign, buttons)
(2) X7 X6 X5 X4 X3 X2 X1 X0 (X movement; -128 to +127)
(3) Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 (Y movement; -128 to +127)
(4) Z7 Z6 Z5 Z4 Z3 Z2 Z1 Z0 (Z movement; -128 to +127)
This is very similar to the generic PS/2 mouse,
with a few additions:
M = Middle Button State (1 = pressed down)
Z7,...,Z0 : Mouse wheel movement; 8-bit 2's-complement signed byte
(The Z value is forced to a range of -8 to +7)
5.3 Moj prvi krug za simulaciju jednog PS/2 miš
Sljedeći dijagram je moj prvi radni tehniku kako bi dobili moje "BASIC Stamp 2" računala za slanje PS/2 miš podataka na host (PC).

Shematski u krug kako bi se omogućilo je BASIC Stamp računala za slanje PS/2 paketi na host (PC).
Imajte na umu da ovaj sklop električki izolata BASIC Stamp moje računalo s domaćinom (PC) računalo. Također, imajte na umu da ovaj sklop je samo da se zadovolje potrebe PS/2 električni prijenos podataka (iz uređaja na host). Ovako, ja mogu poslati PS/2 keyboard poruke koristeći ovaj isti krug ako sam plug-in na PS/2 keyboard port na host (PC)!
Od primitka signala se općenito ne-invazivne (na primjer, slušanje ne ometati električne signale), jedina stvar potrebna kako bi se omogućilo je "BASIC Stamp" računalo da bi dobili PS/2 CLOCK i DATA signala je izravna veza od onih signali na druge BASIC Stamp I/O igle (konfigurirati da se ulazi). Bih isprobati neke vrste međuspremnika - ali ja definitivno ne mogu koristiti jedan optoelektronička izolator direktno, budući da bi stavili opterećenje na "plutajuće" signali "(amortizacija," ovako ih!). Ne bih mogao koristiti +5V na vlast jednog međuspremnik, zatim zatim koristiti tampon izlaz za pogon optoelektronička isolators da na kraju krajeva poslati signale na BASIC Stamp I/O igle (configured kao ulazi).
Sljedeća slika prikazuje mog BASIC Stamp 2 računalo spojeno na sklop se podudara s shematski iznad.

BASIC Stamp 2 računalo spojeno na port PS/2 mišem preko neke optoelektronička izolator krug.
Sljedeći BASIC Stamp 2 program, pisan u PBASIC programski jezik, bio je moj prvi uspješan pokušaj za kontrolu PS/2 mišem preko BASIC Stamp 2 računalo.
Program omogućuje jednostavno premjestiti pokazivač miša uz male dijagonale line.
'====================================================================
'{$STAMP BS2} 'STAMP directive (specifies a BS2)
DIR0 = %1 'Set pin 0 to OUTPUT
DIR1 = %1 'Set pin 1 to OUTPUT
OUT0 = %0 'Set DATA line high (pin low)
OUT1 = %0 'Set CLOCK line high (pin low)
tempData VAR BYTE
tempParity VAR BYTE
'--------------------------------------------------------------------
MainLoop:
tempCounter VAR WORD
FOR tempCounter = 0 TO 10
tempData = $28
GOSUB TransmitPacket
tempData = $01
GOSUB TransmitPacket
tempData = $ff
GOSUB TransmitPacket
tempData = $00
GOSUB TransmitPacket
PAUSE 100
NEXT
FOR tempCounter = 0 TO 10
tempData = $18
GOSUB TransmitPacket
tempData = $ff
GOSUB TransmitPacket
tempData = $01
GOSUB TransmitPacket
tempData = $00
GOSUB TransmitPacket
PAUSE 100
NEXT
GOTO MainLoop
STOP
'--------------------------------------------------------------------
TransmitPacket:
GOSUB ComputeParity 'First, compute parity
tempData = ~tempData 'Invert data bits
tempParity = ~tempParity 'Invert parity bit
'==== Start Bit ====
OUT0 = %1 'Set data line low (output high)
PULSOUT 1, 25 ' Pulse line 1 for (25*2) = 50 usec
'==== Data Bits ====
OUT0 = tempData.BIT0
PULSOUT 1, 25
OUT0 = tempData.BIT1
PULSOUT 1, 25
OUT0 = tempData.BIT2
PULSOUT 1, 25
OUT0 = tempData.BIT3
PULSOUT 1, 25
OUT0 = tempData.BIT4
PULSOUT 1, 25
OUT0 = tempData.BIT5
PULSOUT 1, 25
OUT0 = tempData.BIT6
PULSOUT 1, 25
OUT0 = tempData.BIT7
PULSOUT 1, 25
'==== Parity Bit ====
OUT0 = tempParity.BIT0
PULSOUT 1, 25
'==== Stop Bit (high) ====
OUT0 = %0 ' pin low is DATA high
PULSOUT 1, 25
PAUSE 1 ' Necessary? Provides 1 msec gap between packets...
RETURN
'--------------------------------------------------------------------
ComputeParity:
tempParity = $01
tempParity = tempParity + tempData.BIT0
tempParity = tempParity + tempData.BIT1
tempParity = tempParity + tempData.BIT2
tempParity = tempParity + tempData.BIT3
tempParity = tempParity + tempData.BIT4
tempParity = tempParity + tempData.BIT5
tempParity = tempParity + tempData.BIT6
tempParity = tempParity + tempData.BIT7
tempParity = tempParity & $01
RETURN
'====================================================================
Ovaj program radi savršeno. I neka se izvoditi za vrijeme, i to je napravio flawlessly mišem pomicati kursor između dva točna lokacija na zaslonu. To je ono što Sam bio obličje za: preciznu kontrolu nad mišem, tako da mogu komunicirati sa softverom.
Nakon pretraživanja interneta sam otkrio da je netko iskorišten BASIC Stamp računalo na sučelje PS/2 (simulacijom keyboard). Ova osoba koristi u PBASIC pouku SHIFTOUT da obrađuju se CLOCK i DATA signali, koji je stvarno velik. Ovo bi moga "TransmitPacket" potprogram puno kraći, možda 5 linija koda ukupno!
Također sam vidio da drugi ljudi koriste TTL buffers, s ulazi spojeni izravno iz PS/2 signali (CLOCK i DATA), i izlazi spojeni izravno na igle na mikro čip. U isti krug, izlazne linije iz mikro otišli su direktno na bazi igle na transistors koji su kolektori spojeni izravno na PS/2 signali. Sve to izravni spoj različitih sklopove izgleda kao loša ideja da mi, da ne bi jedan krug pržiti na druge. Ne znam što bih napraviti ako sam se prže PS/2 luka na moje PC. Kupi novu matičnu ploču, mislim! Izgovor za nadogradnju. Ne mislim jednom PS/2 luka matična ploča meltdown je vjerojatno, ali sam odmah shutdown moje računalo kad sam slučajno kratko spojen na +5V i GROUND signali ide na PS/2 mišem. Možda to je značajka! JA mogao dodati novi gumb miša da samo kratki spoj miša snaga za instant shutdown, PC. ;-)
Evo link za informacije o korištenju SHIFTOUT za PS/2 protokol:
Potražite za sljedeću vezu:
KEYBTST.ZIP gives a very basic program for the parallax
-----------
BASIC stamp II, to send key-codes to the PC's keyboard port.
It also gives a write-up of the XT and AT keyboard interfaces
(although IMO some details could be wrong / different to the
keyboards I've looked at).
Lokalno-predmemorija kopiju datoteke:
keybtst.zip
10655 bytes
MD5: c5667557f96db53fb878bd11bfbe4f74
Sljedeći link pruža dodatne informacije u vezi PS/2 miš sučelja: