5.3. JOYSTICK
5.3.1. Introducere
Joystick-ul este un dispozitiv periferic de intrare cu funcţionare mecanică. Este alcătuit dintr-un mâner care pivotează în jurul unei articulaţii aflate la unul dintre capete şi fixate într-un suport fix.
Unghiul făcut de mâner cu articulaţia se transmite ca informaţie de poziţionare cursorului de pe ecranul calculatorului. Majoritatea joystick-urilor permite poziţionarea în două dimensiuni, însă există astfel de dispozitive care pot funcţiona şi în mod 3D. La cele din urmă, mişcarea pe axa verticală se execută, de obicei, prin răsucirea mânerului.
în afara poziţiei cursorului, joystick-ul mai poate transmite şi o serie de comenzi, prin intermediul butoanelor plasate pe mâner sau suport (vezi figura 5.16).
După modul de funcţionare, joystick-urile sunt de două tipuri:
Joystick-ul analogic are stări continue, transmiţând unghiul făcut de mâner ca poziţie în plan cu ajutorul unor potenţiometre, pe când cel digital poate transmite doar sensul mişcării cu ajutorul unor comutatoare (stânga/dreapta, sus/jos), poziţia fiind determinată prin durata acţionării acestor comutatoare. Cele din urmă sunt folosite azi doar la jocurile electronice, utilizarea lor pentru calculatoarele personale încetând la mijlocul anilor �80.
Unele joystick-uri actuale implementează o tehnologie de feedback, rezistenţa lor la mişcare fiind proporţională cu anumiţi parametri dinamici ai aplicaţiei în care sunt folosite. Această facilitate este utilă mai ales în jocurile de tip simulator de zbor, unde emulează rezistenţa comenzilor avionului. în afara modificării rezistenţei mecanice, se mai transmit diferite vibraţii şi şocuri concomitente cu mişcările jocului, care contribuie la sporirea realismului. Joystick-urile mai sunt folosite în aeronautică, în locul manşei, pentru pilotarea avioanelor, şi în industrie, pentru dirijarea diferitor utilaje, cum ar fi macarale, motostivuitoare şi braţe robotice. în ultima vreme, acest dispozitiv a fost folosit şi în domeniul medical, pentru a asigura accesul la calculator al persoanelor cu handicap locomotor sever, pentru care manipularea clasicului mouse este imposibilă.
5.3.2. Structură internă şi funcţionare
Joystick-ul se conectează la calculator printr-un cablu prevăzut cu un conector de tip D-Shell cu 15 pini. Configuraţia pinilor acestui conector este prezentată în figura 5.17.
Se observă că la acest conector se pot conecta două joystick-uri, notate în figură cu A şi B. Fiecare din aceste două joystick-uri este compus din două butoane �foc�, care sunt de fapt două contacte normal deschise (A1 şi A2 pentru joystick-ul A), şi două potenţiometre, ale căror cursoare sunt acţionate de mecanismul manetei (AX şi AY pentru joystick-ul A) şi al căror scop este de a sesiza mişcarea manetei pe cele două axe, X şi Y.
Butoanele sunt legate între un pin de masă (pinii 4 şi 5 pentru joystick-ul A, respectiv, pinul 12 pentru joystick-ul B) şi un pin de intrare specific (A1 şi A2 pentru joystick-ul A, respectiv, B1 şi B2 pentru joystick-ul B). Potenţiometrele sunt cuplate între nişte pini de alimentare de +15 V (care sunt pinii 1 şi 8 pentru joystick-ul A, respectiv, pinii 9 şi 15 pentru joystick-ul B) şi nişte pini speciali de intrare (pinul 3 pentru AX, 6 pentru AY, 11 pentru BX, 13 pentru BY).
Schema electrică este prezentată în figura 5.18.
Schema electrică internă a joystick-ului este foarte simplă, astfel justificându-se preţul relativ redus al unui joystick. Un joystick conţine în interior doar două contactoare şi două rezistenţe variabile comandate prin mici pârghii din material plastic. Această structură simplă este completată însă de circuitul electric implementat de controlerul de joystick (care se poate găsi fie pe o placă separată, fie pe placa de sunet, fie pe controlerul Multi-I/O care conţine controlerele pentru unităţi floppy sau hard disk şi pentru porturile seriale sau paralele).
Din punct de vedere tehnic, este vorba despre patru monoflop-uri. Piesa principală a unui monoflop este comparatorul, care urmăreşte diferenţa de tensiune între tensiunea de alimentare de 5V şi tensiunea de la bornele condensatorului C (vezi figura 5.18). Acest condensator se încarcă tot de la sursa de tensiune de 5V, prin intermediul potenţiometrului din joystick (a cărui rezistenţa variază între 0 şi 100 k?), care este însă înseriat în game-controller cu o rezistentă limitatoare.
în stare de repaus, condensatorul C este încărcat la +5V. Prin intermediul software-ului, şi anume printr-o comanda I/O, este activat un contactor electronic notat pe schemă cu START, care descarcă brusc condensatorul. Tensiunea la bornele acestuia devine 0V. Dacă circuitul este redeschis, condensatorul începe să se încarce prin rezistenţa potenţiometrului. Durata acestui proces variază în funcţie de valoarea rezistenţei, practic, de poziţia manetei de joc. în aceeaşi măsură, creşte şi tensiunea de la bornele condensatorului. Tensiunea de pe condensator este comparată cu tensiunea de +5V de către comparator. Dacă diferenţa de tensiune la intrarea în comparator este mai mică decât o valoare prestabilită (cca. +5V), atunci la ieşirea din comparator apare nivelul logic 0. Dacă tensiunea la intrare creşte peste această valoare, ieşirea comută pe nivelul logic 1.
Variaţia semnalelor prin circuit după declanşarea unei măsurători se poate observa în figura 5.19.
După activarea circuitului de start prin software, ieşirea din comparator comută brusc pe nivelul logic 0 şi trece automat, după un timp prestabilit prin poziţia potenţiometrului, la nivelul logic 1. Toate cele patru ieşiri din comparator ale unui game-controller sunt stabilite de la biţii 0 până la 3 ai portului de joystick 201H (număr în hexazecimal) şi pot fi valorificate acolo prin I/O-Read de un program sau de BIOS.
Procedura este următoarea: rutina de BIOS a joystick-ului sau un program (joc), declanşează startul monoflop-ului printr-o operaţie de scriere I/O (orice informaţie la adresa 201H). Imediat după aceea, porneşte un numărător. Pe game-controller nu se află aşa ceva, de aceea se foloseşte, de obicei, numărătorul de pe placa de bază a calculatorului. Rutina testează periodic bitul comparatorului. Dacă acesta trece de la 0 la 1, înseamnă că monoflop-ul s-a derulat şi poate fi citită valoarea indicată de temporizator. Această testare a adresei joystick-ului nu poate fi evitată, deoarece game-controller-ul nu poate servi o întrerupere hardware proprie. Rezistenţa potenţiometrului poate fi calculată conform relaţiei:
în realitate, nu există o linie caracteristică ideală, ceea ce înseamnă că, în starea de repaus a manetei de joc, potenţiometrele X şi Y nu prezintă exact jumătatea valorii potenţiometrului (50 k?). Nici valorile de început şi de încheiere nu pot fi prevăzute exact. Aceste valori se modifică în timpul funcţionării, prin solicitare mecanică. De aceea, joystick-ul trebuie recalibrat din când în când.
Datorită faptului că principala componentă a unui joystick este potenţiometrul, este interesant faptul că un gameport poate fi utilizat şi pentru conectarea diferiţilor senzori, de exemplu, pentru măsurarea unor parametri ai mediului ambiant. Pe de o parte, intrările pentru tastele �foc� pot fi utilizate pentru transmiterea de stări binare (de exemplu, dacă o uşă este închisă sau deschisă). Pe de altă parte, senzorii analogici, cum ar fi termistorii (utilizaţi pentru măsurarea unor temperaturi), fotorezistenţele (utilizate pentru măsurarea gradului de iluminare al unei încăperi) şi senzorii Hall (utilizaţi ca senzori de proximitate) pot fi conectaţi în locul potenţiometrelor. în plus, măsurarea unor tensiuni este posibilă prin intercalarea unui tranzistor cu efect de câmp. De asemenea, este de apreciat că pe unii din pinii conectorului de gameport se găseşte tensiunea de +5V, tensiunea de lucru a calculatorului, care poate fi utilizată şi în exteriorul acestuia, dacă este preluată de aici.