1. Introducere

Scopul proiectului este realizarea unui sistem de citire a miscarii pe axele OX, OY si OZ. Astfel vom avea nevoie de trei variabile, cu ajutorul carora microcontroller-ul va calcul miscarea reala pe aceste axe. De asemenea as dori sa realizez si o aplicatie 3D in java, in care se va demonstra functionalitatea sistemului.

2. Implementare hardware

Pentru proiect voi folosi un soclu triunghiular, in fiecare varf aflandu-se un mouse PS/2.De rotita corespunzatoare axei OX a fiecarui mouse voi infasura cate o sfoara, cele trei sfori fiind legate in centrul triunghilui echilateral de un inel. Astfel utilizatorul isi va pune inelul, iar miscarea mainii sale va fi inregistrata pe axele ox a fiecarui mouse, ca in imagine, dar folosind 3 mouse-uri:

Structura conectorului mouse-ului:

5-pin DIN (AT/XT): 1 - Clock 2 - Data 3 - Neimplementat 4 - Ground 5 - Vcc (+5V)

Fiecare mouse va fi avea legate Out-ul si Clock-ul la un pin al microcontroller-ului,printr-o rezistenta de 330 de ohmi. De asemeneavor fi legate la placuta si ground-ul si vcc-ul mouse-urilor. Un exemplu sugestiv avem aici:

3. Implementare software:

Partea mai dificila a proiectului va fi simularea protocolului PS/2 cu ajutorul microcontroller-ului .

Semnalul de clock este generat de mouse. Microcontrollerul controleaza comunicatia, astfel ca, daca doreste sa faca o transmisie, va inhiba comunicatia punand semnalul de clock pe low. Apoi microcontrollerul va pune semnalul de Data pe low si va elibera Clock-ul. Acesta este semnalul de “request to send”, semnaland mouse-ul sa inceapa generarea semnalelor de ceas si trimiterea de date.

Avem aici cele trei stari ale comunicatiei:

Data = high, Clock = high: Idle state. Data = high, Clock = low: Communication Inhibited. Data = low, Clock = high: Host Request-to-Send

Datele sunt transmise bit cu bit, in frame-uri de 11-12 biti. Acesti biti sunt:

Datele trimise de la mouse la microcontroller sunt citite pe frontul descrescator al ceasului. Cele trimise de la microcontroller la mouse sunt citite pe frontul crescator al ceasului.

Comunicarea de la mouse la microcontroller

Cand mouse-ul doreste sa transmita date, mai intai verifica linia de Clock pentru a se asigura ca este pe nivelui high. Daca nu este, inseamna ca microcontrollerul inhiba comunicatia, si mouse-ul trebuie sa salveze intr-un buffer datele ce ar fi trebuit trimise.

Mouse-ul trimite un bit de date cand semnalul de Clock este high, iar microcontrollerul citeste cand acesta este pe low:

Daca in orice moment transmiterea unui frame este intrerupta, mouse-ul va retransmite intregul frame.

Comunicarea de la microcontroller la mouse

Aceasta comunicare este putin diferita. Daca microcontrollerul doreste sa transmita date, el trebuie mai intai sa puna liniile de Data si Clock in starea “request-to-send” astfel:

Dupa ce primeste bit-ul de stop, mouse-ul pune semnalul de date pe low si mai genereaza un ultim semnal de ceas. Daca microcontrollerul nu elibereaza semnalul de Data dupa 11 semnale de ceas, mouse-ul va continua sa genereze semnale de ceas pana se elibereaza Data.

Pentru a simplifica procesul, voi pune aici pasii necesari comunicarii de la microcontroller la mouse:

1)Punem Clock-ul pe low pentru cel putin 100 de microsecunde;

2)Punem Data pe low.

3)Eliberam Clock-ul.

4)Asteptam ca mouse-ul sa puna Clock-ul pe low.

5)Setam/resetam linia de Date pentru a trimite primul bit de date

6)Asteptam ca mouse-ul sa puna Clock-ul pe high.

7)Asteptam mouse-ul sa puna Clock pe low.

8)Repetam pasii 5-7 pentru ceilalti sapte biti de date si bitul de paritate

9)Eliberam linia de Date

10)Asteptam ca mouse-ul sa puna Data pe low

11)Asteptam ca mouse-ul sa puna Clock-ul pe low

12)Asteptam ca mouse-ul sa elibereze Data si Clock

O schema detaliata a comunicatiei de la microcontroller la mouse:

Dupa fiecare citire de date de la mouse, microcontroller-ul va calcula miscarea reala pe axele OX, OY si OZ, calculand pozitia varfului piramidei, si va trimite rezultatul catre computer prin USB.

Doresc de asemenea sa implementez o aplicatie grafica, o camera in 3 dimensiuni si o sfera ce se va misca de-a lungul camerei, conform pozitiilor pe cele trei axe, date primite de la microcontroller.

In viitor, daca proiectul este finalizat cu brio, as dori sa fac si un joculet de pong:

4. Bibliografie si link-uri utile:

1. http://neil.fraser.name/hardware/3d-mouse/

2. http://www.epanorama.net/documents/pc/mouse.html

3. http://www.computer-engineering.org/ps2mouse/

4. http://pcbheaven.com/wikipages/The_PS2_protocol/