PS2 Mouse Interfacing dengan pemrograman bahasa C
-
Upload
josephine-prasetya -
Category
Documents
-
view
297 -
download
1
description
Transcript of PS2 Mouse Interfacing dengan pemrograman bahasa C
BAB I
PENDAHULUAN
1.1 Latar Belakang
Dewasa ini semakin banyak jenis mouse yang dijual dipasaran, mulai dari mouse yang digunakan untuk keperluan pengoperasian komputer biasa sampai mouse yang khusus diciptakan untuk keperluan bermain game. Rata rata mouse yang digunakan adalah mouse yang menggunakan sensor optik sebagai pendeteksi gerakan dari mouse.
Alasan kami mengambil optical mouse sebagai proyek di laboratorium mikrokontroler adalah karena merasa bahwa optical mouse sangat menarik untuk dipelajari dan diteliti, serta merupakan pengembangan dari mouse konvensional yang sudah ada sebelumnya.
Disini kami akan mencoba untuk meneliti data yang dikirimkan optical mouse menggunakan rangkaian mikrokontroler berbasis ATmega 8535. Data data yang terkirim oleh optical mouse akan kami tampilkan pada lcd.
1.2 Tujuan
Pengerjaan proyek mikrokontroler dan penyusunan laporan ini bertujuan
untuk:
Membuat suatu modul pembelajaran mengenai sensor CMOS pada mouse
optik, sehingga pembaca dapat memperoleh informasi mengenai
karakteristuk, fungsi, prinsip kerja dan cara pengoprasian mouse optik
dengan mikrokontroler.
Mengembangkan kreatifitas mahasiswa dalam menganalisa dan
menerapkan hasil penelitian pada suatu apilkasi dasar, guna pembuktian
hasil pnelitian.
Memenuhi tugas praktek di Section Microcontroler tingkat 3.
1.3 Manfaat
1
Manfaat yang didapat adalah lebih memahami pengoprasian dan cara kerja
mouse optik sehingga kami dapat mengaplikasikannya dalam aplikasi
sederhana.
1.4 Batasan Masalah
Interface dengan mouse hanya bisa menggunakan PS/2. Apabila menggunakan converter USB to PS/2, gerakan tidak terdeteksi.
Jenis mouse yang digunakan adalah optical mouse.
2
BAB II
LANDASAN TEORI
Dalam proyek ini kami menggunakan beberapa komponen pendukung supaya
perangkat yang kami rancang dapat beroprasi dengan baik sesuai dengan yang
kami harapkan. Komponen tersebut semua telah terbagi menurut fungsinya
masing-masing.
2.1 Atmega 8535
ATMEGA 8535 menggunakan teknologi RISC (Reduce Instruction
Set Computing) dimana program berjalan lebih cepat karena hanya
membutuhkan satu siklus clock untuk mengeksekusi satu instruksi
program.
Fitur-fitur yang dimiliki oleh mikrokontroler Atmega 8535 adalah
sebagai berikut :
1. Saluran I/O sebanyak 32 buah, yaitu PORT A, PORT B, PORT C,
dan PORT D.
2. ADC internal sebanyak 8 saluran.
3. 3 buah Timer/Counter dengan kemampuan pembandingan.
4. CPU yang terdiri dari 32 buah register.
3
5. SRAM sebesar 512 byte.
6. Memori Flash sebesar 8 kb dengan kemampuan Read While Write.
7. PORT anantarmuka SPI.
8. EEPROM sebesar 512 byte yang dapat diprogram saat operasi.
9. Antarmuka komparator analog.
10. PORT USART untuk komunikasi serial.
11. Sistem mikroprosesor 8 bit berbasis RISC dengan kecepatan
maksimal 16 MHz.
12. Dll
Pemrograman mikrokontroler Atmega 8535 dapat menggunakan low
level language (assembly) dan high level language (C, Basic, Pascal,
JAVA, dll) tergantung compiler yang digunakan (Widodo Budiharto,
2006). Pada pembuatan proyek ini, kami menggunakan CVAVR sebagai
software dalam memberikan input instruksi ke mikrokontroler Atmega
8535.
2.2 PS/2 Mouse Optic
Mouse Optik menggunakan Light-Emitting Diode (LED) dan Photodiode untuk mendeteksi pergerakan relatif dengan sebuah permukaan, tidak seperti mouse mekanik yang menggunakan bola untuk memutar shaft yang terhubung dengan encoder untuk mengukur perpindahan.
Mouse Optik paling awal hanya dapat digunakan pada permukaan yang telah diberi pola tertentu, namun kini mouse optik telah dapat bekerja pada hampir semua permukaan datar. Biasanya mouse optik tidak dapat mendeteksi pergerakan pada permukaan mengkilat seperti cermin,
4
walaupun beberapa model lebih lanjut dapat berfungsi bahkan pada kaca yang bening.
PS/2 mouse interface menggunakan protocol serial bidirectional (dua arah) untuk mengirimkan pergerakan dan kondisi tombol kepada komputer/kontroler.
Ada kalanya juga, kontroler, mungkin mengirimkan perintah kepada mouse untuk mengatur report rate, resolusi, mereset mouse, menonaktifkan mouse, dsb.
Tegangan yang digunakan untuk mouse optik ini berkisar antara 5V ~ 100 mA.
2.3 LCD 2X16
LCD (Liquid Crystal Display) adalah modul penampil yang banyak digunakan karena tampilannya menarik. LCD merupakan salah satu jenis display elektronik yang dibuat dengan teknologi CMOS logic, yang bekerja dengan tidak menghasilkan cahaya tetapi dengan cara memantulkan cahaya yang berada di sekelilingnya. LCD jenis ini dapat menampilkan data berupa angka, huruf, maupun karakter dalam dua baris dan enambelas kolom.
Proyek ini menggunakan LCD sebagai interfacenya, sehingga pengguna bisa mengetahui berapa nilai jarak X dan Y yang terbaca oleh sensor CMOS.
5
BAB III
METODE PENGERJAAN
3.1Cara Kerja
Cara kerja mouse optik pada umumnya sebagai berikut: lampu LED menembarkan cahayanya pada permukaan lalu, sensor cahaya yang ada pada bagian bawah mouse akan menangkap pergeseran yang terjadi pada cahaya tersebut. Atau dapat juga dikatakan sebagai berikut. Bila mouse mekanik komputer mencatat pergeseran yang dilakukan oleh mouse, sebaliknya dengan mouse optical, komputer mencatat pergeseran yang terjadi pada landasan mouse.
Sedangkan untuk interface dengan PS/2, hal-hal yang perlu diperhatikan adalah
Konektor PS/2:
Algoritma PS/2:
• PS/2 port menggunakan clock keluar dan masuk untuk mengirimkan data. Data dikirim dan diterima dan disinkronkan dengan clock ini. Mouse mengeluarkan sinyal clock dan Data dibaca pada tepian negatif clock.
• Susunan data adalah sebagai berikut :
1 start bit, 8 data bit, 1 parity bit, 1 stop bit
6
Jenis perintah yang dapat dikirimkan ke mouse:
Pesan yang dikirimkan balik oleh mouse:
7
Urutan inisialisasi mouse:
Power-on Reset:
Mouse: AA Self-test passed
Mouse: 00 Mouse ID
Host: FF Reset command
Mouse: FA Acknowledge
Mouse: AA Self-test passed
Mouse: 00 Mouse ID
Host: FF Reset command
Mouse: FA Acknowledge
Mouse: AA Self-test passed
Mouse: 00 Mouse ID
Host: FF Reset command
Mouse: FA Acknowledge
Mouse: AA Self-test passed
Mouse: 00 Mouse ID
Host: F3 Set Sample Rate
Mouse: FA Acknowledge
Host: 0A decimal 10
Mouse: FA Acknowledge
Host: F2 Read Device Type
Mouse: FA Acknowledge
Mouse: 00 Mouse ID
Host: E8 Set resolution
Mouse: FA Acknowledge
Host: 03 8 Counts/mm
8
Mouse: FA Acknowledge
Host: E6 Set Scaling 1:1
Mouse: FA Acknowledge
Host: F3 Set Sample Rate
Mouse: FA Acknowledge
Host: 28 decimal 40
Mouse: FA Acknowledge
Host: F4 Enable
Mouse: FA Acknowledge
Initialization complete...
Urutan Transmisi data:
1) Bring the Clock line low for at least 100 microseconds.
2) Bring the Data line low.
3) Release the Clock line.
4) Wait for the device to bring the Clock line low.
5) Set/reset the Data line to send the first data bit
6) Wait for the device to bring Clock high.
7) Wait for the device to bring Clock low.
8) Repeat steps 5-7 for the other seven data bits and the parity bit
9) Release the Data line.
10) Wait for the device to bring Data low.
11) Wait for the device to bring Clock low.
12) Wait for the device to release Data and Clock
Setelah itu, mouse akan mengirimkan 3 byte data yang berisikan data tentang pergerakan dan kondisi tombol kepada host, dengan format sebagai berikut:
9
3.2 Program
Setting awal LCD pada CVAVR
10
/***********************************************************************************
This program was produced by the
CodeWizardAVR V2.05.6
Automatic Program Generator
© Copyright 1998-2012 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project : PS/2 Mouse Interface Atmega8535
Version : Alpha
Date : 16/10/2013
Author : richardvsw
Company : TMK#44
Comments: Taken from http://students.iitk.ac.in/eclub/assets/tutorials/PS2MOUSE.pdf
Chip type : ATmega8535
Program type : Application
AVR Core Clock frequency: 12,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 128
************************************************************************************/
#include <mega8535.h>
11
#include <delay.h>
#include <stdlib.h>
#include <alcd.h> // Alphanumeric LCD functions
#define x_limit 800 //Set limit X range
#define y_limit 300 //Set limit Y range
#define Clk PORTB.0 //PORTB.0 = Clock generated from Host
#define ClkReg DDRB.0 //DDRB.0 = Host Clock Register
#define Data PORTB.1 //PORTB.1 = Data generated from Host
#define DataReg DDRB.1 //DDRB.1 = Host Data Register
#define ClkDev PINB.0 //PINB.0 = Clock from Device
#define DataDev PINB.1 //PINB.1 = Data from Device
/*********************Byte 1 Configuration**************************
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0
Y overflow | X overflow | Y sign bit | X sign bit | Always 1 | Middle Btn | Right Btn | Left Btn
Details:
Bit 0 - Bit 2 represents the status of mouse buttons, 1 for pressed and 0 for not pressed.
Bit 4 & Bit 5 represents the movement direction of mouse.
12
Bit 6 & Bit 7 set if the counters go past 255.
****************************************************************************************************************************/
char i=0;
char mask[] = //used for comparing the byte with the odd parity
{
0x01,
0x02,
0x04,
0x08,
0x10,
0x20,
0x40,
0x80
};
char oddParity(char byte) //used for error detection
{
char i, count = 0; //Bit paritas akan di set menjadi bernilai 1 bila nilai 1 pada Data adalah genap
for(i=0;i<8;i++) //Bit paritas akan di set menjadi bernilai 0 bila nilai 1 pada Data adalah ganjil
{ //Jumlah 1 pada Data + bit paritas pasti = ganjil -> paritas ganjil
if(mask[i] & byte)
count++;
13
}
return ((count+1)%2);
}
char mouseStatus = 0;
//mouse status = 0 : no activity
//mouse status = 1 : falling edge handled
//mouse status = 2 : rising edge handled
//Introduces delay in case of parity error
char mouseData = 0; //received data will be stored here temp
char mouseIndex = 0; //progress
char mouseFlag = 0; //mouseFlag = 1: data is received, mouseFlag = 2: Parity not matched
int mouseX = 0; //Set default X coordinate
int mouseY = 0; //Set default Y coordinate
char klikKiri = 0;
char klikKanan = 0;
char klikTengah = 0;
void readMouse()
{
if(mouseStatus==0 && ClkReg==0 && ClkDev==0 && DataReg==0 && DataDev==0) //if inactive and start bit is there
{
mouseStatus = 1; //start bit received
14
mouseIndex = 0; //initialise
mouseData = 0; //initialise
mouseFlag = 0; //initialise
}
//if falling edge handled
//look for rising edge and handle it
else if(mouseStatus==1 && ClkReg==0 && ClkDev==1)
mouseStatus = 2;
//if rising edge handled
//look for falling edge and handle it
//data is scanned at falling edge
else if(mouseStatus==2 && ClkReg==0 && ClkDev==0)
{
if(mouseIndex<8 && DataDev==1)
mouseData += (mask[mouseIndex]);
mouseIndex++;
mouseStatus = 1;
}
// stop bit
if(mouseIndex>9) //all eight bytes have been received AND stop bit gone
{
mouseStatus = 0;
mouseIndex = 0;
15
//processMouseData();
mouseFlag=1;
}
}
void releaseClockMouse()
{
ClkReg = 0;
Clk = 1;
}
void releaseDataMouse()
{
DataReg = 0;
Data = 1;
}
void holdClockMouse()
{
Clk = 0;
ClkReg = 1;
}
16
void holdDataMouse()
{
Data = 0;
DataReg = 1;
}
void writeMouse(char cmd)
{
releaseDataMouse(); //Release both the lines
releaseClockMouse(); //For enabling Device-to-Host Communication, Host clock and data must set to high to prevent inhibit
holdClockMouse(); //Bring Clock line low for at least 100 uS
delay_us(120);
holdDataMouse(); //Bring the Data line low
releaseClockMouse(); //Release the Clock line
while(ClkDev==0); // wait for the clock high
for(i=0;i<=7;i++) //8 data bits
{
17
while(ClkDev==1); //Wait for device to bring the clock low
//Set the data bit
if(cmd & mask[i]) /*== 1)*/
releaseDataMouse(); //Changed
else
holdDataMouse();
while(ClkDev==0); //Wait for devise to bring the clock high
}
while(ClkDev==1); //Wait for devise to bring the clock low
//Set the parity
if(oddParity(cmd)==1) //try reversing the parity, check every byte
{
releaseDataMouse();
}
else
{
holdDataMouse();
}
while(ClkDev==0); //Wait for devise to bring the clock high
while(ClkDev==1); //Wait for device to bring the clock low
releaseDataMouse(); //Release the data line
18
while(ClkDev==0); //wait for clock high
while(DataDev==1); //Wait for device to bring data low
while(ClkDev==1); //Wait for device to bring clock low
while(ClkDev==0 || DataDev==0); //Wait for device to release clock and data
}
void mouseInit()
{
while(1)
{
delay_ms(100);
writeMouse(0xFF); //0xFF = Reset Mouse Command - Mouse returns AA (if passed self-test), 0x00 after self-test
//receive 0xFA - acknowledgment
while(!mouseFlag)
readMouse();
if(mouseFlag==1 && mouseData==0xFA) //0xFA = Mouse Acknowledge Command, Sent by Mouse after each command byte
mouseFlag=0;
else continue;
//receive 0xAA - self test passed
while(!mouseFlag)
readMouse();
19
if(mouseFlag==1 && mouseData==0xAA) //0xAA = mouse passed self-test
mouseFlag=0;
else continue;
//receive 0x00 - device ID
while(!mouseFlag)
readMouse();
if(mouseFlag==1 && mouseData==0x00)
mouseFlag=0;
else continue;
//Enter remote mode
writeMouse(0xF0);
//receive 0xFA - acknowledgment
while(!mouseFlag)
readMouse();
if(mouseFlag==1 && mouseData==0xFA) //0xFA = Mouse Acknowledge Command, Sent by Mouse after each command byte
mouseFlag=0;
else continue;
break;
}
}
void scanMouse()
{
//stores data from mouse
20
char byte1 = 0;
char byte2 = 0;
char byte3 = 0;
writeMouse(0xEB); //EB = Read Remote Data, Mouse sends 1 data packet
while(!mouseFlag)
readMouse();
if(mouseFlag==1 && mouseData==0xFA)
mouseFlag=0;
else return;
while(!mouseFlag)
readMouse();
if(mouseFlag==1)
{
byte1 = mouseData;
mouseFlag=0;
}
else
{
if(mouseFlag==2)
return;
}
while(!mouseFlag)
readMouse();
21
if(mouseFlag==1)
{
byte2 = mouseData;
mouseFlag=0;
}
else return;
while(!mouseFlag)
readMouse();
if(mouseFlag==1)
{
byte3 = mouseData;
mouseFlag=0;
}
else return;
//Byte processing
if(byte1 & 0x01) //compare the byte1 with 0x01, if 0x01 exist means left button clicked
klikKiri=1;
else
klikKiri=0;
if(byte1 & 0x02) //compare the byte1 with 0x02, if 0x02 exist means right button clicked
klikKanan=1;
22
else
klikKanan=0;
if(byte1 & 0x04) //compare the byte1 with 0x04, if 0x04 exist means middle button clicked
klikTengah=1;
else
klikTengah=0;
if(!(byte1 & 0x10)) //X move on + coordinate
{
if(x_limit-byte2 > mouseX) //X limit - byte2 that contains X movement data
mouseX += byte2;
else
mouseX = x_limit; //mouse reached end of the screen
}
else //X move on - coordinate
{
if(255-byte2+1 < mouseX)
mouseX -= (255-byte2+1);
else
mouseX = 0; //mouse reached begining of the screen
}
if(!(byte1 & 0x20)) //Y move on + coordinate
23
{
if(y_limit-byte3 > mouseY) //Y limit - byte3 that contains Y movement data
mouseY += byte3;
else
mouseY = y_limit; //mouse reached end of the screen
}
else //Y move on - coordinate
{
if(255-byte3+1 < mouseY)
mouseY -= (255-byte3+1);
else
mouseY = 0; //mouse reached begining of the screen
}
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
char c[20];
int loop;
// Input/Output Ports initialization
// Port A initialization
24
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
25
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
26
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
27
// USART disabled
UCSRB=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTA Bit 0
// RD - PORTA Bit 1
28
// EN - PORTA Bit 2
// D4 - PORTA Bit 4
// D5 - PORTA Bit 5
// D6 - PORTA Bit 6
// D7 - PORTA Bit 7
// Characters/line: 8
lcd_init(16);
releaseDataMouse(); //releasing both data and clock line to prevent inhibit
releaseClockMouse();
delay_ms(500);
lcd_clear();
mouseInit(); //initialize the mouse by sending a command and receiving back the message
delay_ms(1000);
lcd_clear();
lcd_gotoxy(0,0);
for(loop=0;loop < 16;loop++) //simple loading screen
{
lcd_puts("+");
delay_ms(100);
}
delay_ms(500);
lcd_clear();
while (1)
{
29
PORTA.3=1; //activate LCD back lamp
lcd_clear();
lcd_gotoxy(0,0);
scanMouse();
lcd_putsf("X:");
itoa(mouseX,c); //itoa used to convert int to char
lcd_puts(c);
lcd_gotoxy(0,1);
lcd_putsf("Y:");
itoa(mouseY,c); //itoa used to convert int to char
lcd_puts(c);
if(mouseY>150)
{
if(mouseX<50)
lcd_gotoxy(0,0);
if(mouseX<100 && mouseX>50)
lcd_gotoxy(1,0);
if(mouseX<150 && mouseX>100)
lcd_gotoxy(2,0);
if(mouseX<200 && mouseX>150)
lcd_gotoxy(3,0);
if(mouseX<250 && mouseX>200)
lcd_gotoxy(4,0);
if(mouseX<300 && mouseX>250)
lcd_gotoxy(5,0);
if(mouseX<350 && mouseX>300)
30
lcd_gotoxy(6,0);
if(mouseX<400 && mouseX>350)
lcd_gotoxy(7,0);
if(mouseX<450 && mouseX>400)
lcd_gotoxy(8,0);
if(mouseX<500 && mouseX>450)
lcd_gotoxy(9,0);
if(mouseX<550 && mouseX>500)
lcd_gotoxy(10,0);
if(mouseX<600 && mouseX>550)
lcd_gotoxy(11,0);
if(mouseX<650 && mouseX>600)
lcd_gotoxy(12,0);
if(mouseX<700 && mouseX>650)
lcd_gotoxy(13,0);
if(mouseX<750 && mouseX>700)
lcd_gotoxy(14,0);
if(mouseX>750)
lcd_gotoxy(15,0);
}
else if(mouseY<150)
{
if(mouseX<50)
lcd_gotoxy(0,1);
if(mouseX<100 && mouseX>50)
lcd_gotoxy(1,1);
31
if(mouseX<150 && mouseX>100)
lcd_gotoxy(2,1);
if(mouseX<200 && mouseX>150)
lcd_gotoxy(3,1);
if(mouseX<250 && mouseX>200)
lcd_gotoxy(4,1);
if(mouseX<300 && mouseX>250)
lcd_gotoxy(5,1);
if(mouseX<350 && mouseX>300)
lcd_gotoxy(6,1);
if(mouseX<400 && mouseX>350)
lcd_gotoxy(7,1);
if(mouseX<450 && mouseX>400)
lcd_gotoxy(8,1);
if(mouseX<500 && mouseX>450)
lcd_gotoxy(9,1);
if(mouseX<550 && mouseX>500)
lcd_gotoxy(10,1);
if(mouseX<600 && mouseX>550)
lcd_gotoxy(11,1);
if(mouseX<650 && mouseX>600)
lcd_gotoxy(12,1);
if(mouseX<700 && mouseX>650)
lcd_gotoxy(13,1);
if(mouseX<750 && mouseX>700)
lcd_gotoxy(14,1);
32
if(mouseX>750)
lcd_gotoxy(15,1);
}
if(klikKiri)
{
lcd_putsf("<");
}
else if(klikKanan)
{
lcd_putsf(">");
}
else if(klikTengah)
{
lcd_putsf("|");
}
else
{
lcd_putsf("^");
}
delay_ms(40);
};
}
3.3 Hasil Percobaan
33
Hasil dari percobaan yang telah dilakukan adalah, LCD akan menampilkan nilai koordinat X dan Y sesuai dengan pergerakan yang dilakukan oleh mouse. Disini kami membatasi koordinat X dan Y antara 0-800. Selain itu LCD juga akan menampilkan pointer sesuai dengan pergerakan mouse.
34
BAB IV
PENUTUP
4.1 Kesimpulan
Mouse optik merupakan perangkat yang menghasilkan output berupa data yang dipengaruhi oleh faktor jarak perpindahan. Data dikirimkan dua arah secara serial .
Mouse optik termasuk salah satu sensor pendeteksi jarak yang mudah digunakan dalam berbagai aplikasi.
4.2 Kelebihan
Mouse optik tidak membutuhkan permukaan khusus, karena bisa digunakan pada permukaan yang tidak rata
Sensitifitas mouse optik lebih tinggi dibandingkan mouse manual. Harga mouse dengan konektor PS/2 lebih murah. Apabila dipakai di komputer, konektor dengan PS/2 tidak membebani
procesor.
4.3 Kekurangan
Mouse optik memerlukan permukaan yang memantulkan cahaya. Tidak fleksibel, apabila mencopot dan memasang dengan konektor PS/2
harus merestart host.
35