PS2 myši a BASIC Stamp počítače
Colin Fahey
1. Úvod
Tento článek popisuje, jak se PS/2 myši lze navázat na BASIC Stamp počítače.
Tento průzkum je neformální.

Interiér starého-stylu (pohyblivý míček) počítačové myši: na "Microsoft Intellimouse" (I nahrazuje optické senzory s dlouhými dráty.)
Myš má dvě osy: "X" a "Y". Když myši se přesune "vodorovně," je "X" kola uvnitř myši otáčí. Když myši se přesune "vertikálně" (na povrchu) se "Y" kola uvnitř myši otáčí. Za svévolné pohybu myši se "X" a "Y" kola pohybovat v závislosti na "horizontální" a "vertikální" složky pohybu myši.

Optické interruptor kola uvnitř myši
Povšimněte si otvorů v kolech uvnitř myši. Když se kolo otáčí se infra-červené (IR) vyzařovaného světla v IR světelných diod (LED) je přerušena opakovaně, a to ve výši v poměru k výši otáčení kola. Proto se myši ví, kolik "přírůstcích" (nazývané také jako "klíšťata)" myši osy se posunul v určitém časovém období.
Určování směru pohybu spočívá v použití 2 světla snímače, nacházející se velmi blízko sebe, podél osy, rovnoběžné s pohyb volantem. (Oba snímače jsou v jednom 3-pin složkou je uvedeno níže.)

Myš IR světlo senzoru (má dva IR detektory v jednom balení)
Ve středu pin na obalu je pozitivní sběratel napětí;
Levé a pravé kolíky jsou vlevo a vpravo čidlo výstup producentů skleníkových plynů.
Dovolte nám jméno dvou čidel v obalu "A" a "B". Představte volantem je původně na střídání úhel takový, že IR světlo je blokováno dosažení obou snímačů.
Vzhledem k tomu, že kolo otáčí se IR světlo od zářič bude nakonec mít možnost procházet otvorem v volantem a získat jedno ze dvou čidel, například čidlo "A". Pokud se otáčející kolo pokračuje ve stejném směru, případně druhé čidlo, "B", budou moci obdržel IR light. Pokud se otáčející kolo pokračuje ve stejném směru, případně IR světla bude blokován od snímače dosahující "A". Pokud se otáčející kolo pokračuje ve stejném směru, případně IR světla bude blokován od snímače dosahující "B".
Proto byl sekvence je:
(A,B): ..., (0,0), (1,0), (1,1), (0,1), ...
Pokud se kolo otáčí v opačném směru, 4-termín pořadí uvedeno výše bude opačně, počínaje od současného stavu.
S těmito dvěma snímač signálů můžeme určit sazbu na střídání, a směr.

Obvodu správního orgánu Microsoft Intellimouse
Chcete-li pochopit, více o tom, jak se myš obvody interpretuje světle senzory a komunikuje s osobním počítačem (PC) (přes PS/2 signály), jsem studoval na obvodu.
Mikročip má následující jméno vytištěno na to: SPCP05A.
Hledání na internetu na slovo "SPCP05A" znamená, že čip vyrábí společnost s názvem "Sunplus Technology Co.". Informace o "SPCP05A" mikročipu lze získat od této společnosti.
Zde jsou technické specifikace pro "SPCP05A" mikročipu:
Následující obrázek ukazuje signály na kolíky pro "SPCP05A (PS/2 3D mouse)" mikročip.

Signály z kolíky pro "SPCP05A (PS/2 3D mouse)" mikročip
Na "SPCP05A" je skutečně malá počítači! Jeho součástí je soubor instrukcí, a RAM, a ROM, a vnitřního časovače, atd. Ve skutečnosti se na popis tohoto "SPCP05A" mikročipu v poskytování informací Sunplus Co. sotva odkazuje na zvláštní použití těchto mikročip pro "počítačové myši" obvodů. Tento čip je univerzální mikrokontroléru.
Studoval jsem obvodu stop na okruhu předsednictva Microsoft Intellimouse k formě následující přibližné schematicky:

Přibližné schematický z Microsoft Intellimouse (I am chybí několik kondenzátorů, ale to je schematicky je téměř dokonalý.)
Bui Van Chu, v Austrálii, přečtěte si můj článek a poslal mi bude lépe schematické, které se v následujícím obrázku.

Na PS/2 myši schematický, poslal na mě Bui Van Chu z Austrálie
Okruh je velmi jednoduché.
Tlačítka myši (vlevo, uprostřed, vpravo) přímo do vstupů na mikročipu.
Tři páry světelných senzorů, (("X", "Y", "Z"), (pro horizontální pohyb, vertikální pohyb, a prostřední kolečko myši)) zasílá signály přímo do jiných vstupů na čipu.
Na PS/2 signály DATA a CLK (hodiny), také odpovídají I/O signálů na čipu.
Jsem pochopil schematický, jakmile jsem dokončil tažení je (podle těchto stop na okruhu palubě).
Jednu věc jsem se zpočátku pochopit, byl způsob, jak by IR LEDs byly napojeny na mikročipu (pin 16: "PB1"), namísto jejich negativní terminály (katodou) prostě je připojen přímo na zem. To je důležité!
2. Můj první pokus o kontrole pohybu myši
Následující poznámky se vztahují k pohybu podél jedné ose (např. "X", nebo vodorovné, osa).
První věc, co jsem zkoušel byla pohybující objekt mezi IR LED a čidla pair - simulovat vliv na rotujících kol do myši. To funguje. Bych mohl způsobit, že se kurzor myši na pohyb po obrazovce, stačí pohybující se překážky prostřednictvím IR světelného paprsku opakovaně, a to stejným směrem.
Dále jsem odstranil 3-pin čidlo část z myšího obvodu, a připojen dráty do obvodu v místě čidla. I ručně spojené drátem do kladných napětí na senzoru simulovat činnost. I připojené dva signály pravomoc podle následujícího vzoru (jako že "0" představuje "volno," a "1" představuje "v):"
(0,0), (1,0), (1,1), (0,1), ...
To funguje. Mohl bych přesuňte kurzor myši na obrazovce této zdlouhavý zapojování a odpojování vodičů ve struktuře uvedeno výše. Zpětným skladby z aktuálního stavu v pořadí by se přesuňte kurzor v opačném směru.
Protože to bylo to tak dobře, rozhodl jsem se připojit dráty do relé (kontrolované RS-232). To by v podstatě umožnilo, abych udělal přesně to, co jsem udělal s volnými dráty: připojte snímač signálů k výkonu terminálu v příslušném pořadí. Jediný rozdíl by být skutečnost, že lidské (me) by nemusela dělat zdlouhavý připojování a odpojování.
Ale ... to nefunguje!
Po hodně upravit na rezistory a kondenzátory, atd, udělal jsem podivné zjištění: Pokud jsem se dotýkají některých terminálů v obvodu, fungovalo to perfektně! Řešení této záhady se objeví v další části.
3. Infračerveném-(IR) červené světlo, musí být modulován
Po několika pokusech jsem měl frustrující nového myšlení: V IR světla může být pulzující na vysoké frekvenci, a čipu by mohla očekávat, že jim tato frekvence. Konstantní světla (nebo moje simulované konstanta čidla výkonu) může být odmítnuto. Byl jsem poněkud zmateni tím, že okolní světlo na halogenovou lampou patře byla přijatelná, ale věděl jsem, že i žárovky mají zjistitelné odlišení.
Snažil jsem se o pulzující IR LED na vysoké frekvence a blokování čidel v závislosti na očekávaný průběh. Fungovalo to!
To bylo to! Na IR LEDs v myši obvodu musí být bliká při vysokých otáčkách, a mikročipu, musí to očekávají bliká vedle relativně nízká míra světla přerušení od rotujících kol (s otvory).
Dle pulzující na IR LEDs, a očekává tento pulzující v odblokováno čidlo výstupní signál, čipu může odmítnout jakékoliv okolní IR signály od rušivých s myší provozu. Například rozptýleného světla z jiných (konstantní) IR zdrojů nebude interefere s myší.
I připojen zvukový zesilovač na výstup senzoru, a pak si nechat vzít v čidlo okolního světla odevzdaných mým halogenové stojanové svítidlo. Slyšel jsem, že samostatný tón (60 Hz). Když jsem šedě svítilna, tón vyrostl slabý, a nakonec se zastavil, když světlo je pryč. Takže, toto čidlo snadno snímá do 60 Hz odlišení v žhavené žárovky halogenové mého stojanové svítidlo!
Při pohledu, teď, v schematickém z PS/2 myši obvodu, význam tohoto IR LEDs je připojen k pinu na mikročipu (místo na stejnosměrný proud), je zřejmé. Mikročip řídí bliká z IR LEDs prostřednictvím I/O kolík, a mikročipu lze sladit svůj záměr flash na ID LEDs s obdržela čidlo vstupy, a proto odmítají rozptýlená signálů (z důvodu ne-IR blikající světlo). (Nicméně, vztah není nutné. Stačí se zjišťuje minimální počet bliká počítá, by mohlo být hranice pro přijetí čidlo vstup.)
4. IR senzory s pásmovým filtry
Můžete najít speciální IR senzory, balené v tranzistoru-formě, jako se třemi vede, že jsou "naladěni" na specifický modulován IR světlo frekvencí (např. 38 kHz).

Naladěni IR světlo senzoru (maximální citlivost na světlo 38 kHz modulace)
Pásmovým obvody obsažené v zařízení spolu s IR foto-tranzistory.
Tak se IR LED mohou být obvykle impulsní s frekvencí 38 kHz tak, že senzor bude dostávat světla a nechat jít na elektrický signál čidla výstupů.
Pro přenos informací, světlo od IR LED může být přerušen v relativně nízké úrokové sazby (např. 1 až 100 krát za sekundu). Tato nízká frekvence-pulzující je ve spojení s ustálenou vysokou-pulzující frekvence, tj. nízká-pulzující frekvence může být považována za úpravu vysoce-frekvence pulzující. Vysoká-pulzující frekvence je jako "dopravce vlny," na nichž je informace, signál (relativně nízká-frekvenční modulace) je provedena.
Nicméně, mám ověřeno, že IR senzory v Microsoft Intellimouse nemají takové odlišení filtrování. Nicméně, obvod potřebuje, aby IR lehké být upravována v některých způsobem, při němž je kromě nízké-frekvence přerušování světla na kolo s otvory.
Následující náčrtek ilustruje rozdíl v čidlo signály o konstantní IR LED světla a blikat IR LED ohledem na různé fáze otáčení kolečkem myši.

Čidlo výstupní signály pro konstantní IR světle případu a blikající světla IR případu.
5. Simulující myš vstup pomocí počítače BASIC Stamp
"BASIC Stamp 2" na počítač disponuje dostatečnými programování pro provádění PS/2 protokol. Proto se "BASIC Stamp 2" počítači může být připojen přímo k PS/2 portu osobního počítače (PC) a lze emulovat PS/2 myši nebo klávesnice.
5.1 Na PS/2 protokol
V letech 1998 prostřednictvím 2003, většina osobních počítačů, měl PS/2 porty pro myš a klávesnici.
Na PS/2 přístavu má 4 signály: (1) CLOCK; (2) DATA; (3) +5V; (4) GROUND.
PS/2 portu na zařízení umožňuje posílat data do hostitelského, a hostitelské může poslat data do zařízení. Všechny strany na PS/2 port (obvykle jen prostředkem a hostitel) musí sdílet signály a musí zjistit, zda jiné straně, je v současné době pomocí signálů.
Jak může být sdílena signály? Signál (například CLOCK nebo DATA) je obvykle vysoká "plovoucí," což znamená, že signál je připojen ke kladné napětí přes odpor s vysokou odolností (např. 4 kilo-Ohms). Takto signál je interpretován jako logická "vysoké" všech stran poslouchat. Každá strana může tahat linky nízká (přes TTL logiky), kdy se strana hodlá posílat data. Pokud je účastník ukončí zasláním paketu, umožňuje přejít z těchto signálů na neurčito, tak se vznášet vysoké znovu.
Chcete-li odeslat data ze zařízení (např. myši nebo klávesnice) pro osobní počítače (PC), musíte posílat data v 11-bit pakety, které se skládají z těchto bitů: (1) start bit ("0"); (2) 8 datových bitů (LSB první); (3) paritní bit "(lichá" parita); (4) stop bit "(1)." Všimněte si, že "liché parity" je, když celkový počet bitů na "1" v datových bitů a paritní bit v kombinaci je liché číslo.
Následující obrázek znázorňuje přenos jednoho datového paketu:

PS/2 protokol: zařízení na hostitelský (PC) paketu
Na DATA linie by měla být nastavena na správné hodnoty před uvedení CLOCK souladu nízké. Na DATA hodnota by měla zůstat nastavit až do CLOCK souladu se vrátil zpět do vysoké. Když CLOCK souladu se potvrdilo, které mají být vysoké, DATA hodnota může být změněna na příští bit hodnotu.
Typické hodiny rychlost je poměrně pomalé, asi 10 kHz k 17 kHz. To je 100 mikrosekund až 70 mikrosekund pro každý den období.
Scénář na hostitelské (PC) odeslání dat do zařízení je podobná zařízení posílání dat do vojska, ale ve všech případech přístroj ovládá CLOCK signálu během přenosu dat sám. Také datový bit poslal od hostitele (na zařízení nastavení CLOCK nízká) by měl být nakloněný, kdy se zařízení umožňuje CLOCK signál, aby se přechod na vysokou.
Internetového vyhledávání se odhalí mnoho popisů PS/2 signály a podrobností o protokolu.
5.2 PS/2 myši datových paketů
Když počítač obuv lze konstatovat, že operační systém spustí a případně komunikuje s myší určit typ myši. Ve výchozím nastavení myši se mohou chovat jako generik PS/2 myši. Nicméně, je-li operační systém zjistí, že myš je vlastně "3D PS/2" myši (např. myš s kol), to může říct myši na změnu ve 3D PS/2 myší protokol.
Pokud přesunete kurzor myši, nebo stiskem nebo uvolnění tlačítka myši, myš obvody odesílá data na hostitelském (PC), což naznačuje, co státní změn došlo od předchozího stavu označení.
Generické PS/2 myši zašle tyto tři pakety na hostitelské:
------------------------
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
Je velmi časté, že mají "3D PS/2" myši (například s kolečkem myši, které také funguje jako prostřední tlačítko). Taková myš pošle čtyři pakety dat na hostitelském (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 Můj první obvod k simulovat PS/2 myši
Následující schematický byl můj první pracovní techniky se můj počítač "BASIC Stamp 2" poslat PS/2 myši údajů do hostitelského (PC).

Schematický na okruhu umožnit BASIC Stamp počítače posílat PS/2 paketů na hostitelský (PC).
Všimněte si, že tento obvod elektricky izoluje BASIC Stamp můj počítač z hostitelského počítače (PC). Upozorňujeme také, že tento okruh je jen pro uspokojení požadavků na elektrické PS/2 přenosu dat (od zařízení pro hostitele). Proto mohu poslat PS/2 klávesnice zprávy pomocí téhož obvodu, pokud připojíte k PS/2 klávesnice portu na hostitelském (PC)!
Vzhledem k tomu, že příjem signálu je obvykle ne-invazivní (tj. poslech nebude zasahovat do elektrických signálů), jediná věc, nutnou k tomu, aby "BASIC Stamp" počítač, který přijímá PS/2 CLOCK a DATA signálů je přímé spojení z těchto signálů na jiné BASIC Stamp I/O kolíky (nakonfigurován tak, aby se vstupy). Já bych zkusit nějakou vyrovnávací paměti - ale určitě nelze použít opto-odpojovač přímo, protože to by celý náklad na "plovoucí" signálu (a tím se "potápí" je!). Mohl bych použít +5V k moci nárazník, potom klepněte na použití bufferu výstup na jednotku opto-izolátory, které se nakonec posílat signály na BASIC Stamp I/O vývody (nastaveno jako vstupy).
Následující obrázek ukazuje mé BASIC Stamp 2 počítač připojen do obvodu shoda schematickém výše.

BASIC Stamp 2 počítač připojen k PS/2 myši přístavu přes opto-odpojovač okruhu.
Následující BASIC Stamp 2 program, napsaný v programovacím jazyce PBASIC, byl můj první úspěšný pokus kontrolovat PS/2 myši přes BASIC Stamp 2 počítače.
Program umožňuje jednoduše myší kurzor pohybovat podél malých diagonální linie.
'====================================================================
'{$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
'====================================================================
Tento program funguje perfektně. Nechal jsem to běžet na hodiny, a to bezchybně provést myší kurzor pohybovat mezi dvěma přesné umístění na obrazovce. To je to, co jsem hledal: přesné ovládání myši, aby mohl být v interakci se softwarem.
Po hledání na internetu jsem zjistil, že někdo jiný používal BASIC Stamp počítače na rozhraní PS/2 (simulující klávesnici). Tato osoba použila PBASIC výuka SHIFTOUT zvládnout CLOCK a DATA signály, které je opravdu skvělé. To by můj "TransmitPacket" podprogram mnohem kratší, asi 5 řádků kódu celkového!
Také jsem viděl, že ostatní lidé TTL rezervy, se vstupy připojeny přímo z PS/2 signály (CLOCK a DATA), výstupy a připojit přímo na kolíky na čipu mikrokontroléru. Ve stejném obvodu, výstupní linky z mikrokontroléru šel přímo na základní vývody na tranzistory, které měly své sběratele připojen přímo k PS/2 signály. Všechny tyto přímé spoje z různých okruhů se zdá jako dobrý nápad se ke mně, aby jeden obvod smažit druhou. Nevím, co bych udělal, kdyby jsem smažené na PS/2 přístavu na můj PC. Koupit novou desku, myslím! Záminka pro upgrade. Nemám tam PS/2 přístavu desce zhroucení je pravděpodobné, ale já jsem okamžitě vypni počítač, když jsem náhodně krátký-circuited na +5V a GROUND signály jdou do PS/2 myši. Možná je to vlastnost! Mohl bych přidat nové tlačítko myši, že jen krátký-obvodů myši moc pro okamžité vypnutí z PC. ;-)
Zde je odkaz na informace týkající se používání SHIFTOUT pro PS/2 protokol:
Podívejte se na následující odkaz:
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).
Lokálně z cache-kopii souboru:
keybtst.zip
10655 bytů
MD5: c5667557f96db53fb878bd11bfbe4f74
Následující odkaz obsahuje více informací o PS/2 myši propojení: