SlideShare a Scribd company logo
1 of 35
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

More Related Content

Similar to Mouse Optik Deteksi

M I C R O C O N T R O L L E R 2009new
M I C R O C O N T R O L L E R 2009newM I C R O C O N T R O L L E R 2009new
M I C R O C O N T R O L L E R 2009newDeddy Susilo
 
Presentasi dan video pembelajaran Mikrokontroller
Presentasi dan video pembelajaran MikrokontrollerPresentasi dan video pembelajaran Mikrokontroller
Presentasi dan video pembelajaran Mikrokontrollerirsyadsyawal1
 
Kertas penerangan c02 Microprcessor
Kertas penerangan c02 MicroprcessorKertas penerangan c02 Microprcessor
Kertas penerangan c02 Microprcessormuhammad sofi
 
Pengantar sistem teknologi informasi (tugas 1)
Pengantar sistem teknologi informasi (tugas 1)Pengantar sistem teknologi informasi (tugas 1)
Pengantar sistem teknologi informasi (tugas 1)Yudi WindyatmiKabilly
 
Rancang Walking Robot Dengan Mikrokontroler Atmega16
Rancang Walking Robot Dengan Mikrokontroler Atmega16Rancang Walking Robot Dengan Mikrokontroler Atmega16
Rancang Walking Robot Dengan Mikrokontroler Atmega16thoriqdzulfikar
 
Walking robot bergerak maju berhenti menggunakan atmega16
Walking robot bergerak maju berhenti menggunakan atmega16Walking robot bergerak maju berhenti menggunakan atmega16
Walking robot bergerak maju berhenti menggunakan atmega16Teguh Wiratama
 
Menampilkan Karakter pada Lcd dengan Mikrokontroler ATMEGA16
Menampilkan Karakter pada  Lcd dengan Mikrokontroler ATMEGA16Menampilkan Karakter pada  Lcd dengan Mikrokontroler ATMEGA16
Menampilkan Karakter pada Lcd dengan Mikrokontroler ATMEGA16University of Lampung
 
Pengantar teknologi informasi
Pengantar teknologi informasiPengantar teknologi informasi
Pengantar teknologi informasifarizky berian
 
PID Implementation on Octave
PID Implementation on OctavePID Implementation on Octave
PID Implementation on OctaveLusiana Diyan
 
Tutorial membuat project termometer dan jam digital menggunakan codevision av...
Tutorial membuat project termometer dan jam digital menggunakan codevision av...Tutorial membuat project termometer dan jam digital menggunakan codevision av...
Tutorial membuat project termometer dan jam digital menggunakan codevision av...Muhammad Kennedy Ginting
 
Merakit komputer sesuai dengan SOP
Merakit komputer sesuai dengan SOPMerakit komputer sesuai dengan SOP
Merakit komputer sesuai dengan SOPYusron Muzaki
 
Traffic Light Berbasis ATMega32A
Traffic Light Berbasis ATMega32ATraffic Light Berbasis ATMega32A
Traffic Light Berbasis ATMega32AAmmazizzaky Tarigan
 
Menerapkan dasar dasar mikrokontroler
Menerapkan dasar dasar mikrokontrolerMenerapkan dasar dasar mikrokontroler
Menerapkan dasar dasar mikrokontrolergixcznow
 
Peripheral peripheral jaringan pada komputer terapan
Peripheral peripheral jaringan pada komputer terapanPeripheral peripheral jaringan pada komputer terapan
Peripheral peripheral jaringan pada komputer terapanAgus Lawolo
 

Similar to Mouse Optik Deteksi (20)

M I C R O C O N T R O L L E R 2009new
M I C R O C O N T R O L L E R 2009newM I C R O C O N T R O L L E R 2009new
M I C R O C O N T R O L L E R 2009new
 
Sensor suhu LM 35
Sensor suhu LM 35Sensor suhu LM 35
Sensor suhu LM 35
 
Presentasi dan video pembelajaran Mikrokontroller
Presentasi dan video pembelajaran MikrokontrollerPresentasi dan video pembelajaran Mikrokontroller
Presentasi dan video pembelajaran Mikrokontroller
 
Evolusi dan Kinerja Komputer
Evolusi dan Kinerja KomputerEvolusi dan Kinerja Komputer
Evolusi dan Kinerja Komputer
 
Kertas penerangan c02 Microprcessor
Kertas penerangan c02 MicroprcessorKertas penerangan c02 Microprcessor
Kertas penerangan c02 Microprcessor
 
Pengantar sistem teknologi informasi (tugas 1)
Pengantar sistem teknologi informasi (tugas 1)Pengantar sistem teknologi informasi (tugas 1)
Pengantar sistem teknologi informasi (tugas 1)
 
Laporan Joystick
Laporan JoystickLaporan Joystick
Laporan Joystick
 
Rancang Walking Robot Dengan Mikrokontroler Atmega16
Rancang Walking Robot Dengan Mikrokontroler Atmega16Rancang Walking Robot Dengan Mikrokontroler Atmega16
Rancang Walking Robot Dengan Mikrokontroler Atmega16
 
Walking robot bergerak maju berhenti menggunakan atmega16
Walking robot bergerak maju berhenti menggunakan atmega16Walking robot bergerak maju berhenti menggunakan atmega16
Walking robot bergerak maju berhenti menggunakan atmega16
 
Menampilkan Karakter pada Lcd dengan Mikrokontroler ATMEGA16
Menampilkan Karakter pada  Lcd dengan Mikrokontroler ATMEGA16Menampilkan Karakter pada  Lcd dengan Mikrokontroler ATMEGA16
Menampilkan Karakter pada Lcd dengan Mikrokontroler ATMEGA16
 
Pengantar teknologi informasi
Pengantar teknologi informasiPengantar teknologi informasi
Pengantar teknologi informasi
 
Bahan ajar
Bahan ajarBahan ajar
Bahan ajar
 
PID Implementation on Octave
PID Implementation on OctavePID Implementation on Octave
PID Implementation on Octave
 
Tutorial membuat project termometer dan jam digital menggunakan codevision av...
Tutorial membuat project termometer dan jam digital menggunakan codevision av...Tutorial membuat project termometer dan jam digital menggunakan codevision av...
Tutorial membuat project termometer dan jam digital menggunakan codevision av...
 
Merakit komputer sesuai dengan SOP
Merakit komputer sesuai dengan SOPMerakit komputer sesuai dengan SOP
Merakit komputer sesuai dengan SOP
 
Traffic Light Berbasis ATMega32A
Traffic Light Berbasis ATMega32ATraffic Light Berbasis ATMega32A
Traffic Light Berbasis ATMega32A
 
Modul packet-tracer
Modul packet-tracerModul packet-tracer
Modul packet-tracer
 
Menerapkan dasar dasar mikrokontroler
Menerapkan dasar dasar mikrokontrolerMenerapkan dasar dasar mikrokontroler
Menerapkan dasar dasar mikrokontroler
 
Komputer terapan
Komputer terapanKomputer terapan
Komputer terapan
 
Peripheral peripheral jaringan pada komputer terapan
Peripheral peripheral jaringan pada komputer terapanPeripheral peripheral jaringan pada komputer terapan
Peripheral peripheral jaringan pada komputer terapan
 

Mouse Optik Deteksi

  • 1. 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
  • 2. 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
  • 3. 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
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. Jenis perintah yang dapat dikirimkan ke mouse: Pesan yang dikirimkan balik oleh mouse: 7
  • 8. 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
  • 9. 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
  • 11. /***************************************************************** ****************** 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
  • 12. #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
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. mouseIndex = 0; //processMouseData(); mouseFlag=1; } } void releaseClockMouse() { ClkReg = 0; Clk = 1; } void releaseDataMouse() { DataReg = 0; Data = 1; } void holdClockMouse() { Clk = 0; ClkReg = 1; } 16
  • 17. 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
  • 18. { 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
  • 19. 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
  • 20. 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
  • 21. //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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. // 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
  • 26. // 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
  • 27. 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
  • 28. // 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
  • 29. // 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
  • 30. { 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
  • 31. 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
  • 32. 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
  • 34. 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
  • 35. 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