naslovna ocitavanje_pozicije_ps2_misa_pomocu_AVR_mikrokontrolera_elektronika_projekati_automatika.rsU ovom projektu prikazaćemo vam kako da iščitavate poziciju PS/2 miša pomoću AVR mikrokontrolera. Kompletan kod je komentarisan i dostupan za download na kraju teksta. Kod je pisan za ATmega8535, ali se lako može prilagoditi drugim AVR kontrolerima. Sa svim interakcijama miša se upravlja iz while(1) petlje. Veoma interesantna primena ovog projekta bio bi pokušaj da se napravi navigacija robota upotrebom  jednostavnog i jeftinog PS/2 ili USB optičkog miša.

 Naravno, miš uvek možete koristiti na konvencionalne načine za pozicioniranje u meniju vašeg uređaja i sl. U ovom primeru sve registre miša iščitavamo koristeći funkciju loop1(). To su registri:

  • mstat registar
  • x buf registar i
  • y buf registar

Kako biste mogli da koristite ovaj primer, postavite pullup otpornike na sledeće pinove mikrokontrolera:

  • CLK PORTD.2
  • DATA PORTD.3

Zatim ove pinove, kao i napajanje Vcc (+5V) i GND povežite sa konektorom miša na način prikazan na slici 1.

slika1 ocitavanje_pozicije_ps2_misa_pomocu_AVR_mikrokontrolera_elektronika_projekati_automatika.rs
Slika 1. Konektor PS/2.
Standardni PS/2 miševi šalju informacije o kretanju i pritisnutim tasterima kroz paket od tri bajta, čiji šematski prikaz je dat na slici 2.
slika2 ocitavanje_pozicije_ps2_misa_pomocu_AVR_mikrokontrolera_elektronika_projekati_automatika.rs
Slika 2. Šematski prikaz paketa podataka koje miš šalje host uređaju.
Kompletan projekat sa source kodom, pisan u C jeziku, kompajliran u CodeVision for AVR kompajleru možete preuzeti sa linka na kraju teksta. Ovde ćemo dati neke komentare samog koda. Inicijalizacija miša se vrši pozivanjem funkcije mouse_init(). Kao što smo već napomenuli, funkcija loop1() čita sve relevantne registre miša. Nakon toga dolazi while(1) petlja u kojoj se sve ponavlja. Trenutna pozicija miša se računa jednostavnim sumiranjem podataka dobijenih nakon svakog iščitavanja registra relativnog pomeranja.
Prvo ćemo objasniti šta miš detektuje. Koristili smo optički miš. Svakki miš ima svoju rezoluciju. Ova rezolucija predstavlja broj tačaka koje će miš izmeriti pri pomeranju od jednog inča. Na primer, miševi sa rezolucijom 1200dpi će poslati približno vrednost 1200 kada ga pomerimo za jedan inč.
U nastavku ćemo prikazati rezultate testa. Testirana su tri različita miša. Iznenađujuće, sva tri su reagovala na drugačiji način.
Prvi miš je davao informaciju o kretanju sa rezolucijom 1, što je značilo da u zavisnosti od pravca kretanja on daje vrednost +127 ili -127 po očitavanju (za obe ose, x i y). Ovaj miš se ponašao kao da se kod njega stalno dešavao overflow. Naravno, ovo je vrlo nezgodno jer bismo morali izuzetno često da iščitavamo podatke što bi veoma opteretilo mikrokontroer. Snimak rada ovog miša prikazan je na sledećem video klipu.
Drugi miš koji je korišćen je radio kao što se i očekivalo. On je davao tačan broj tačaka pomeraja. To znači da smo morali da napravimo jedno očitavanje pre nego što se miš pomeri za 127 tačaka. Posle toga, dolazi do overflow-a pa gubimo apsolutnu poziciju miša. Na ovaj način je moguće iščitavati miš mikrokontrolerom. Rad ovog miša prikazan je na sledećem klipu.
{youtube}AdLm9-k7qtw{/youtube}
Treći miš se pokazao kao najbolji za praćenje apsolutnog pozicioniranja pomoću mikrokontrolera. Ovaj miš zapravo ima interni bafer koji pamti tačan broj tačaka za koliko se miš pomerio, čak iako je broj tačaka pomeraja veći od 127. Pri očitavanju, on daje tačan broj tačaka pomeraja ako je on manji od 127. Ako je pomeraj između dva očitavanja veći od 127 on prikazuje broj 127 i oduzima 127 od zapamćenog pomeraja. Ovo znači da ako je proj tačaka pomeraja bio npr. 264, u naredna dva očitavanja ovaj miš će poslati 127, a u trećem očitavanju 10 (127+127+10=264). Ovo je pokazano na video klipu koji sledi.
{youtube}YDmk5CibuVE{/youtube}
Kompletan Codevision projekat sa source kodom pisanim u C-u za AVR mikrokontroler ATmega8535 možete preuzeti ovde.
Izvor: Electronics-base.com

POSTAVI ODGOVOR