Anda di halaman 1dari 36

Politeknik Manufaktur Negeri Bangka Belitung

PENDAHULUAN
Tujuan Umum:
1. Mahasiswa mengerti prosedur dan cara menggunakan software CodeVisionAVR
berbasis bahasa pemrograman C dengan baik dan benar
2. Mahasiswa memahami arsitektur dan prinsip kerja akses digital I/O pada
mikrokontroler AVR khususnya tipe ATMega8535
3. Mahasiswa bisa mengendalikan digital I/O pada mikrokontroler AVR khususnya tipe
ATMega8535 dan teknik interfacingnya dengan aplikasi berupa: LED, switch,
7segment, dan LCD

Teori Dasar
1. Arsitektur ATMega8535
AVR merupakan seri mikrokontroler CMOS 8-bit buatan Atmel, berbasis arsitektur
RISC (Reduced Instruction Set Computer). Hampir semua instruksi dieksekusi dalam satu
siklus clock. AVR mempunyai 32 register general-purpose, timer/counter fleksibel dengan
mode compare, interrupt internal dan eksternal, serial UART, programmable Watchdog
Timer, dan mode power saving. Beberapa diantaranya mempunyai ADC (Analog to Digital
Converter) dan PWM (Pulse Width Modulation) internal. AVR juga mempunyai In-System
Programmable Flash on-chip yang mengizinkan memori program untuk diprogram ulang
dalam sistem menggunakan hubungan serial SPI. Chip AVR yang digunakan untuk praktikum
adalah ATmega8535.
ATmega8535 adalah mikrokontroler CMOS 8-bit daya-rendah berbasis arsitektur
RISC yang ditingkatkan. Kebanyakan instruksi dikerjakan pada satu siklus clock,
ATmega8535 mempunyai throughput mendekati 1 MIPS per MHz.

Beberapa fitur dari AVR ATmega8535 antara lain:

Advanced RISC Architecture


o 130 Powerful Instructions Most Single Clock Cycle Execution
o 32 x 8 General Purpose Working Registers
o Fully Static Operation
Praktikum Mikrokontroler 1 (MKR 1)

Politeknik Manufaktur Negeri Bangka Belitung


o Up to 16 MIPS Throughput at 16 MHz
o On-chip 2-cycle Multiplier

Nonvolatile Program and Data Memories


o 8K Bytes of In-System Self-Programmable Flash

Endurance: 10,000 Write/Erase Cycles

o Optional Boot Code Section with Independent Lock Bits

In-System Programming by On-chip Boot Program

True Read-While-Write Operation

o 512 Bytes EEPROM

Endurance: 100,000 Write/Erase Cycles

o 512 Bytes Internal SRAM


o Programming Lock for Software Security

Peripheral Features
o Two 8-bit Timer/Counters with Separate Prescalers and Compare Modes
o One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture
Mode
o Real Time Counter with Separate Oscillator
o Four PWM Channels
o 8-channel, 10-bit ADC

8 Single-ended Channels

7 Differential Channels for TQFP Package Only

2 Differential Channels with Programmable Gain at 1x, 10x, or 200x for TQFP
Package Only

o Byte-oriented Two-wire Serial Interface


o Programmable Serial USART
o Master/Slave SPI Serial Interface
o Programmable Watchdog Timer with Separate On-chip Oscillator
o On-chip Analog Comparator

Special Microcontroller Features


o Power-on Reset and Programmable Brown-out Detection
o Internal Calibrated RC Oscillator
Praktikum Mikrokontroler 1 (MKR 1)

Politeknik Manufaktur Negeri Bangka Belitung


o External and Internal Interrupt Sources
o Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down,
o Standby and Extended Standby

I/O and Packages


o 32 Programmable I/O Lines
o 40-pin PDIP, 44-lead TQFP, 44-lead PLCC, and 44-pad MLF

Operating Voltages
o 2.7 - 5.5V for ATmega8535L
o 4.5 - 5.5V for ATmega8535

Speed Grades
o 0 - 8 MHz for ATmega8535L
o 0 - 16 MHz for ATmega8535

Gambar 1.1 Pin-pin ATMega8535 kemasan 40-pin


2. Akses I/O pada AVR
Terdapat tiga register yang dapat dipakai untuk mengakses port-port AVR yang
digunakan sebagai digital I/O, yaitu: PORTx, PINx, dan DDRx. Index x disesuaikan dengan
port yang akan dipakai (Atmega8535 mempunyai empat port yang diberi nama port-A, portB, port-C, dan port-D).

Praktikum Mikrokontroler 1 (MKR 1)

Politeknik Manufaktur Negeri Bangka Belitung


Register PORTx digunakan untuk mengeluarkan data ke pin. Register PINx digunakan
untuk membaca data dari pin. Register DDRx digunakan untuk mengatur arah aliran data
pada pin. Blok diagram lengkap dari arsitektur pin ATMega8535 sebagai digital I/O dapat
dilihat pada gambar 1.3.
Contoh untuk membuat port-D sebagai output dan mengeluarkan data bernilai 60
heksa dalam bahasa C menggunakan aplikasi Code Vision AVR.
DDRD=0xFF;

//semua port-D menjadi port output

PORTD=0x60;

//keluarkan data 60 heksa ke port-D

Contoh untuk membuat port-C sebagai port input dan membaca data dari port-C dalam
bahasa C menggunakan aplikasi Code Vision AVR.
DDRC=0x00;

//semua port-C menjadi port input

i=PINC;

//pindahkan isi pada port-C ke variabel i

Pada saat port digunakan sebagai input, instruksi PORTx dapat digunakan untuk
mengaktifkan resistor pull-up atau tidak. Contohnya sebagai berikut.
DDRC=0x00;

//semua port-C menjadi port input

PORTC=0xFF ;

//semua pin pada port-C diberi pull-up

i=PINC;

//pindahkan isi pada port-C ke variabel i

DDRC=0x00;

//semua port-C menjadi port input

PORTC=0x00 ;

//semua pull-up pada port-C dimatikan

i=PINC;

//pindahkan isi pada port-C ke variabel i

3. Alur Pemrograman
Untuk membuat program di dalam mikrokontroler AVR, kita bisa menggunakan
berbagai macam bahasa pemrograman, seperti: assembly, C, dan basic. Pada praktikum ini,
kita menggunakan bahasa pemrograman C melalui software CodeVisionAVR.

Praktikum Mikrokontroler 1 (MKR 1)

Politeknik Manufaktur Negeri Bangka Belitung


CodeVisionAVR adalah salah satu software pemrograman mikrokontroler AVR.
Fasilitas wizard yang disediakan adalah salah satu kelebihan yang dimiliki software ini
sehingga membantu pengguna untuk melakukan pemrograman.
Program yang dibuat ditulis menggunakan bahasa-C. Kemudian dikompilasi untuk
mendapatkan file.hex. Selanjutnya file.hex tersebut diisi ke dalam IC mikrokontroler dan
diujicoba melalui pengamatan indikator atau bisa juga dengan pengukuran.

Gambar 1.2 Alur pemrograman AVR menggunakan CodeVisionAVR

Gambar 1.3 Arsitektur pin sebagai digital I/O


Praktikum Mikrokontroler 1 (MKR 1)

Politeknik Manufaktur Negeri Bangka Belitung


PERCOBAAN 1
Aplikasi Port Sebagai Output Menggunakan LED
Tujuan:
Setelah melakukan praktikum ini diharapkan:
1. Mahasiswa

bisa

menggunakan

software

CodeVisionAVR

berbasis

bahasa

pemrograman C dengan prosedur yang benar


2. Mahasiswa bisa mengendalikan nyala LED sebagai port keluaran mikrokontroler
dengan teknik dan kombinasi yang diinginkan secara baik dan benar

Peralatan yang digunakan:


1. Modul mikrokontroler AVR
2. Komputer

Rangkaian percobaan

Gambar 1.4 Rangkaian sistem minimum mikrokontroler ATMega8535


Praktikum Mikrokontroler 1 (MKR 1)

Politeknik Manufaktur Negeri Bangka Belitung

Gambar 1.5 Rangkaian aplikasi LED

Prosedur Percobaan
1. Buka program CodeVisionAVR dengan menekan klik ganda icon

pada dekstop

komputer.
2. Pilih File New Project - Ok.
3. Selanjutnya pilih Yes untuk menggunakan CodeWizardAVR.
4. Pilih chip ATMega8535 dan clock 8MHz, dengan mengikuti isi sesuai gambar 1.6.
5. Lalu setting port-A sebagai output dengan cara memilih Ports, lalu pada Port A ubah
In menjadi Out mulai dari Bit 0 sampai dengan Bit 7.
6. Jika selesai, pilih File Generate, Save and Exit.
7. Arahkan direktori ke dalam folder yang anda buat sebelumnya, lalu ketik nama file
dengan Percobaan1. Tekan Save. Lakukan sampai tiga kali.
8. Ketikkan program yang diinginkan atau sesuai contoh pada daftar program
percobaan 1.
9. Lakukan compile dengan cara menekan gambar

atau tombol F9. Jika tidak ada

error tekan OK. Bila ada error, maka periksa program yang anda ketik. Lalu ulangi
lagi.
Praktikum Mikrokontroler 1 (MKR 1)

Politeknik Manufaktur Negeri Bangka Belitung

Gambar 1.6 Wizard Chip

Gambar 1.7 Wizard ports

10. Hubungkan kabel ISP downloader dari terminal USB komputer ke jalur downloader
pada modul praktikum. Hidupkan power supply pada board AVR.
11. Untuk mengisi program yang telah dibuat ke dalam chip, maka terlebih dahulu setting
programmer yang digunakan dengan cara pilih Settings Programmer pada menu
bar. Selanjutnya muncul gambar seperti gambar 1.8. Pilih tipe programmer AVRProg
(AVR910) dengan baudrate 115200, untuk COM sesuaikan dengan device manager.
12. Pada menu bar, Project Configure After Make pilih Program the Chip
13. Pilih Project Make atau Project Build atau bisa juga dengan menekan shift + F9
untuk men-download program. Hubungkan konektor port-A dengan konektor LED.
Amati yang terjadi dan dianalisa!
14. Lakukan untuk semua contoh program percobaan. Lalu selesaikan tugas yang
diberikan dengan menunjukkan hasilnya kepada dosen yang mengampuh!

Praktikum Mikrokontroler 1 (MKR 1)

Politeknik Manufaktur Negeri Bangka Belitung

Gambar 1.8 Programmer settings

Daftar program percobaan 1:


1. Membuat LED menyala semua
#include <mega8535.h>
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
while (1)
{
PORTA=0xff;
};
}

2. Membuat LED menyala kedip


#include <mega8535.h>
#include <delay.h>
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
while (1)
{
PORTA=0xff;
delay_ms(200);
PORTA=0x00;
delay_ms(200);
};
}

3. Membuat LED menyala berjalan


#include <mega8535.h>
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
while (1)

Praktikum Mikrokontroler 1 (MKR 1)

Politeknik Manufaktur Negeri Bangka Belitung


{
PORTA=0b00000001
delay_ms(200);
PORTA=0b00000010;
delay_ms(200);
PORTA=0b00000100;
delay_ms(200);
PORTA=0b00001000;
delay_ms(200);
PORTA=0b00010000;
delay_ms(200);
PORTA=0b00100000;
delay_ms(200);
PORTA=0b01000000;
delay_ms(200);
PORTA=0b10000000;
delay_ms(200);
};
}

4. Membuat LED menyala berjalan (metode matematis)


#include <mega8535.h>
#include <delay.h>
#include <math.h>
void main(void)
{
int i,a;
PORTA=0xff;
DDRA=0xff;
while (1)
{
for (i=0;i<=7;i++)
{a=pow(2,i);
PORTA=~a;
delay_ms(500);}
};
}

5. Membuat LED menyala berjalan (metode geser bit)


#include <mega8535.h>
void delay(int n)
{
int i;
for(i=0;i<n;i++)
{ int b;
for(b=0;b<=150;i++);
}
}
void kiri()
{
unsigned char a=0x7f;
int i;
for(i=0;i<8;i++)
{
a=((a<<1)|(a>>7));
// instruksi geser bit
PORTA=a;
delay(200);

Praktikum Mikrokontroler 1 (MKR 1)

10

Politeknik Manufaktur Negeri Bangka Belitung


}
}
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
while (1)
{
kiri();
};
}

6. Membuat LED menyala berjalan (metode lookup table)


#include <mega8535.h>
#include <delay.h>
void main(void)
{
unsigned char led[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
int a;
PORTA=0x00;
DDRA=0xFF;
while (1)
{
for (a=0;a<=7;a++)
{
PORTA = led[a];
delay_ms(200);
}
};
}

Tugas !
a. Buatlah program LED menyala berselingan
b. Buatlah program LED menyala flip-flop (empat mati dan hidup bergantian)
sebanyak 5kali kemudian LED padam semua
c. Buatlah program LED menyala geser kiri-ke-kanan sebanyak 5kali kemudian
geser dari kanan-ke-kiri sebanyak 5kali, terus menerus
d. Buatlah program LED menyala mencacah(counter) 8bit naik kemudian turun

Praktikum Mikrokontroler 1 (MKR 1)

11

Politeknik Manufaktur Negeri Bangka Belitung


PERCOBAAN 2
Input Switch dan Output Menggunakan LED

Tujuan:
Setelah melakukan praktikum ini diharapkan:
1. Mahasiswa

bisa

menggunakan

software

CodeVisionAVR

berbasis

bahasa

pemrograman C dengan prosedur yang benar


2. Mahasiswa mengerti teknik pembacaan input pada pin mikrokontroler menggunakan
switch baik secara hardware maupun pemrogramannya

Peralatan yang digunakan:


1. Modul mikrokontroler AVR
2. Komputer

Rangkaian aplikasi switch:

Gambar 2.1 Rangkaian aplikasi switch

Praktikum Mikrokontroler 1 (MKR 1)

12

Politeknik Manufaktur Negeri Bangka Belitung


Prosedur Percobaan
1. Buka program CodeVisionAVR dengan menekan klik ganda icon

pada dekstop

komputer.
2. Pilih File New Project - Ok.
3. Selanjutnya pilih Yes untuk menggunakan CodeWizardAVR.
4. Pilih chip ATMega8535 dan clock 8MHz, dengan cara mengikuti isi sesuai gambar
dibawah.

Gambar 2.2 CodeWizardAVR

5. Lalu setting port-A sebagai output dengan cara memilih Ports, lalu pada Port A ubah
In menjadi Out mulai dari Bit 0 sampai dengan Bit 7.
6. Jika selesai, pilih File Generate, Save and Exit.
7. Arahkan direktori ke dalam folder yang anda buat sebelumnya, lalu ketik nama file
dengan Percobaan1. Tekan Save. Lakukan sampai tiga kali.
8. Ketikkan program yang diinginkan atau sesuai contoh pada daftar program
percobaan 2.

Praktikum Mikrokontroler 1 (MKR 1)

13

Politeknik Manufaktur Negeri Bangka Belitung

9. Lakukan compile dengan cara menekan gambar

atau tombol F9. Jika tidak ada

error tekan OK. Bila ada error, maka periksa program yang anda ketik. Lalu ulangi
lagi.
10. Hubungkan kabel ISP downloader dari terminal USB komputer ke jalur downloader
pada modul praktikum. Hidupkan power supply pada board AVR.
11. Pilih Project Make atau Project Build atau bisa juga dengan menekan shift + F9
untuk men-download program. Hubungkan konektor port-A dengan konektor LED.
Amati yang terjadi dan dianalisa!
12. Lakukan untuk semua contoh program percobaan. Lalu selesaikan tugas yang
diberikan dengan menunjukkan hasilnya kepada dosen yang mengampuh!

Daftar program percobaan 2:


1. Membuat LED menyala sesuai dengan kondisi switch
#include <mega8535.h>
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
DDRC=0x00;
while (1)
{
PORTA=PINC;
};
}

2. LED menyala semua atau padam semua bergantung kondisi S1


#include <mega8535.h>
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
DDRC=0x00;
while (1)
{
if(PINC.0==1) PORTA=0;
else PORTA=255;
};
}

Praktikum Mikrokontroler 1 (MKR 1)

14

Politeknik Manufaktur Negeri Bangka Belitung

3. Membuat LED menyala berjalan bergantung kondisi S2


#include <mega8535.h>
#include <delay.h>
#include <math.h>
void main(void)
{
int i,a;
PORTA=0xff;
DDRA=0xff;
DDRC=0x00;
while(1)
{
while (PINC.1==1)
// dengan pengkondisian
{
for (i=0;i<=7;i++)
{
a=pow(2,i);
PORTA=a;
delay_ms(100);
}
};
};
}

Tugas !
a. Buatlah program dengan syarat jika S1 ATAU S2= ON, DAN yang lain OFF, maka
LED menyala berjalan
b. Buatlah program dengan syarat jika S1 = ON maka LED menyala berjalan dari kiri ke
kanan. Namun, bila S1 di-OFF-kan maka LED langsung berubah arah dari kanan ke
kiri. Kondisi awal seluruh switch = OFF dan LED padam.

Praktikum Mikrokontroler 1 (MKR 1)

15

Politeknik Manufaktur Negeri Bangka Belitung


PERCOBAAN 3
Aplikasi Port Sebagai Output Menggunakan 7-Segment

Tujuan:
Setelah melakukan praktikum ini diharapkan:
1. Mahasiswa

bisa

menggunakan

software

CodeVisionAVR

berbasis

bahasa

pemrograman C dengan prosedur yang benar


2. Mahasiswa bisa mengendalikan nyala 7segment sebagai port keluaran mikrokontroler
sesuai dengan karakter interfacing

Peralatan yang digunakan:

Modul mikrokontroler AVR

Komputer

Rangkaian percobaan:

Gambar 3.1 Rangkaian aplikasi 7Segment

Praktikum Mikrokontroler 1 (MKR 1)

16

Politeknik Manufaktur Negeri Bangka Belitung


Prosedur Percobaan
1. Buka program CodeVisionAVR dengan menekan klik ganda icon

pada

dekstop komputer.
2. Pilih File New Project - Ok.
3. Selanjutnya pilih Yes untuk menggunakan CodeWizardAVR.
4. Pilih chip ATMega8535 dan clock 8MHz, dengan cara mengikuti isi sesuai
gambar 1.6.
5. Lalu setting port-A sebagai output dengan cara memilih Ports, lalu pada Port A
ubah In menjadi Out mulai dari Bit 0 sampai dengan Bit 7.

Gambar 3.2 Wizard Chip

Gambar 3.3 Wizard ports

6. Jika selesai, pilih File Generate, Save and Exit.


7. Arahkan direktori ke dalam folder yang anda buat sebelumnya, lalu ketik nama file
dengan Percobaan1. Tekan Save. Lakukan sampai tiga kali.
8. Ketikkan program yang diinginkan atau sesuai contoh pada daftar program
percobaan 3.

Praktikum Mikrokontroler 1 (MKR 1)

17

Politeknik Manufaktur Negeri Bangka Belitung

9. Lakukan compile dengan cara menekan gambar

atau tombol F9. Jika tidak

ada error tekan OK. Bila ada error, maka periksa program yang anda ketik. Lalu
ulangi lagi.
10. Hubungkan kabel ISP downloader dari terminal USB komputer ke jalur
downloader pada modul praktikum. Hidupkan power supply pada board AVR.
11. Untuk mengisi program yang telah dibuat ke dalam chip, maka terlebih dahulu
setting programmer yang digunakan dengan cara pilih Settings Programmer
pada menu bar. Selanjutnya muncul gambar seperti gambar di bawah ini. Pilih tipe
programmer AVRProg (AVR910) dengan baudrate 115200, untuk COM
sesuaikan dengan device manager.

12. Pada menu bar, Project Configure After Make pilih Program the Chip
untuk mengaktifkan mode pengisian program ke chip ketika di-build
13. Pilih Project Make atau tekan shift + F9 untuk men-download program.
Hubungkan konektor port-A dengan konektor LED. Amati yang terjadi dan
dianalisa!
14. Lakukan untuk semua contoh program percobaan. Lalu selesaikan tugas yang
diberikan dengan menunjukkan hasilnya kepada dosen yang mengampuh!

Praktikum Mikrokontroler 1 (MKR 1)

18

Politeknik Manufaktur Negeri Bangka Belitung

Daftar program percobaan 3:


1. Menampilkan angka 0 pada semua 7Segment
// D7 D6
D5
D4
// SEG3 SEG2 SEG1 SEG0
// 0
0
0
0

D3 D2 D1 D0
D C B A
0 0 0 0 = 00H

#include <mega8535.h>
#include <delay.h>
void main(void)
{
DDRA = 0xFF;
while(1)
{
PORTA = 0x00;
}
}

2. Menampilkan angka 0 pada satu buah 7Segment saja


// D7 D6
D5
D4
// SEG3 SEG2 SEG1 SEG0
// 1
1
1
0

D3 D2 D1 D0
D C B A
0 0 0 0 = E0H

#include <mega8535.h>
#include <delay.h>
void main(void)
{
DDRA = 0xFF;
while(1)
{
PORTA = 0xE0;
}
}

3. Menampilkan angka 3 pada satu buah 7Segment saja


// D7 D6
D5
D4
// SEG3 SEG2 SEG1 SEG0
// 1
1
1
0

D3 D2 D1 D0
D C B A
0 0 1 1 = E3H

#include <mega8535.h>
#include <delay.h>
void main(void)
{
DDRA = 0xFF;
while(1)
{
PORTA = 0xE3;
}}

Praktikum Mikrokontroler 1 (MKR 1)

19

Politeknik Manufaktur Negeri Bangka Belitung


4. Menampilkan angka 0123
//
//
//
//
//
//

D7 D6
D5
D4
SEG3 SEG2 SEG1 SEG0
1
1
1
0
1
1
0
1
1
0
1
1
0
1
1
1

D3
D
0
0
0
0

D2
C
0
0
0
0

D1
B
0
0
1
1

D0
A
0
1
0
1

=
=
=
=

E0H
D1H
B2H
73H

A
0
0
0
0

=
=
=
=

E0H
D0H
B0H
70H

#include <mega8535.h>
#include <delay.h>
void main(void)
{
DDRA = 0xFF;
while(1)
{
PORTA= 0x73;
delay_ms(1);
PORTA= 0xB2;
delay_ms(1);
PORTA= 0xD1;
delay_ms(1);
PORTA= 0xE0;
delay_ms(1);
}
}

5. Menampilkan angka 0123


//
//
//
//
//

SEG3 SEG2 SEG1 SEG0


1
1
1
0
1
1
0
1
1
0
1
1
0
1
1
1

D
0
0
0
0

C
0
0
0
0

B
0
0
0
0

#include <mega8535.h>
#include <delay.h>
void main(void)
{
int rib,rat,pul,sat;
DDRA = 0xFF;
while(1)
{
sat = 3;
pul = 2;
rat = 1;
rib = 0;
PORTA= 0x70 |
delay_ms(1);
PORTA= 0xB2 |
delay_ms(1);
PORTA= 0xD1 |
delay_ms(1);
PORTA= 0xE0 |
delay_ms(1);

rib;
rat;
pul;
sat;

}
}

Praktikum Mikrokontroler 1 (MKR 1)

20

Politeknik Manufaktur Negeri Bangka Belitung


6. Display data yang diambil dari PORTC (switch)
//
//
//
//
//
//

D7 D6
D5
D4
SEG3 SEG2 SEG1 SEG0
1
1
1
0
1
1
0
1
1
0
1
1
0
1
1
1

D3
D
0
0
0
0

D2
C
0
0
0
0

D1
B
0
0
1
1

D0
A
0
1
0
1

=
=
=
=

E0H
D1H
B2H
73H

LOKASI
LOKASI
LOKASI
LOKASI

RIBUAN
RATUSAN
PULUHAN
SATUAN

#include <mega8535.h>
#include <delay.h>
void main(void)
{
int i,data,sat,pul,rat,rib;
DDRA = 0xFF;
DDRC = 0X00;
while(1)
{
data = PINC;
sat = data % 10;
// sat = sisa dari data dibagi 10
pul = data / 10;
pul = pul % 10;
rat = data / 100;
rat = rat % 10;
rib = data / 1000;
PORTA= 0x70 |
delay_ms(1);
PORTA= 0xB0 |
delay_ms(1);
PORTA= 0xD0 |
delay_ms(1);
PORTA= 0xE0 |
delay_ms(1);

sat;
pul;
rat;
rib;

}
}

Tugas !
1. Buatlah program konter up (0 s.d 1000)
2. Buatlah program konter barang dengan asusmi S1 sebagai sensornya. Jika S1 naik
1kali (naik turun), maka 7segment terjadi increment. S2 untuk clear data

Praktikum Mikrokontroler 1 (MKR 1)

21

Politeknik Manufaktur Negeri Bangka Belitung


PERCOBAAN 4
Interfacing dan Pemrograman LCD 2x16
Tujuan:
Setelah melakukan praktikum ini diharapkan:

Mahasiswa bisa menggunakan software CodeVisionAVR berbasis bahasa


pemrograman C dengan prosedur yang benar

Mahasiswa mengerti teknik interfacing LCD 2x16 untuk mode 4 bit dan 8 bit

Mahasiswa bisa memprogram LCD 2x16 untuk mode 4 bit dan 8 bit dengan baik dan
benar

Peralatan yang digunakan:

Modul mikrokontroler AVR

Komputer

Teori Dasar Karakter LCD 2x16


Modul LCD Character dapat dengan mudah dihubungkan dengan mikrokontroler.
LCD yang akan kita praktikumkan ini berbasis ASCII dan mempunyai lebar display 2 baris
16 kolom atau biasa disebut sebagai LCD Character 2x16, dengan 16 pin konektor.

Gambar 4.1 Modul LCD karakter 2x16


Display karakter pada LCD diatur oleh pin EN, RS dan RW:
Jalur EN dinamakan Enable. Jalur ini digunakan untuk memberitahu LCD bahwa anda
sedang mengirimkan sebuah data. Untuk mengirimkan data ke LCD, maka melalui program
Praktikum Mikrokontroler 1 (MKR 1)

22

Politeknik Manufaktur Negeri Bangka Belitung


EN harus dibuat logika LOW 0 dan set pada dua jalur kontrol yang lain RS dan RW.
Ketika dua jalur yang lain telah siap, set EN dengan logika HIGH 1 dan tunggu untuk
sejumlah waktu tertentu (sesuai dengan datasheet dari LCD tersebut) dan berikutnya set EN
ke logika LOW 0 lagi.
Jalur RS adalah jalur Register Select. Ketika RS berlogika LOW 0, data akan
dianggap sebagi sebuah perintah atau instruksi khusus (seperti clear screen, posisi kursor dll).
Ketika RS berlogika HIGH 1, data yang dikirim adalah data text yang akan ditampilkan
pada display LCD. Sebagai contoh, untuk menampilkan huruf T pada layar LCD maka RS
harus diset logika HIGH 1.
Jalur RW adalah jalur kontrol Read/ Write. Ketika RW berlogika LOW 0, maka
informasi pada bus data akan dituliskan pada layar LCD. Ketika RW berlogika HIGH 1,
maka program akan melakukan pembacaan memori dari LCD. Sedangkan pada aplikasi
umum pin RW selalu diberi logika LOW 0.
Bus data terdiri dari 4 atau 8 jalur (bergantung pada mode operasi yang dipilih oleh
user). Pada mode 8 bit, maka data bus yang digunakan 8 jalur yang diacukan sebagai DB0 s.d
DB7 sedangkan pada mode 4 bit, maka data bus yang digunakan adalah 4 jalur yaitu DB4 s.d
DB7.
Tabel 4.1 Pin dan Fungsi
PIN

Nama

1
2
3

VSS
VCC
VEE

RS

R/W

DB0

Fungsi
Ground voltage
+5V
Contrast voltage
Register Select
0 = Instruction Register
1 = Data Register
Read/ Write, to choose write or read mode
0 = write mode
1 = read mode
Enable
0 = start to lacht data to LCD character
1= disable
Data Bus 0

Praktikum Mikrokontroler 1 (MKR 1)

23

Politeknik Manufaktur Negeri Bangka Belitung


8
9
10
11
12
13
14
15
16

DB1
DB2
DB3
DB4
DB5
DB6
DB7
BPL
GND

Data Bus 1
Data Bus 2
Data Bus 3
Data Bus 4
Data Bus 5
Data Bus 6
Data Bus 7
Back Plane Light / Anode
Ground voltage / Katode

Beberapa perintah dasar yang harus dipahami adalah inisialisasi LCD Character:

Function Set
Mengatur interface lebar data, jumlah dari baris dan ukuran font karakter
RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

DL

X : Dont care
DL: Mengatur lebar data
DL=1, Lebar data interface 8 bit ( DB7 s/d DB0)
DL=0, Lebar data interface 4 bit ( DB7 s/d DB4)
Ketika menggunakan lebar data 4 bit, data harus dikirimkan dua kali
N: Pengaktifan baris
N=0, 1 baris
N=1, 2 baris
F: Penentuan ukuran font karakter
F=0, 5x7
F=1, 5x8

Entry Mode Set


Mengatur increment/ decrement dan mode geser
RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

I/D

Praktikum Mikrokontroler 1 (MKR 1)

24

Politeknik Manufaktur Negeri Bangka Belitung


I/D: Increment/ decrement dari alamat DDRAM dengan 1 ketika kode karakter dituliskan
ke DDRAM.
I/D = 0, decrement
I/D= 1, increment
S: Geser keseluruhan display kekanan dan kekiri
S=1, geser kekiri atau kekanan bergantung pada I/D
S=0, display tidak bergeser

Display On/ Off Cursor


Mengatur status display ON atau OFF, cursor ON/ OFF dan fungsi Cursor Blink
RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

D : Display, Mengatur display


D = 1, Display is ON
D = 0, Display is OFF
Pada kasus ini data display masih tetap berada di DDRAM, dan dapat ditampilkan kembali
secara langsung dengan mengatur D=1.
C : Cursor, Menampilkan kursor
C = 1, kursor ditampilkan
C = 0, kursor tidak ditampilkan
B : Blink, Karakter ditunjukkan dengan kursor yang berkedip
B=1, kursor blink

Clear Display
Perintah ini untuk menghapus layar
RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

Praktikum Mikrokontroler 1 (MKR 1)

25

Politeknik Manufaktur Negeri Bangka Belitung

Geser Kursor dan Display

Geser posisi kursor atau display ke kanan atau kekiri tanpa menulis atau baca data display.
Fungsi ini digunakan untuk koreksi atau pencarian display
RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

S/C

R/L

x = dont care
S/C

R/L

Keterangan

Shift cursor position to the left

Shift cursor position to the right

Shift the entire display to the left

Shift the entire display to the right

Posisi Kursor
Modul LCD terdiri dari sejumlah memory yang digunakan untuk display. Semua teks
yang kita tuliskan ke modul LCD adalah disimpan didalam memory ini, dan modul LCD
secara berturutan membaca memory ini untuk menampilkan teks ke modul LCD itu sendiri.

Gambar 4.2 Peta alamat memori

Pada peta memori tersebut, 00 s.d. 0F dan 40 s.d. 4F adalah display yang tampak.
Sebagaimanan yang anda lihat, jumlahnya sebanyak 16 karakter per baris dengan dua baris.
Angka pada setiap kotak adalah alamat memori yang bersesuaian dengan posisi dari layar.
Demikianlah karakter pertama di sudut kiri atas adalah menempati alamah 00h. Posisi
karakter berikutnya adalah alamat 01h dan seterusnya. Akan tetapi, karakter pertama dari
Praktikum Mikrokontroler 1 (MKR 1)

26

Politeknik Manufaktur Negeri Bangka Belitung


baris 2 sebagaimana yang ditunjukkan pada peta memori adalah pada alamat 40h.
Dimikianlah kita perlu untuk mengirim sebuah perintah ke LCD untuk mangatur letak posisi
kursor pada baris dan kolom tertentu.
Instruksi Set Posisi Kursor adalah 80h. Untuk ini kita perlu menambahkan alamat
lokasi dimana kita berharap untuk menempatkan kursor. Sebagai contoh, kita ingin
menampilkan kata World pada baris ke dua pada posisi kolom ke sepuluh. Sesuai peta
memori, posisi karakter pada kolom 11 dari baris ke dua, mempunyai alamat 4Ah, sehingga
sebelum kita tulis kata World pada LCD, kita harus mengirim instruksi set posisi kursor,
dan perintah untuk instruksi ini adalah 80h ditambah dengan alamat 80h+4Ah =0Cah.
Sehingga dengan mengirim perintah Cah ke LCD, akan menempatkan kursor pada baris
kedua dan kolom ke 11 dari DDRAM.

Pemrograman LCD pada CodeVisionAVR


Pada CodeVisionAVR sudah tersedia fasilitas pemrograman LCD 2x16 untuk mode 4
bit, sehingga koneksi interface dan instruksi pemrograman tinggal disesuaikan saja. Namun,
untuk mode 8 bit kita harus melakukan inisialisasi sendiri dan membangun fungsi sendiri pula
Beberapa fungsi LCD yang ada di CodeVisionAVR untuk mode 4 bit :
1. lcd_init( );

// inisialisasi lcd

2. lcd_putchar(char c);

// menulis karakter c pada LCD

3. lcd_puts(char *str );

// menulis string yang disimpan pada SRAM pada LCD

4. lcd_putsf( );

// menulis string ke lcd

5. lcd_gotoxy(unsigned char x, unsigned char y); // posisi baris dan kolom


6. lcd_clear( );

// menghapus layer pada LCD

Praktikum Mikrokontroler 1 (MKR 1)

27

Politeknik Manufaktur Negeri Bangka Belitung


Rangkaian percobaan:

Gambar 4.3 Rangkaian aplikasi LCD 2x16

Prosedur Percobaan Mode 4 bit


1. Buka program CodeVisionAVR dengan menekan klik ganda icon

pada dekstop

komputer.
2. Pilih File New Project - Ok.
3. Selanjutnya pilih Yes untuk menggunakan CodeWizardAVR.
4. Pilih chip ATMega8535 dan clock 8MHz.
5. Lalu menu LCD pilih PORTC seperti pada gambar 4.4, maka akan muncul gambar
seperti pada gambar 4.5.
6. Jika selesai, pilih File Generate, Save and Exit.
7. Arahkan direktori ke dalam folder yang anda buat sebelumnya, lalu ketik nama file
dengan Percobaan4a. Tekan Save. Lakukan sampai tiga kali.
8. Ketikkan program yang diinginkan atau sesuai contoh pada daftar program percobaan
mode 4 bit.
Praktikum Mikrokontroler 1 (MKR 1)

28

Politeknik Manufaktur Negeri Bangka Belitung

9. Lakukan compile dengan cara menekan gambar

atau tombol F9. Jika tidak ada error

tekan OK. Bila ada error, maka periksa program yang anda ketik. Lalu ulangi lagi.
10. Hubungkan kabel ISP downloader dari terminal USB komputer ke jalur downloader pada
modul praktikum. Hidupkan power supply pada board AVR.
11. Untuk mengisi program yang telah dibuat ke dalam chip, maka terlebih dahulu setting
programmer yang digunakan dengan cara pilih Settings Programmer pada menu bar.
Selanjutnya muncul gambar seperti gambar di bawah ini. Pilih tipe programmer
AVRProg (AVR910) dengan baudrate 115200, untuk COM sesuaikan dengan device
manager.

Gambar 4.4 Wizard LCD

Gambar 4.5 Wizard LCD

12. Pada menu bar, Project Configure After Make pilih Program the Chip
13. Pilih Project Make atau tekan shift + F9 untuk men-download program. Hubungkan
konektor port-C dengan konektor LCD 4 bit. Amati yang terjadi dan dianalisa!
14. Lakukan untuk semua contoh program percobaan. Lalu selesaikan tugas yang diberikan
dengan menunjukkan hasilnya kepada dosen yang mengampuh!

Praktikum Mikrokontroler 1 (MKR 1)

29

Politeknik Manufaktur Negeri Bangka Belitung


Daftar program percobaan mode 4 bit:
1. Menampilkan karakter A pada baris ke-0 dan kolom ke-0
#include <mega8535.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
// LCD module initialization
lcd_init(16);
while(1)
{
lcd_gotoxy(0,0);
lcd_putchar(A);
}

//untuk karakter harus diapit dgn tanda apostrof

2. Menulis karakter di baris 1 dan baris 2


#include <mega8535.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
void main (void)
{
// LCD module initialization
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf("
BARIS 1
lcd_gotoxy(0,1);
lcd_putsf("
BARIS 2
while(1);

");
");

Praktikum Mikrokontroler 1 (MKR 1)

30

Politeknik Manufaktur Negeri Bangka Belitung


3. Menampilkan angka 0 dengan nilai ASCII
#include <mega8535.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
void main(void)
{
// LCD module initialization
lcd_init(16);
while(1)
{
lcd_gotoxy(0,0);
lcd_putchar(0);
//lcd_gotoxy(0,0);
//lcd_putchar(48);

//untuk karakter harus diapit dgn tanda apostrof


//dalam kode decimal ASCII untuk angka 0

//lcd_gotoxy(0,0);
//lcd_putchar(0x30);

//dalam kode heksa ASCII untuk angka 0

}
}

4. Menampilkan tulisan dan angka dengan library standard I/O bahasa C


#include <mega8535.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
unsigned char n,kata[16];
void main(void)
{
// LCD module initialization
lcd_init(16);
n=4;
while(1)
{
sprintf(kata,Percobaan %d,n);
lcd_gotoxy(0,0);
lcd_puts(kata);
}
}

Praktikum Mikrokontroler 1 (MKR 1)

31

Politeknik Manufaktur Negeri Bangka Belitung


Tugas mode 4 bit!
1. Buatlah program konter up (0 s.d 10) secara kontinyu pada baris 1 kolom 1
2. Buatlah program led menyala geser kiri-kanan sebanyak 10 kali kemudian pindah
kanan-kiri sebanyak 10 kali secara kontinyu, dengan display pada LCD tulisan geser
kiri ketika terjadi geser kanan-kiri dan sebaliknya geser kanan serta tampilkan juga
nilai konternya.

Prosedur Percobaan Mode 8 bit


1. Buka program CodeVisionAVR dengan menekan klik ganda icon

pada dekstop

komputer.
2. Pilih File New Project - Ok.
3. Selanjutnya pilih Yes untuk menggunakan CodeWizardAVR.
4. Pilih chip ATMega8535 dan clock 8MHz.
5. Lalu menu Ports pada Port C ubah In menjadi Out dari bit 0 sampai dengan bit 7 seperti
pada gambar 4.5, begitu juga pada Port D seperti pada gambar 4.6
6. Jika selesai, pilih File Generate, Save and Exit.
7. Arahkan direktori ke dalam folder yang anda buat sebelumnya, lalu ketik nama file
dengan Percobaan4b. Tekan Save. Lakukan sampai tiga kali.
8. Ketikkan program yang diinginkan atau sesuai contoh pada daftar program percobaan
mode 8 bit.
9. Lakukan compile dengan cara menekan gambar

atau tombol F9. Jika tidak ada error

tekan OK. Bila ada error, maka periksa program yang anda ketik. Lalu ulangi lagi.
10. Hubungkan kabel ISP downloader dari terminal USB komputer ke jalur downloader pada
modul praktikum. Hidupkan power supply pada board praktikum.
11. Untuk mengisi program yang telah dibuat ke dalam chip, maka terlebih dahulu setting
programmer yang digunakan dengan cara pilih Settings Programmer pada menu bar.
Selanjutnya muncul gambar seperti gambar di bawah ini. Pilih tipe programmer
AVRProg (AVR910) dengan baudrate 115200, untuk COM sesuaikan dengan device
manager.
Praktikum Mikrokontroler 1 (MKR 1)

32

Politeknik Manufaktur Negeri Bangka Belitung


12. Pada menu bar, Project Configure After Make pilih Program the Chip
13. Pilih Project Make atau tekan shift + F9 untuk men-download program. Hubungkan
konektor port-C dengan konektor LCD data 8 bit dan port-D ke kontrol. Amati yang
terjadi dan dianalisa!
14. Lakukan untuk semua contoh program percobaan. Lalu selesaikan tugas yang diberikan
dengan menunjukkan hasilnya kepada dosen yang mengampuh!

Daftar program percobaan mode 8 bit:


1. Menampilkan angka 0 di baris 1 dan angka 1 di baris 2
// D7 D6 D5 D4 D3 D2 D1 D0
// 8 4 2 1 8 4 2 1 = HEKSA
// DATA
: PORTC
// RS
: PORTD0
// R/-W
: PORTD1
// ENABLE
: PORTD2
void
void
void
void

port_init(void);
LCD_init(void);
LCD_WriteCommand (unsigned char CMD);
LCD_WriteData (unsigned char Data);

#define
#define
#define
#define

ENABLE_LCD PORTD |= 0x04


DISABLE_LCD PORTD &= ~0x04
SET_LCD_DATA PORTD |= 0x01
SET_LCD_CMD PORTD &= ~0x01

#include <mega8535.h>
#include <delay.h>
// Inisialisasi port AVR 8535
void port_init(void)
{
DDRA = 0x00; // PORTA INPUT
PORTA = 0x00; // SEMUA PORTA DIAKTIFKAN
DDRB = 0x00; // PORTB INPUT
PORTB = 0x00; // SEMUA PORTB DIAKTIFKAN
DDRC = 0xFF; // PORTC OUTPUT
PORTC = 0x00; // SEMUA PORTC DIAKTIFKAN
DDRD = 0xFF; // PORTD OUTPUT
PORTD = 0x00; // SEMUA PORTD DIAKTIFKAN
}
// Inisialisasi LCD
// DISPCLR
= 01H
// FUNCSET
= 38H
// ENTRMOD
= 06H
// DISPON
= 0CH
void LCD_init(void)
{
delay_ms(100);

// tunggu selama 100 ms

Praktikum Mikrokontroler 1 (MKR 1)

33

Politeknik Manufaktur Negeri Bangka Belitung


LCD_WriteCommand
LCD_WriteCommand
LCD_WriteCommand
LCD_WriteCommand
delay_ms(10);

(0x38);
(0x06);
(0x0f);
(0x01);

//
//
//
//
// tunggu

8 data lines = FUNCSET


cursor setting = ENTRMOD
display ON
= DISPON
clear LCD memory = DISPCLR
10ms untuk membersihkan LCD

}
// Prosedur untuk command instruction
void LCD_WriteCommand (unsigned char Command)
{
SET_LCD_CMD;
// Set LCD in command mode
PORTC = Command;
// Load data to port
ENABLE_LCD;
// Write data to LCD
delay_ms(10);
DISABLE_LCD;
// Disable LCD
delay_ms(10);
// wait for 1ms
}
// Prosedur untuk data instruction
void LCD_WriteData (unsigned char Data)
{
SET_LCD_DATA;
// Set LCD in data mode
PORTC = Data;
// Load data to port
ENABLE_LCD;
// Write data to LCD
delay_ms(10);
DISABLE_LCD;
// Disable LCD
delay_ms(10);
// wait for 1ms
}
//******************* MAIN FUNCTION *******************
void main()
{
port_init();
LCD_init();
LCD_WriteCommand (0x80);
LCD_WriteData (0x30);
LCD_WriteCommand (0x0C0);
LCD_WriteData (0x31);
}

//
//
//
//

pesan tempat
data ASCII 0
pesan tempat
data ASCII 1

di baris 1 kolom 0
= 30H
di baris 2 kolom 0
= 31H

2. Menampilkan 1234 di LCD


// D7 D6 D5 D4 D3 D2 D1 D0
// 8 4 2 1 8 4 2 1 = HEKSA
// DATA
: PORTC
// RS
: PORTD0
// R/-W
: PORTD1
// ENABLE
: PORTD2
void
void
void
void

port_init(void);
LCD_init(void);
LCD_WriteCommand (unsigned char CMD);
LCD_WriteData (unsigned char Data);

#define
#define
#define
#define

ENABLE_LCD PORTD |= 0x04


DISABLE_LCD PORTD &= ~0x04
SET_LCD_DATA PORTD |= 0x01
SET_LCD_CMD PORTD &= ~0x01

#include <mega8535.h>
#include <delay.h>

Praktikum Mikrokontroler 1 (MKR 1)

34

Politeknik Manufaktur Negeri Bangka Belitung


int data,rib,rat,pul,sat;
// Inisialisasi port AVR 8535
void port_init(void)
{
DDRA = 0x00; // PORTA INPUT
PORTA = 0x00; // SEMUA PORTA DIAKTIFKAN
DDRB = 0x00; // PORTB INPUT
PORTB = 0x00; // SEMUA PORTB DIAKTIFKAN
DDRC = 0xFF; // PORTC OUTPUT
PORTC = 0x00; // SEMUA PORTC DIAKTIFKAN
DDRD = 0xFF; // PORTD OUTPUT
PORTD = 0x00; // SEMUA PORTD DIAKTIFKAN
}
// Inisialisasi LCD
// DISPCLR
= 01H
// FUNCSET
= 38H
// ENTRMOD
= 06H
// DISPON
= 0CH
void LCD_init(void)
{
delay_ms(100);
// tunggu
LCD_WriteCommand (0x38);
//
LCD_WriteCommand (0x06);
//
LCD_WriteCommand (0x0f);
//
LCD_WriteCommand (0x01);
//
delay_ms(10);
// tunggu
}

selama 100 ms
8 data lines = FUNCSET
cursor setting = ENTRMOD
display ON
= DISPON
clear LCD memory = DISPCLR
10ms untuk membersihkan LCD

// Prosedur untuk command instruction


void LCD_WriteCommand (unsigned char Command)
{
SET_LCD_CMD;
// Set LCD in command mode
PORTC = Command;
// Load data to port
ENABLE_LCD;
// Write data to LCD
delay_ms(1);
DISABLE_LCD;
// Disable LCD
delay_ms(1);
// wait for 1ms
}
// Prosedur untuk data instruction
void LCD_WriteData (unsigned char Data)
{
SET_LCD_DATA;
// Set LCD in data mode
PORTC = Data;
// Load data to port
ENABLE_LCD;
// Write data to LCD
delay_ms(1);
DISABLE_LCD;
// Disable LCD
delay_ms(1);
// wait for 1ms
}
//******************* MAIN FUNCTION *******************

void main()

Praktikum Mikrokontroler 1 (MKR 1)

35

Politeknik Manufaktur Negeri Bangka Belitung


{
port_init();
LCD_init();
data = 1234;
sat = data % 10;
// sat = sisa dari data dibagi 10
pul = data / 10;
pul = pul % 10;
rat = data / 100;
rat = rat % 10;
rib = data / 1000;
LCD_WriteCommand (0x80);
//
LCD_WriteData (rib + 0x30);
LCD_WriteCommand (0x081); //
LCD_WriteData (rat + 0x30);
LCD_WriteCommand (0x82);
//
LCD_WriteData (pul + 0x30);
LCD_WriteCommand (0x083); //
LCD_WriteData (sat + 0x30);

pesan tempat di baris 1 kolom


// data ASCII ribuan
pesan tempat di baris 1 kolom
// data ASCII ratusan
pesan tempat di baris 1 kolom
// data ASCII puluhan
pesan tempat di baris 1 kolom
// data ASCII satuan

0
1
2
3

Tugas mode 8 bit!


1. Buatlah program menampilkan nilai pada LCD yang diambil dari data portA (switch)
2. Buatlah program konter up (0 s.d 10) secara kontinyu pada baris 1 kolom 1

Praktikum Mikrokontroler 1 (MKR 1)

36

Anda mungkin juga menyukai