PS2 Mouse Interfacing dengan pemrograman bahasa C
Upcoming SlideShare
Loading in...5
×
 

PS2 Mouse Interfacing dengan pemrograman bahasa C

on

  • 376 views

 

Statistics

Views

Total Views
376
Views on SlideShare
376
Embed Views
0

Actions

Likes
0
Downloads
7
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft Word

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

PS2 Mouse Interfacing dengan pemrograman bahasa C PS2 Mouse Interfacing dengan pemrograman bahasa C Document Transcript

  • 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
  • 1.3 Manfaat 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 #define ClkReg #define Data PORTB.0 DDRB.0 PORTB.1 //PORTB.0 = Clock generated from Host //DDRB.0 = Host Clock Register //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 0 | Bit 6 | Bit 5 | Bit 4 Y overflow | X overflow | Y sign bit Btn | Right Btn | Left Btn | Bit 3 | Bit 2 | X sign bit | Always 1 | Bit 1 | Middle 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; nilai 1 pada Data adalah genap //Bit paritas akan di set menjadi bernilai 1 bila for(i=0;i<8;i++) nilai 1 pada Data adalah ganjil //Bit paritas akan di set menjadi bernilai 0 bila { paritas ganjil //Jumlah 1 pada Data + bit paritas pasti = ganjil -> if(mask[i] & byte) 13
  • count++; } 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; = 2: Parity not matched //mouseFlag = 1: data is received, mouseFlag 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 { 14
  • mouseStatus = 1; //start bit received 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; 15
  • mouseIndex = 0; //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 18
  • releaseDataMouse(); //Release the data line 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) 19
  • readMouse(); 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() { 20
  • //stores data from mouse 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) 21
  • readMouse(); 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 22
  • klikKanan=1; 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 } 23
  • if(!(byte1 & 0x20)) //Y move on + coordinate { 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; 25
  • // Timer/Counter 0 initialization // 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; 26
  • ICR1L=0x00; 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; 27
  • // USART initialization // 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 28
  • // RD - PORTA Bit 1 // 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(); back the message //initialize the mouse by sending a command and receiving 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); 30
  • if(mouseX<350 && mouseX>300) 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) 31
  • lcd_gotoxy(1,1); 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) 32
  • lcd_gotoxy(14,1); 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); }; } 33
  • 3.3 Hasil Percobaan 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