Anda di halaman 1dari 85

JOBSHEET PRATIKUM

SISTEM MIKROKONTROLLER & INTERFACE I


LABORATORIUM MIKROPROSESOR & MIKROKONTROLLER

OLEH

TEAM LABORATORIUM MIKROPROSESOR & MIKROKONTROLLER

UNTUK PRATIKUM MAHASISWA PROGRAM STUDI


TEKNIK ELEKTRONIKA

JURUSAN TEKNIK ELEKTRO


POLITEKNIK NEGERI PADANG
TAHUN 2015

1
JOB 1
PENGAKTIFAN LED DENGAN PROTEUS

Tujuan pratikum:
Setelah melakukan pratikum pengaktifan LED dengan berbagai variasi ini, mahasiswa
dapat :
1. memahami cara pengoperasian system mikrokontroler AVR Atmega 8535
menggunakan Proteus Isis
2. mengoperasikan system mikrokontroler AVR Atmega 8535
3. mengoperasikan Proteus Isis sebagai media simulasi program

Landasan Teori

D1
R1
Gambar 1. Rangkaian tampilan deret LED menggunakan Proteus 330R
LDE2
D-GREEN
U1 R2
1 40
PB0/T0/XCK PA0/ADC0 330R
2 39 LDE3
D-GREEN
PB1/T1 PA1/ADC1
3 38 R3
PB2/AIN0/INT2 PA2/ADC2
4 37
PB3/AIN1/OC0 PA3/ADC3
5 36
PB4/SS PA4/ADC4 330R
6 35 LDE4
D-GREEN
PB5/MOSI PA5/ADC5
7 34 R4
PB6/MISO PA6/ADC6
8 33
PB7/SCK PA7/ADC7
330R
14 22 LDE5
D-GREEN
PD0/RXD PC0/SCL
15 23
16
PD1/TXD PC1/SDA
24
R5
PD2/INT0 PC2
17 25
PD3/INT1 PC3 330R
18 26 LED-GREEN
PD4/OC1B PC4
19 27
C1 20
PD5/OC1A PC5
28
D6
PD6/ICP1 PC6/TOSC1 R6
21 29
PD7/OC2 PC7/TOSC2
VCC 330R
22pF 13 LDE7
D-GREEN
XTAL1
X1 12 32
XTAL2 AREF R7
CRYSTAL 9 30
C2 RESET AVCC
330R
ATMEGA8535 LDE8
D-GREEN
VCC R8
22pF
330R
LED-GREEN
R9
GND
330
RESET BUTTON

GND

Gambar 1.1 Rangkaian Atmega8535 Output LED


Perhatikan gambar 1 di atas. Delapan buah LED sebagai keluaran terhubung ke port C.
LED akan menyala jika pada port keluaran diberi logika HIGH ‘1’dan padam jika diberi
logika LOW ‘0’. Untuk mengaktifkan konfigurasi seperti gambar 1.1, pin LED pada posisi
0

2
Langkah Kerja
Cara Membuat Proyek Baru
Buka program Codevision AVR dengan cara klik ganda ikon CVAVR pada
desktop atau dengan cara klik Start Programs CodeVisionAVR Evaluation
CodeVision AVR C Compiler. Pada menu File pilih New, kemudian pada jendela Create
New File pilih Project dan kilik OK. Untuk membuat proyek baru tanpa bantuan
CodeWizardAVR klik No pada Jendela yang muncul berikutnya.

Gambar 1.2 Tampilan Awal Saat Memulai Proyek Baru

Setelah itu pilih direktori untuk menyimpan proyek yang akan dibuat, misalnya pada
direktori.”D\CobaCAVR\”, kemudian isi nama proyek tersebut, sebagai contoh “test
led.prj”. Lalu kilik Save.

Gambar 1.3 Proses Penyimpanan Proyek Baru

Pada jendela Configure Project test led.prj, tab C Compiler, pilih mikrokontroler yang
digunakan misalnya ATMEGA8535 dan pilih frekuensi Clock (kristal) yang digunakan
oleh mikrokontroler, misalnya 4 MHz. Kemudian klik OK
3
Gambar1. 4 Konfigurasi Project

Langkah pembuatan proyek baru selesai tetapi belum dapat digunakan untuk membuat
program C. Agar dapat digunakan untuk membuat program C diperlukan pembuatan file c
yaitu klik menu File pilih New kemudian pada jendela Create New File pilih Source dan
klik OK. Akan terdapat file c dengan nama “untitled.c”. Pada menu File pilih Save As...,
kemudian isi nama file c yang akan dibuat, sebagai contoh “program 1.c”.

Gambar 1.5 Tampilan Awal Saat memulai Program Baru

4
Untuk menggabungkan “Program 1.c” dengan proyek “test led prj” yaitu klik pada menu
Project, pilih Configure. Pada label Files, pilih add.

Gambar 1.6 Konfigurasi Proyek untuk Menggabungkan


Program

Kemudian pilih “program 1.c” dan klik Open. Program C tersebut ditambahkan dalam
proyek “test led prj”, kemudian klik OK pada jendela Configure Project test led.prj.

Gambar 1.7 Pemilihan Program & Tampilan Setelah Program


Digabungkan

5
Proyek “test led.prj telah siap digunakan untuk membuat suatu program C. Misalnya
program sederhana untuk menyalakan LED berkedip pada semua Port C selama satu detik.
Contoh programnya yaitu:

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

void main (void)


{
DDRC=0xFF;
PORTC=0xFF;
while (1)
{
PORTC=0xFF;
delay_ms(1000);
PORTC=0x00;
delay_ms(1000);
}

Setelah selesai membuat suatu program C, perlu dilakukan apakah syntax (sintaksis)
program yang dibuat benar atau salah yaitu dengan menekan tombol F9 (Compile) atau
melalui menu Project kemudian pilih Compile. Jika terjadi kesalahan sintaksis akan
terdapat pesan error dimana letak kesalahan terjadi. Untuk lebih jelasnya lihat pada
gambar berikut ini dengan adanya kesalahan (error) pada program yang dibuat.

Gambar 1.8 Hasil Compiling dengan Kesalahan

6
Data tampilan

1. Tampilan 1
L7 L6 L5 L4 L3 L2 L1 L0 LED yang mati
0 0 0 0 1 1 1 1
1 1 1 1 0 0 0 0

2. Tampilan 2
L7 L6 L5 L4 L3 L2 L1 L0 LED yang mati
0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0

3. Tampilan 3
L7 L6 L5 L4 L3 L2 L1 L0 LED yang mati
0 0 0 1 1 0 0 0
0 0 1 0 0 1 0 0
0 1 0 0 0 0 1 0
1 0 0 0 0 0 0 1

4. Tampilan 4
L7 L6 L5 L4 L3 L2 L1 L0 LED yang mati
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0
0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 0
0 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0

7
PROGRAM PERCOBAAN

PERCOBAAN 1 PERCOBAAN 2

PERCOBAAN 3 PERCOBAAN 4

8
JOB 2
PENGAKTIFAN LED DENGAN MODUL

Tujuan pratikum:
Setelah melakukan pratikum pengaktifan LED dengan berbagai variasi ini, mahasiswa
dapat :
1. memahami cara pengoperasian system mikrokontroler AVR Atmega 8535
mengoperasikan system mikrokontroler AVR Atmega 8535
2. menampilkan output program dengan menggunakan system mikrokontroler AVR
Atmega 8535

Landasan Teori

D1
R1
330R
LDE2
D-GREEN
U1 R2
1 40
PB0/T0/XCK PA0/ADC0 330R
2 39 LDE3
D-GREEN
PB1/T1 PA1/ADC1
3 38 R3
PB2/AIN0/INT2 PA2/ADC2
4 37
PB3/AIN1/OC0 PA3/ADC3
5 36
PB4/SS PA4/ADC4 330R
6 35 LDE4
D-GREEN
PB5/MOSI PA5/ADC5
7 34 R4
PB6/MISO PA6/ADC6
8 33
PB7/SCK PA7/ADC7
330R
14 22 LDE5
D-GREEN
PD0/RXD PC0/SCL
15 23 R5
PD1/TXD PC1/SDA
16 24
PD2/INT0 PC2
17 25
PD3/INT1 PC3 330R
18 26 LED-GREEN
PD4/OC1B PC4
19 27
C1 20
PD5/OC1A PC5
28 D6
21
PD6/ICP1 PC6/TOSC1
29
R6
PD7/OC2 PC7/TOSC2
VCC 330R
22pF 13 LDE7
D-GREEN
XTAL1
X1 12
XTAL2 AREF
32
R7
CRYSTAL 9 30
C2 RESET AVCC
330R
ATMEGA8535 LDE8
D-GREEN
VCC R8
22pF
330R
R9 LED-GREEN
GND
330
RESET BUTTON

GND

Gambar 2.1 Rangkaian tampilan deret LED


Perhatikan gambar 1 di atas. Delapan buah LED sebagai keluaran terhubung ke port C.
LED akan menyala jika pada port keluaran diberi logika HIGH ‘1’dan padam jika diberi
logika LOW ‘0’. Untuk mengaktifkan konfigurasi seperti gambar, pin LED pada posisi 0

Langkah Kerja
1. Membuat program
1. Buatlah program pada CodeVision AVR
2. Ketiklah program pada Editor.c, kemudian simpan.
3. Compile program dengan menekan tombol F9 (Compile) atau melalui menu
Project kemudian pilih Compile.
4. Cek jumper pada system mikrocontroler yang akan digunakan dengan
menempatkan jumper yang telah ditentukan (dapat dilihat pada lampiran)

8
2. Download program ke modul
1. Cek jumper pada system mikrocontroler yang akan digunakan dengan
menempatkan jumper yang telah ditentukan (dapat dilihat pada lampiran)
2. Koneksikan DT-HiQ AVR In System Programmer dengan AVR ISP Header ke
Modul System mikrocontroler AVR

Gambar 2.2 Koneksi DT-HiQ AVR ISP ke Modul System Mikrocontroler


AVR

3. Agar CodeVisionAVR dapat memprogram mikrokontroler AVR menggunakan


DT-HiQ AVR ISP diperlukan pengaturan programmer terlebih dahulu. Pengaturan
programmer dapat dilakukan melalui menu Setting kemudian pilih Programmer,
kemudian memilih AVR programmer tipe “Kanda System STK200+/300” dan
tentukan port printer yang digunakan oleh DT-HiQ AVR ISP . Setelah selesai klik
OK.

Gambar 2.3 Pemilihan Tipe Programmer

Buka proyek “test led.prj” melalui menu File kemudian pilih Open. Pilih file
“test led.prj” dan klik open.

4. Selanjutnya untuk membuat file hex dari proyek “test led.prj” yaitu melalui menu
Project kemudian pilih Make atau dengan tombol Shift + F9. Agar proyek “test
led.prj” dapat membuat file hex dan sekaligus memprogram mikrokontroler AVR
maka perlu dilakukan pengaturan pada proyek tersebut yaitu melalui menu Project
pilih Configure
9
Gambar 2.4 Proses Konfigurasi Proyek

Pada Jendela Configure Project test led.prj, label After Make, beri tanda
centang pada Program the chip kemudian klik OK

Gambar 2.5 Konfigurasi untuk Memprogram IC

Untuk mencoba memprogram mikrokontroler yaitu tekan Shift + F9 kemudian akan


muncul jendela informasi, klik Program untuk memulai memprogram mikrokontroler.
Tunggu beberapa saat sampai proses pemograman selesai. Setelah pemograman selesai,
mikrokontroler akan menjalankan program tersebut.

10
Gambar 2.6 Tampilan Setelah Compiling Selesai

Contoh program

#include<mega8535.h>
#include<delay.h>
int i;
void kanan ()
{ DDRC=0xFF;
PORTC=0xFF;
PORTC=0b10000000;
delay_ms(200);
for (i=0;i<7;i++)
{PORTC>>=1;
delay_ms(200);
}}

void kiri ()
{ DDRC=0xFF;
PORTC=0xFF;
PORTC=0b00000001;
delay_ms(200);
for (i=7;i>0;i--)
{PORTC<<=1;
delay_ms(200);
}}

11
void main(void)
{

while(1)
{
kanan();
kiri();
}
}

Data tampilan

1. Tampilan 1
L7 L6 L5 L4 L3 L2 L1 L0 LED yang mati
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0
0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 0
0 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
Berulang kembali ke – awal

2. Tampilan 2
L7 L6 L5 L4 L3 L2 L1 L0
1 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0
1 1 1 0 0 0 0 0
1 1 1 1 0 0 0 0
1 1 1 1 1 0 0 0
1 1 1 1 1 1 0 0
1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1

3. Tampilan 3
L7 L6 L5 L4 L3 L2 L1 L0
1 1 1 1 0 0 0 0
0 1 1 1 1 0 0 0
0 0 1 1 1 1 0 0
0 0 0 1 1 1 1 0
0 0 0 0 1 1 1 1

12
Program Tampilan 1 Program Tampilan 2 Program Tampilan 3

13
JOB 3
INPUT PUSH BUTTON DENGAN OUTPUT LED

Tujuan pratikum:
Setelah melakukan pratikum pengaktifan seven segment ini, mahasiswa dapat :
1. memahami cara pengoperasian system mikrokontroler AVR ATMEGA8535
2. mengoperasikan system mikrokontroler AVR ATMEGA8535.
3. mengambil data input program dari push button dan menampilkannya pada LED
dengan menggunakan system mikrokontroler AVR ATMEGA8535

Landasan Teori
D1
R1
330R
LDE2D-GREEN

U1 R2
1 40
PB0/T0/XCK PA0/ADC0 330R
2 39 LDE3D-GREEN
PB1/T1 PA1/ADC1
3 38
4
PB2/AIN0/INT2 PA2/ADC2
37
R3
PB3/AIN1/OC0 PA3/ADC3
5 36
PB4/SS PA4/ADC4 330R
6 35 LDE4D-GREEN
PB5/MOSI PA5/ADC5
7 34
8
PB6/MISO PA6/ADC6
33
R4
PB7/SCK PA7/ADC7
330R
14 22 LDE5D-GREEN
PD0/RXD PC0/SCL
15 23
16
PD1/TXD PC1/SDA
24
R5
PD2/INT0 PC2
17 25
PD3/INT1 PC3 330R
18 26
PD4/OC1B PC4 LED-GREEN
19 27
C1 20
PD5/OC1A PC5
28 D6
21
PD6/ICP1 PC6/TOSC1
29
R6
PD7/OC2 PC7/TOSC2
VCC 330R
22pF 13 LDE7D-GREEN
XTAL1
X1 12 32
9
XTAL2 AREF
30
R7
CRYSTAL
C2 RESET AVCC
330R
ATMEGA8535 LDE8D-GREEN
VCC R8
22pF
330R
R9 LED-GREEN
GND
330
(b)
RESET BUTTON
(b)
GND

(a)

Gambar 3.1 Input push-buton dengan tampilan Led


Cara kerja saklar push-button adalah bila ditekan maka pin 1 dan pin 2 terhubung
(hubungan tertutup). Sebaliknya, bila tidak ditekan maka pin 1 dan pin 2 tidak terhubung
(hubungan terbuka). Untuk lebih jelasnya lihat gambar.

Gambar rangkaian untuk menghubungkan saklar push-button dengan pinI/O AVR dapat
dilihat pada gambar 5.1(b). Resistor 10K berfungsi sebagai externall pull-up resistor.
Dengan adanya pull-up resistor, mikrokontroler akan membaca logika ‘1’ saat tidak ada
penekanan saklar. Tanpa adanya pull-up resistor, pin I/O akan mengambang dan
mikrokontroler dapat membacanya sebagai logika ‘1’ ataupun ‘0’. Pada gambar rangkaian
5.1 (a)(b) saklar push-button terhubung dengan PC0, kemudian hasil pembacaan
dikeluarkan ke PortB. Jika saklar push-button pada PC0 ditekan maka mikrokontroler
membaca logika ‘0’, setelah itu dikeluarkan ke PortB terhubung dengan LED sehingga
LED akan menyala. Begitu sebaliknya jika saklar dilepas LED akan padam.

14
Langkah Kerja

1. Buatlah program pada CodeVision AVR


2. Ketiklah program pada Editor.c, kemudian simpan.
3. Compile program dengan menekan tombol F9 (Compile) atau melalui menu
Project kemudian pilih Compile.
4. Selanjutnya buatlah file hex dari proyek yang dibuat yaitu melalui menu Project
kemudian pilih Make atau dengan tombol Shift + F9. Kemudian isikan file hex
tersebut ke modul system mikrokontroler
5. Hubungkanlah kabel pita /flat ribbon cable ke header switch ke “PORTC” dan ke
header LED ke “PORTB”.

Input dipswitch dengan tampilan pada seven segment


1. Tampilkanlah data yang bersesuaian dengan input yang diberikan menggunakan
push-button dengan output LED.
2. Tampilkanlah variasi LED dengan mengaktifkan push-button Bt 0
3. Tampilkan variasi LED geser kanan dengan mengaktifkan push-button Bt 5
kemudian variasi LED geser kiri dengan mengaktifkan push-button Bt 1

Contoh Program
#include <mega8535.h>

void main(void)
{

DDRB=0xFF;
PORTB=0xFF;
DDRC=0x00;
PORTC=0x00;

#asm("nop")
while (1)
{
PORTB.0=PINC.0;
//Membaca penekanan push-button di
//PC0 kemudian hasil pembacaan
//dikeluarkan ke PB0

};

15
JOB 4
PENGAKTIFAN SEVEN SEGMENT
Tujuan pratikum:
Setelah melakukan pratikum pengaktifan seven segment ini, mahasiswa dapat :
1. Mampu memahami teknik scanning untuk menghemat penggunaan pin I/O AVR
Atmega 8535
2. Mampu membuat program untuk menyalakan 7 segment dan dapat menampilkan
suatu angka pada 7 segment menggunakan pin I/O AVR Atmega 8535
3. menampilkan output program pada seven segment dengan menggunakan system
mikrokontroler AVR Atmega 8535

Teori

Gambar 1 Display 7 segmen

Gambar 4.1 Rangkaian Atmega8535 dengan Output Seven Segment

Dari gambar diatas terlihat bahwa untuk menghidupkan sebuah 7 segment dibutuhkan 8
pin I/O mikrokontroler untuk membentuk suatu angka atau huruf, masing-masing untuk
segment a, segment b, segment c,..., segment f, segment g, dan segment dot. Kalau sebuah
7 segment dihubungkan ke mikrokontroler maka dibutuhkan 8 pin I/O (satu port
mikrokontroler) untuk menyalakan/memadamkan segment. Seandainya dibutuhkan
penampil 7 segment sebanyak 8 buah, maka port mikrokontroler tidak akan mencukupi
untuk 8 buah 7 segment. Untuk bisa menggunakan 8 buah 7 segment (atau lebih dari 8
buah) digunakan cara scanning. Teknik scanning digunakan apabila terdapat minimal 2
buah 7 segment (kalau 7 segment hanya ada satu port maka semua pin a,b,c,d,e,f,g dan dot
langsung dihubungkan ke port mikrokontroler melalui resistor pembatas arus, dengan
common anode dihubungkan ke VCC).
Untuk latihan teknik scanning digunakan 2 buah 7 segment commom anode, dimana
segment a,b,c,...,f,g dan dot dihubungkan ke PB0, PB1, PB2,..,PB5, PB6, PB7. Driver 7
segment pertama dihubungkan ke pin PC0 dan driver 7 segment kedua dihubungkan ke pin
PC1. Driver yang digunakan adalah sebuah transistor yang difungsikan sebagai saklar.
Dari gambar diatas terlihat jelas bahwa pin I/O mikrokontroler yang dibutuhkan sebanyak
8 pin (untuk memudahkan pengiriman data, sebaiknya menggunakan satu port) ditambah 2
pin untuk driver 7 segment (jumlah 7 segment yang digunakan).

16
Berikut tabel data 7 segment untuk menampilkan angka 0 sampai 9 (dot pada 7 segment
tidak menyala ) :
Tabel 4.1 Data Tampilan Seven Segment
PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0
Angka Hex
dot (g) (f) (e) (d) (c) (b) (a)
1 1 0 0 0 0 0 0 “0” 0xC0
1 1 1 1 1 0 0 1 “1” 0xF9
1 0 1 0 0 0 1 0 “2” 0xA4
1 0 1 1 0 0 0 0 “3” 0xB0
1 0 0 1 1 0 0 1 “4” 0x99
1 0 0 1 0 0 1 0 “5” 0x92
1 0 0 0 0 0 1 0 “6” 0x82
1 1 1 1 1 0 0 0 “7” 0xF8
1 0 0 0 0 0 0 0 “8” 0x80
1 0 0 1 0 0 0 0 “9” 0x90

Jika ingin ditampilkan secara bersamaan, maka harus diatur hidup matinya display secara
bergantian. Walaupun sebenarnya display tersebut mati secara bergantian tapi mata
manusia akan melihat kedua display tersebut hidup secara bersamaan karena delay antara
hidup dan mati sangat singkat.

Langkah Kerja
1. Buatlah program pada CodeVision AVR
2. Ketiklah program pada Editor.c, kemudian simpan.
3. Compile program dengan menekan tombol F9 (Compile) atau melalui menu
Project kemudian pilih Compile.
4. Buatlah rangkaian pada papan proyek modul system mikrokontroler seperti
gambar berikut ini :

Gambar 4.2 Rangkaian Seven Segment Pada ProtoBoard

5. Selanjutnya buatlah file hex dari proyek yang dibuat yaitu melalui menu Project
kemudian pilih Make atau dengan tombol Shift + F9. Kemudian isikan file hex
tersebut ke modul system mikrokontroler

17
Tampilan Seven Segment
Untuk tampilan pada seven segment, program dapat dibuat dengan menampilkan data
seven segment.
1. Buatlah program untuk menampilkan angka “53” pada 7 segment
2. Buatlah sebuah program penghitung naik (Down counter) dengan delay satu
detik menggunakan dua buah 7 segment dari “09” s/d “00”
3. Buatlah program dengan menampilkan angka 90 sampai 00 setelah itu kembali dari
00 sampai 90

Contoh program

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

void main (void)


{
PORTB=0xFF; //PortB sebagai output
DDRB=0xFF;
PORTC=0xFF; //PortC sebagai output
DDRC=0xFF;

while (1)
{
PORTC=0xFF; //Matikan semua 7 segment
PORTB=0xF9; //Untuk menampilkan angka "1"
PORTC=0xFE; //7 segment pertama nyala
//dan 7 segment kedua mati
delay_ms(15);

PORTC=0xFF; //Matikan semua 7 segment


PORTB=0xC0; //Untuk menampilkan angka "0"
PORTC=0xFD; //7 segment kedua nyala
//dan 7 segment pertama mati
delay_ms(15);
};
}

Program Tampilan 1 Program tampilan 2 Program tampilan 3

18
Data tampilan

Variasi Digit 1 Digit 0

19
JOB 5
INPUT PUSH BUTTON DENGAN TAMPILAN SEVEN SEGMENT

Tujuan pratikum:
Setelah melakukan pratikum pengaktifan seven segment ini, mahasiswa dapat :
1. memahami cara pengoperasian system mikrokontroler AVR ATMEGA8535
2. mengoperasikan system mikrokontroler AVR ATMEGA8535.
3. mengambil data input program dari push button dan menampilkannya pada dengan
seven segment menggunakan system mikrokontroler AVR ATMEGA8535

Teori

(B)

(A)

Gambar 5.1. Rangkaian input push-button dengan output seven segment

Pada gambar rangkaian 5.1 (a)(b) saklar push-button terhubung dengan PC0, kemudian
hasil pembacaan dikeluarkan pada rangkaian 7 segment. Pada rangkaian 7 segment ini
digunakan 2 buah 7 segment commom anode, dimana segment a,b,c,...,f,g dan dot
dihubungkan ke PB0, PB1, PB2,..,PB5, PB6, PB7. Driver 7 segment pertama dihubungkan
ke pin PD0 dan driver 7 segment kedua dihubungkan ke pin PD1. Driver yang digunakan
adalah sebuah transistor yang difungsikan sebagai saklar. Dari gambar diatas terlihat jelas
bahwa pin I/O mikrokontroler yang dibutuhkan sebanyak 8 pin (untuk memudahkan
pengiriman data, sebaiknya menggunakan satu port) ditambah 2 pin untuk driver 7
segment (jumlah 7 segment yang digunakan).

20
Langkah Kerja
1. Buatlah program pada CodeVision AVR
2. Ketiklah program pada Editor.c, kemudian simpan.
3. Compile program dengan menekan tombol F9 (Compile) atau melalui menu
Project kemudian pilih Compile.
4. Buatlah rangkaian pada papan proyek modul system mikrokontroler seperti
gambar berikut ini :

Gambar 5.2 Rangkaian Seven Segment Pada ProtoBoard


5 Selanjutnya buatlah file hex dari proyek yang dibuat yaitu melalui menu Project
kemudian pilih Make atau dengan tombol Shift + F9. Kemudian isikan file hex
tersebut ke modul system mikrokontroler
6. Hubungkanlah kabel pita /flat ribbon cable ke header switch ke “PORTC.

TUGAS
1. Tampilkanlah variasi seven segment 9-0 dengan mengaktifkan push-button Bt1
2. Tampilkanlah variasi seven segment 99-00 dengan mengaktifkan push-button Bt3
Dan kemudian variasi seven segment 00-99 dengan mengaktifkan push-button Bt6

Program Tampilan

Program Tampilan 1 Program tampilan 2

21
22
JOB 6
APLIKASI ANTARMUKA DENGAN LCD

Tujuan pratikum:
Setelah melakukan pratikum scanning keypad dengan output LCD ini, mahasiswa dapat :
1. memahami cara pengoperasian system mikrokontroler AVR ATMEGA 8535
2. mengoperasikan system mikrokontroler AVR ATMEGA 8535.
3. menampilkan output program pada LCD menggunakan system mikrokontroler
AVR ATMEGA 8535

Teori
LCD1
LM016L

+5V

VDD
VSS

VEE

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
E
1
2
3

4
5
6

7
8
9
10
11
12
13
14
U1

R/W
RS

D0
D1
D2
D3
D4
D5
D6
D7
1 40
PB0/T0/XCK PA0/ADC0 D0
2 39
PB1/T1 PA1/ADC1 D1
3 38
PB2/AIN0/INT2 PA2/ADC2 D2
4 37
PB3/AIN1/OC0 PA3/ADC3 D3
5 36
PB4/SS PA4/ADC4 D4
6 35
PB5/MOSI PA5/ADC5 D5
7 34
PB6/MISO PA6/ADC6 D6
8 33
PB7/SCK PA7/ADC7 D7

14 22
PD0/RXD PC0/SCL
15 23
PD1/TXD PC1/SDA
16 24
PD2/INT0 PC2
17 25
PD3/INT1 PC3
18 26
PD4/OC1B PC4
19 27
PD5/OC1A PC5
20 28
PD6/ICP1 PC6/TOSC1
21 29
PD7/OC2 PC7/TOSC2

12
XTAL1
13 32
XTAL2 AREF
9 30
RESET AVCC

ATMEGA8535

Gambar 6.1 Rangkaian Mikokontroler dengan output LCD

Modul LCD mempunyai controller untuk menampilkan karakter (angka, huruf, atau
simbol) pada display. Modul LCD yang digunakan berukuran 8 karakter x 2 baris dengan
controller HD44780 atau persamaanya. Modul LCD membutuhkan inisialisasi terlebih
dahulu sebelum digunakan. Inisialisasi pada modul LCD digunakan untuk menentukan
antarmuka (interface) 4 bit atau 8 bit, jumlah baris display (1 baris atau 2 baris), ukuran
karakter 5x7 dots atau 5x10 dots, display on atau off, mode set dan seterusnya. Karakter
yang ditampilkan ke display disimpan di memori DDRAM (Display Data RAM). Lokasi
karakter yang ditampilkan ke display mempunyai alamat tertentu pada memori DDRAM

Lokasi Karakter 1 2 3 4 5 6 7 8
Alamat DDRAM 80 81 82 83 84 85 86 87 Baris 1
Alamat DDRAM C0 C1 C2 C3 C4 C5 C6 C7 Baris 2

Controller LCD mempunyai dua 8 bit register yaitu instruction register (IR) dan data
register (DR). Instruction register digunakan untuk menyimpan kode instruksi (seperti
display clear, display on/off, cursor shift, dan sebagainya) dan informasi alamat untuk
DDRAM dan CGRAM. Register ini hanya dapat dituls oleh mikrokontroler. Data register
digunakan untuk menulis data atau membaca data dari DDRAM atau CGRAM.

23
Langkah Kerja

1. Buatlah program pada CodeVision AVR


2. Ketiklah program pada Editor.c, kemudian simpan.
3. Compile program dengan menekan tombol F9 (Compile) atau melalui menu
Project kemudian pilih Compile.
4. Buatlah rangkaian pada papan proyek modul system mikrokontroler seperti
gambar berikut ini :

5 Selanjutnya buatlah file hex dari proyek yang dibuat yaitu melalui menu Project
kemudian pilih Make atau dengan tombol Shift + F9. Kemudian isikan file hex
tersebut ke modul system mikrokontroler

Contoh Program

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

#define RS PORTD.5 //setiap kata RS akan diganti dengan PORTD.5


#define RW PORTD.6
#define E PORTD.7
#define port_data PORTA //PORTA sebagai port bidirectional
#define ddr_data DDRA //konfigurasi sebagai input/output

unsigned char datalcd;


void kirim_perintah_lcd (void)
{
ddr_data=0xFF; //sebagai output
RS=0;
RW=0;
E=1; //sinyal untuk chip enable LCD

port_data=datalcd;
E=0;
}

void tulis_data_ram_lcd (void)


{
ddr_data=0xff;
RS=1;
RW=0;
E=1;

port_data=datalcd;
E=0;
}

24
//Inisialisasi LCD
void init_lcd(void)
{
delay_ms(20); //wait for more than 15 ms
datalcd=0x30; //function set (interface 8 bit)
kirim_perintah_lcd();
delay_ms(5); //wait for more than 4.1 ms
datalcd=0x30; //function set (interface 8 bit)
kirim_perintah_lcd();
delay_us(150);//wait for more than 100us
datalcd=0x30; //function set (interface 8 bit)
kirim_perintah_lcd();
delay_us(50); //execution time 39 us
datalcd=0x38; //function set: interface 8 bit

kirim_perintah_lcd();
delay_us(50);
datalcd=0x04; //display off

kirim_perintah_lcd();
delay_us(50);
datalcd=0x01; //display clear

kirim_perintah_lcd();
delay_ms(2);
datalcd=0x06; //entry mode set

kirim_perintah_lcd();
delay_us(50);
datalcd=0x0C; //display on, cursor off

kirim_perintah_lcd();
delay_us(50);
}

void main(void)
{ DDRD=0xFF;
PORTD=0x1C;

init_lcd(); //call prosedur inisialisasi


datalcd='I'; // 'I' dalam ascii=0x49
tulis_data_ram_lcd();
delay_us(50);
datalcd='E';
tulis_data_ram_lcd();
delay_us(50);
datalcd=0xC0; //set alamat DDRAM ke 40
kirim_perintah_lcd();
delay_us(50);

datalcd='L';
tulis_data_ram_lcd();
delay_us(50);
datalcd='C';
tulis_data_ram_lcd();
delay_us(50);
datalcd='D';
tulis_data_ram_lcd();
delay_us(50);
}

25
TUGAS
1. Buatlah Program untuk menampilkan kata PNP PDG pada baris 1 kolom 4
(tengah- tengah baris 1) dan kata 2015 pada baris 2 kolom 4.

Program tampilan

Program Tampilan 1 Program tampilan 2

26
JOB 7
INPUT KEYPAD DENGAN TAMPILAN LED

Tujuan pratikum:
Setelah melakukan pratikum input keypad dengan tampilan LED ini, mahasiswa dapat :
1. memahami cara pengoperasian system mikrokontroler AVR ATMEGA 8535
2. mengoperasikan system mikrokontroler AVR ATMEGA 8535.
3. mengambil data input program dari keypad dan menampilkannya pada LED dengan
menggunakan system mikrokontroler AVR ATMEGA 8535

Teori

RN1 D1
1 16
2 15
3 14 L
U1
4 13
DE2D-RED 40 1
PA0/ADC0 PB0/T0/XCK
5 12 39 2
PA1/ADC1 PB1/T1
6 11 38 3
7 10 D3 37
PA2/ADC2 PB2/AIN0/INT2
4
LED-RED PA3/ADC3 PB3/AIN1/OC0
8 9 36 5
PA4/ADC4 PB4/SS
35 6
RX8
D4 34
PA5/ADC5 PB5/MOSI
7
LED-RED PA6/ADC6 PB6/MISO
33 8
PA7/ADC7 PB7/SCK

L 22 14
DE5D-RED 23
PC0/SCL PD0/RXD
15
R0
PC1/SDA PD1/TXD R1
24 16
PC2 PD2/INT0 R2
25 17
D6 26
PC3 PD3/INT1
18
R3
LED-RED PC4 PD4/OC1B C0
27 19
PC5 PD5/OC1A C1
28 20
D7 29
PC6/TOSC1 PD6/ICP1
21
C2
LED-RED +5V PC7/TOSC2 PD7/OC2 C3
12
D8 32
XTAL1
13
LED-RED AREF XTAL2
30 9
AVCC RESET

LED-RED ATMEGA8535

C3
C2
C1
C0

R0 1 2 3 A

R1 4 5 6 B

R2 7 8 9 C

R3 * 0 # D

Gambar 7.1 Rangkaian keypaddengan tampilan LED

Keypad merupakan susunan saklar push-button menurut baris dan kolom. Bentuk dan
susunan keypad dapat dilihat pada gambar 7.1 Dari gambar 7.1, cara untuk mengetahui
saklar yang mana ditekan adalah dengan memeriksa baris dan kolom. Contohnya saklar
SW10 (pada keypad merupakan angka 8) maka baris 3 (PD2) terhubung singkat dengan
kolom 2 (PD5). Agar mikrokontroler mengetahui baris dan kolom mana yang terhubung,
maka sebagian port mikrokontroler difungsikan sebagai output dan sebagian lagi
difungsikan sebagai input. Pada gambar 7, PD4-PD7 (high order nibble port)
difungsikan sebagai output dan PD0-PD3 (low order nibble port) difungsikan sebagai
input, memastikan bila tidak ada tombol yang ditekan, mikrokontroler membaca logika
‘1’. Hasil penekanan tombol keypad akan dikeluarkan pada LED sehingga LED menyala
yang terhubung pada PORTA

27
Langkah Kerja
1. Buatlah program pada CodeVision AVR
2. Ketiklah program pada Editor.c, kemudian simpan.
3. Compile program dengan menekan tombol F9 (Compile) atau melalui menu
Project kemudian pilih Compile.
4. Hubungkan pin keypad dengan pin mikrokontroler yaitu R1 dengan PD0, R2
dengan PD1, R3 dengan PD2,.., C2 dengan PD5, C3 dengan PD6 dan C4 dengan
PD7.
5 Selanjutnya buatlah file hex dari proyek yang dibuat yaitu melalui menu Project
kemudian pilih Make atau dengan tombol Shift + F9. Kemudian isikan file hex
tersebut ke modul system mikrokontroler
6 Hubungkanlah kabel pita /flat ribbon cable ke header switch ke “PORTA” untuk
tampilan LED.

Contoh program

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

unsigned char key;


unsigned char scan_keypad();
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTD=0xFF;
DDRD=0xF0;

while(1)
{ PORTA=0xff;
key=scan_keypad();
if (key=='1')
{
PORTA=0b11111110;
delay_ms(500);
}
if (key=='2')
{
PORTA=0b11111101;
delay_ms(500);
}
if (key=='3')
{
PORTA=0b11111100;
delay_ms(500);
}
if (key=='4')
{
PORTA=0b11111011;
delay_ms(500);

dst...
}
};
}
unsigned char scan_keypad()
{
PORTD=0b11101111;
if (PIND.0==0) return ('1');
if (PIND.1==0) return ('4');
if (PIND.2==0) return ('7');

28
if (PIND.3==0) return ('*');
PORTD=0b11011111;
if (PIND.0==0) return ('2');
if (PIND.1==0) return ('5');
if (PIND.2==0) return ('8');
if (PIND.3==0) return ('0');
PORTD=0b10111111;
if (PIND.0==0) return ('3');
if (PIND.1==0) return ('6');
if (PIND.2==0) return ('9');
if (PIND.3==0) return ('#');
PORTD=0b01111111;
if (PIND.0==0) return ('A');
if (PIND.1==0) return ('B');
if (PIND.2==0) return ('C');
if (PIND.3==0) return ('D');
}

TUGAS
1. Tampilkanlah data yang bersesuaian dengan input yang diberikan menggunakan
keypad dengan output LED
2. Tampilkanlah variasi led dari 4 LED On, 4 LED off dengan mengaktifkan
keypad yaitu tombol 5
3. Tampilkanlah variasi led dari tepi ke tengah dengan mengaktifkan keypad yaitu
tombol 5 dan tombol 3

Program Tampilan

Program Tampilan 1 Program tampilan 2

29
JOB 8
INPUT KEYPAD DENGAN TAMPILAN SEVEN SEGMENT

Tujuan pratikum:
Setelah melakukan pratikum pengaktifan seven segment ini, mahasiswa dapat :
1. memahami cara pengoperasian system mikrokontroler AVR ATMEGA 8535
2. mengoperasikan system mikrokontroler AVR ATMEGA 8535.
3. mengambil data input program dari keypad dan menampilkannya pada SEVEN
SEGMENT dengan menggunakan system mikrokontroler AVR ATMEGA 8535

Teori

U1
1 40
D0 PB0/T0/XCK PA0/ADC0
2 39
D1 PB1/T1 PA1/ADC1
3 38
PB2/AIN0/INT2 PA2/ADC2
4 37
PB3/AIN1/OC0 PA3/ADC3
5 36
PB4/SS PA4/ADC4
6 35
PB5/MOSI PA5/ADC5
7 34
PB6/MISO PA6/ADC6
8 33
PB7/SCK PA7/ADC7
14 22
R0 PD0/RXD PC0/SCL
15 23
R1 PD1/TXD PC1/SDA
16 24
R2 PD2/INT0 PC2 +5V
17 25
R3 PD3/INT1 PC3
18 26
C0 PD4/OC1B PC4
19 27
C1 PD5/OC1A PC5
20 28
C2 PD6/ICP1 PC6/TOSC1
21 29
C3 PD7/OC2 PC7/TOSC2 +5V
12
XTAL1 D0 D1
13
XTAL2 AREF
32 Q2
9 30 2N3702
RESET AVCC
ATMEGA8535
Q1
C3 2N3702
C2
C1
C0

R0 1 2 3 A

R1 4 5 6 B

R2 7 8 9 C

R3 * 0 # D

Gambar 8.1Aplikasi tampilan seven segment dengan input keypad


Pada gambar rangkaian 8. Keypad terhubung dengan PD0-PD7, kemudian hasil
pembacaan dikeluarkan pada rangkaian 7 segment. Pada rangkaian 7 segment ini
digunakan 2 buah 7 segment commom anode, dimana segment a,b,c,...,f,g dan dot
dihubungkan ke PC0, PC1, PC2,..,PC5, PC6, PC7. Driver 7 segment pertama dihubungkan
ke pin PB0 dan driver 7 segment kedua dihubungkan ke pin PB1. Driver yang digunakan
adalah sebuah transistor yang difungsikan sebagai saklar. Dari gambar diatas terlihat jelas
bahwa pin I/O mikrokontroler yang dibutuhkan sebanyak 8 pin (untuk memudahkan
pengiriman data, sebaiknya menggunakan satu port) ditambah 2 pin untuk driver 7
segment (jumlah 7 segment yang digunakan).

30
Langkah Kerja
1 Buatlah program pada CodeVision AVR
2 Ketiklah program pada Editor.c, kemudian simpan.
3 Compile program dengan menekan tombol F9 (Compile) atau melalui menu
Project kemudian pilih Compile

4 Hubungkan pin keypad dengan pin mikrokontroler yaitu R1 dengan PD0, R2


dengan PD1, R3 dengan PD2,.., C2 dengan PD5, C3 dengan PD6 dan C4 dengan
PD7.
5 Selanjutnya buatlah file hex dari proyek yang dibuat yaitu melalui menu Project
kemudian pilih Make atau dengan tombol Shift + F9. Kemudian isikan file hex
tersebut ke modul system mikrokontroler

Contoh Program

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

unsigned char key;


unsigned char scan_keypad();
void main(void)
{
PORTB=0XFF; //PortB sebagai output
DDRB=0XFF;
PORTC=0XFF; //PortC sebagai output
DDRC=0XFF;
PORTD=0xFF;
DDRD=0xF0;

while(1)
{

key=scan_keypad();
if (key=='4')
{
PORTC=0XFF; //Matikan semua 7 segment
PORTB=0X99; //Untuk menampilkan angka "1"
PORTC=0XFE; //7 segment pertama nyala
//dan 7 segment kedua mati
delay_ms(15);
}

if (key=='5')
{
PORTC=0XFF; //Matikan semua 7 segment
PORTB=0X92; //Untuk menampilkan angka "1"
PORTC=0XFE; //7 segment pertama nyala
//dan 7 segment kedua mati
delay_ms(15);
}
};
}

unsigned char scan_keypad()


{
PORTD=0b11101111;
if (PIND.0==0) return ('1');

31
if (PIND.1==0) return ('4');
if (PIND.2==0) return ('7');
if (PIND.3==0) return ('*');

PORTD=0b11011111;
if (PIND.0==0) return ('2');
if (PIND.1==0) return ('5');
if (PIND.2==0) return ('8');
if (PIND.3==0) return ('0');

PORTD=0b10111111;
if (PIND.0==0) return ('3');
if (PIND.1==0) return ('6');
if (PIND.2==0) return ('9');
if (PIND.3==0) return ('#');

PORTD=0b01111111;
if (PIND.0==0) return ('A');
if (PIND.1==0) return ('B');
if (PIND.2==0) return ('C');
if (PIND.3==0) return ('D');
}

TUGAS
1. Tampilkanlah data yang bersesuaian dengan input yang diberikan menggunakan
keypad dengan output seven segment
2. Tampilkanlah variasi seven segment 88-00 dengan mengaktifkan keypad tombol
8 dan 2
Program tampilan

Program Tampilan 1 Program tampilan 2

32
JOB 9
INPUT KEYPAD DENGAN TAMPILAN LCD

Tujuan pratikum:
Setelah melakukan pratikum Input keypad dengan tampilan lcd ini, mahasiswa dapat :
1. memahami cara pengoperasian system mikrokontroler Atmega8535
2. mengoperasikan system mikrokontroler Atmega8535.
3. menampilkan input keypad dengan output LCD dengan menggunakan system
mikrokontroler Atmega8535

Teori
LCD1
LM016L

U1
1 40
R0 PB0/T0/XCK PA0/ADC0 D0 +5V
2 39
R1 PB1/T1 PA1/ADC1 D1
3 38
R2 PB2/AIN0/INT2 PA2/ADC2 D2

VDD
VSS

VEE

RS
4 37

D0
D1
D2
D3
D4
D5
D6
D7
W
R3 PB3/AIN1/OC0 PA3/ADC3 D3

E
5 36
C0 PB4/SS PA4/ADC4 D4
6 35
C1 PB5/MOSI PA5/ADC5 D5

10
11
12
13
14
1
2
3

4
5
6

7
8
9
7 34
C2 PB6/MISO PA6/ADC6 D6
8 33
C3 PB7/SCK PA7/ADC7 D7

14 22
PD0/RXD PC0/SCL
15 23
PD1/TXD PC1/SDA
16 24

D0
D1
D2
D3
D4
D5
D6
D7
RS

E
R/W
PD2/INT0 PC2
17 25
PD3/INT1 PC3
18 26
PD4/OC1B PC4
19 27
RS PD5/OC1A PC5
20 28
R/W PD6/ICP1 PC6/TOSC1
21 29
E PD7/OC2 PC7/TOSC2
12
XTAL1
13 32
XTAL2 AREF
9 30
RESET AVCC
ATMEGA8535

C3
C2
C1
C0

R0 1 2 3 A

R1 4 5 6 B

R2 7 8 9 C

R3 * 0 # D

Gambar 9.1 keypad dengan output LCD

Perhatikan gambar 9 di atas.


Pada gambar rangkaian 9.1 Keypad terhubung dengan PB0-PB7, kemudian hasil
pembacaan dikeluarkan pada LCD. Pada rangkaian LCD D0-D7 terhubung pada PA0-PA7
sedangkan RS, R/W, E terhubung pada PD5, PD6, PD7.

Langkah Kerja
1. Buatlah program pada CodeVision AVR
2. Ketiklah program pada Editor.c, kemudian simpan.
3. Compile program dengan menekan tombol F9 (Compile) atau melalui menu
Project kemudian pilih Compile.

33
4 Hubungkan pin keypad dengan pin mikrokontroler yaitu R1 dengan PB0, R2
dengan PB1, R3 dengan PB2,.., C2 dengan PB5, C3 dengan PB6 dan C4 dengan
PB7.
5 Buatlah rangkaian pada papan proyek modul system mikrokontroler seperti
gambar berikut ini :

6 Selanjutnya buatlah file hex dari proyek yang dibuat yaitu melalui menu Project
kemudian pilih Make atau dengan tombol Shift + F9. Kemudian isikan file hex
tersebut ke modul system mikrokontroler

Contoh program
#include <mega8535.h>
#include <delay.h>
#define RS PORTD.5 //setiap kata RS akan diganti dengan PORTD.5
#define RW PORTD.6
#define E PORTD.7
#define port_data PORTA //PORTA sebagai port bidirectional
#define ddr_data DDRA //konfigurasi sebagai input/output
unsigned char key;
unsigned char datalcd;
unsigned char scan_keypad();

unsigned char datalcd;


void kirim_perintah_lcd (void)
{
ddr_data=0xFF; //sebagai output
RS=0;
RW=0;
E=1; //sinyal untuk chip enable LCD

port_data=datalcd;
E=0;
}

void tulis_data_ram_lcd (void)


{
ddr_data=0xff;

34
RS=1;
RW=0;
E=1;

port_data=datalcd;
E=0;
}
//Inisialisasi LCD
void init_lcd(void)
{
delay_ms(20); //wait for more than 15 ms
datalcd=0x30; //function set (interface 8 bit)
kirim_perintah_lcd();
delay_ms(5); //wait for more than 4.1 ms
datalcd=0x30; //
kirim_perintah_lcd();
delay_us(150);
datalcd=0x30;
kirim_perintah_lcd();
delay_us(50);
datalcd=0x38;

kirim_perintah_lcd();
delay_us(50);
datalcd=0x04;

kirim_perintah_lcd();
delay_us(50);
datalcd=0x01;

kirim_perintah_lcd();
delay_ms(2);
datalcd=0x06;

kirim_perintah_lcd();
delay_us(50);
datalcd=0x0C;

kirim_perintah_lcd();
delay_us(50);

35
}
void main(void)
{ DDRD=0xFF;
PORTD=0x1C;
PORTB=0xFF;
DDRB=0xF0;

while(1)
{

key=scan_keypad();
if (key=='5')
{ init_lcd();
datalcd='5';
tulis_data_ram_lcd();
delay_us(50);
datalcd=0xC0;
kirim_perintah_lcd();
delay_us(50);

}
if (key=='6')
{ init_lcd();
datalcd='6';
tulis_data_ram_lcd();
delay_us(50);
datalcd=0xC0;
kirim_perintah_lcd();
delay_us(50);

}
};
}

unsigned char scan_keypad()


{
PORTB=0b11101111;
if (PINB.0==0) return ('1');
if (PINB.1==0) return ('4');
if (PINB.2==0) return ('7');
if (PINB.3==0) return ('*');

36
PORTB=0b11011111;
if (PINB.0==0) return ('2');
if (PINB.1==0) return ('5');
if (PINB.2==0) return ('8');
if (PINB.3==0) return ('0');
PORTB=0b10111111;
if (PINB.0==0) return ('3');
if (PINB.1==0) return ('6');
if (PINB.2==0) return ('9');
if (PINB.3==0) return ('#');
PORTB=0b10111111;
if (PINB.0==0) return ('A');
if (PINB.1==0) return ('B');
if (PINB.2==0) return ('C');
if (PINB.3==0) return ('D');
}

TUGAS
1. Tampilkanlah data yang bersesuaian dengan input yang diberikan menggunakan
keypad dengan output LCD
2. Buatlah program dengan menampilkan tulisan JTE pada LCD dengan
mengaktifkan keypad tombol 9
Program tampilan

Program Tampilan 1 Program tampilan 2

37
JOB 10
APLIKASI TIMER DAN COUNTER

Tujuan pratikum:
Setelah melakukan pratikum aplikasi timer dan counter, mahasiswa dapat :
1. memahami cara pengoperasian sistem timer eksternal mikrokontroler AVR Atmega
8535
2. mengoperasikan sistem timer eksternal mikrokontroler AVR Atmega 8535
3. menampilkan INPUT timer/counter dan OUTPUT LED program dengan
menggunakan sistem mikrokontroler AVR Atmega 8535
Landasan Teori
Timer dan Counter merupakan sarana input yang kurang dapat perhatian pemakai
mikrokontroler, dengan sarana input ini mikrokontroler dengan mudah bisa dipakai untuk
mengukur lebar pulsa, membangkitkan pulsa dengan lebar yang pasti. AVR ATMEGA8535
memiliki tiga buah timer, yaitu Timer/Counter0 (8 bit), Timer/Counter1 (16 bit), dan
Timer/Counter3 (16 bit).

Rangkaian minimum untuk counter melalui Port B.0 ditunjukan pada Gambar 4.1. Rangkaian
tersebut menggunakan penampil led. Konfigurasi rangkaian LED yaitu Common Anode (CA)
artinya untuk menghidupkan LED pada Port D, port D harus dikirim atau diberi logika ‘0’.

Gambar 10.1 Skema rangkaian Timer/Counter 0 pada AVR

LANGKAH KERJA

1. Buat rangkaian pada modul praktikum seperti yang terlihat pada gambar percobaan
2. Buat program berikut pada codevision avr
Program 1 Mengaktifkan LED jika Counter Aktif
38
// Program COUNTER TIMER 0

//------------------------------------------------------

#include <mega8535.h>

#include <delay.h>

#include <stdio.h>

unsigned char led,a;

void InisialisasiTIMER ();

void main (void)

DDRD = 0xff;

led=0x00;

InisialisasiTIMER();

while(1)

a = TCNT0;

if (a == 0x06)

led = PIND;

PORTD=~led;

TCNT0=0x00;

void InisialisasiTIMER ()

TCNT0=0x00;

TCCR0=0x07;

}
39
3. Compile dan download program ke modul
4. Hubungkanlah kabel pita /flat ribbon cable ke header switch ke “PORTB” dan ke
header LED ke “PORTD”.

DATA PERCOBAAN

PB0 COUNT LED


1 1 0
1 2 0
1 3 0
1 4 0
1 5 0
1 6 Aktif

TUGAS

Buat program LED berjalan dengan kondisi sebagai berikut


a. Jika Push button ditekan 5 kali maka 4 LED menyala dan 4 LED mati sehingga
seakan-akan LED berkedip
b. Jika Push button ditekan 7 kali maka LED bergeser ke kiri dan jika ditekan 9 kali lagi
LED bergeser ke kanan
c. Jika Push button ditekan 4 kali maka LED berkedip dan jika push button ditekan 7
kali maka LED berjalan ke kanan

40
JOB 11
APLIKASI PIN I/O SEBAGAI OUTPUT
UNTUK MENGENDALIKAN RELAY

Tujuan pratikum:
Setelah melakukan pratikum pengaktifan Dot Matrix ini, mahasiswa dapat :
1. memahami fungsi pin I/O pada mikrokontroler AVR ATMEGA 8535 sebagai input
dan output
2. mengoperasikan system mikrokontroler AVR ATMEGA 8535.

Teori
Fungsi relay hampir sama dengan saklar. Untuk memindahkan posisi saklar pada relay
dengan cara mengalirkan arus pada lilitan relay agar saklar berpindah posisi. Perpindahan
posisi saklar pada relay dilakukan dengan medan magnet, yaitu pada saat lilitan
memperoleh arus yang cukup sehingga pada lilitan akan timbul medan magnet untuk
menarik kontaktor (saklar). Jika arus pada lilitan kurang atau tidak ada arus maka posisi
kontaktor kembali pada posisi semula. Arus dapat dihasilkan jika terdapat selisih tegangan
pada lilitan relay. Gambar 11.1 adalah sebuah relay SPDT ( Single Pole Dual Through).

Gambar 11.1 Cara Kerja Relay SPDT


Umumnya lilitan relay mempunyai nilai tegangan tertentu. Misalnya relay 5 volt, berarti
dibutuhkan tegangan 5 volt agar lilitan menghasilkan arus yang cukup untuk menarik
kontaktor. Gambar rangkaian untuk mengaktifkan relay dengan pin I/O AVR dapat
dilihat pada gambar 11.2 (menunjukan rangkaian untuk satu relay yang dihubungkan
untuk satu relay yang dihubungkan ke PA0, untuk relay kedua dihubungkan ke PA1).

Gambar 11.2. Hubungkan Pin I/O AVR Untuk Menyalakan / Memadamkan Relay

41
Langkah Kerja

1. Buatlah program pada CodeVision AVR


2. Ketiklah program pada Editor.c, kemudian simpan.
3. Compile program dengan menekan tombol F9 (Compile) atau melalui menu
Project kemudian pilih Compile.
4. Buatlah rangkaian pada papan proyek modul system mikrokontroler seperti
gambar berikut ini :

Gambar 11.3 Rangkaian Relay Pada ProtoBoard


5. Selanjutnya buatlah file hex dari proyek yang dibuat yaitu melalui menu Project
kemudian pilih Make atau dengan tombol Shift + F9. Kemudian isikan file hex
tersebut ke modul system mikrokontroler

Contoh program
#include <mega8535.h>

void main (void)


{
DDRC=0x00; //PortC dikonfigurasi sebagai input
PORTC=0x00; //Matikan Internal pullup
DDRA=0x03; //PAO dan PA1 dikonfigurasi sebagai output

PORTA=0x00;

#asm("nop")
while (1)
{
PORTA.0=~PINC.0;
//Logika PORTA.0 kebalikan dari logika PINC.0
PORTA.1=~PINC.1;
//Logika PORTA.1 kebalikan dari logika PINC.1
};

42
Program Tampilan
Program Tampilan 1 Program tampilan 2

43
JOB 12
ANALOG TO DIGITAL CONVERTER (ADC) MIKROKONTROLER

Setelah melakukan pratikum konversi ADC ini, mahasiswa dapat :


1. memahami cara pengoperasian system mikrokontroler ATMEGA8535
2. mengoperasikan system mikrokontroler ATMEGA8535
3. menampilkan output program konversi ADC pada LED dan LCD dengan
menggunakan system mikrokontroler ATMEGA8535

Dasar Teori
ATMEGA8535 merupakan tipe AVR yang dilengkapi dengan 8 saluran ADC internal
dengan fidelitas 10 bit. Dalam mode operasinya, ADC ATMEGA8535 dapat dikonfigurasi,
baik sebagai single ended input maupun pewaktuan, tegangan referensi, mode operasi, dan
kemampuan filter derau yang amat fleksibel sehingga dapat dengan mudah disesuaikan dengan
kebutuhan dari ADC itu sendiri.

Proses inisialisasi ADC meliputi proses penentuan clock, tegangan referensi,format


output data, dan mode pembacaan. Register yang perlu diset nilainya adalah ADMUX (ADC
Multiplexer Selection Register), ADCSRA (ADC Control and StatusRegister A), dan SFIOR
(special Function IO Register). ADMUX merupakan register 8bit yang berfungsi menentukan
tegangan referensi ADC, format data output, dan saluran ADC yang digunakan. Konfigurasi
register ADMUX dapat dilihat pada Gambar dibawah :

Gambar 12.1 Register ADMUX

Bit penyusunnya sebagai berikut:


A. REF[1..0] merupakan bit pengatur tegangan referensi ADC ATMega8535.Memeiliki
Nilai Awal 00 sehingga referensi tegangan berasal dari pin AREF. Detail nilai yang
lain dapat dilihat pada tabel 12.1 dibawah

Tabel 12.1 Pemilihan Mode Tegangan Referensi ADC

B. ADLAR merupakan bit pemilih mode data keluaran ADC. Bernilai awal 0,sehingga 2
bit tertinggi data hasil konversinya berada di register ADCH dan 8 bit sisanya berada
di register ADCL, seperti dalam gambar 12.2 Apabila bernilai 1, maka hasilnya pada
gambar 12.3

Gambar 12.2 Format Data ADC dengan ADLAR=0

44
Gambar 12.3 Format Data ADC dengan ADLAR=1

C. MUX[4..0] merupakan bit pemilih saluran pembacaan ADC. Bernilai awal


00000.Untuk mode single ended input, MUX[4..0] bernilai dari 00000 hingga 00111.

ADCSRA merupakan register 8 bit yang berfungsi melakukan manajemen sinyal kontrol dan
status dari ADC.

Gambar 12.4 Register ADCSRA

Bit penyusunnya sebagai berikut:

a. ADEN merupakan bit pengatur aktivasi ADC. Bernilai awal 0. Jika bernilai 1,
maka ADC aktif.
b. ADSC merupakan bit penanda mulainya konversi ADC. Bernilai awal 0 selama
konversi ADC akan bernilai 1, sedangkan jika konversi selesai, akan bernilai 0.
c. ADATE merupakan bit pengatur aktivasi picu otomatis operasi ADC. Bernilai
awal 0, jika bernilai1 maka konversi ADC akan dimulai pada saat transisi positif
dari sinyal picu yang diplih. Pemiliha sinyal picu menggunakan bit ADTS pada
register SFIOR.
d. ADIF merupakan bit penanda akhir suatu konversi ADC. Bernilai awal 0. Jika
bernilai 1, maka konversi ADC pada saluran telah selesai dan data siap diakses.
e. ADIE merupakan bit pengatur aktivasi interupsi yang berhubungan dengan akhir
konversi ADC. Bernilai awal 0. Jika berniali 1 dan jika konversi ADC telah
selesai, sebuah interupsi akan dieksekusi.
f. ADPS[2..0] merupakan bit pengatur clock ADC. Bernilai awal 000.

Tabel 12.2. Konfigurasi Prescaler ADC

ADPS2 ADPS1 ADPS0 Faktor Pembagi


0 0 0 2
0 0 1 2
0 1 0 4
0 1 1 8
1 0 0 16
1 0 1 32
1 1 0 64
1 1 1 128

45
SFIOR merupakan register 8 bit pengatur sumber picu konversi ADC, apakah dari picu
eksternal atau dari picu internal. Susunannya sebagai berikut :

ADTS2 ADTS1 ADTS0 – ACME PUD PSR2 PSR10

ADTS[2..0] merupakan bit pengatur picu eksternal operasi ADC. Hanya berfungsi jika
bit ADATE pada register ADCSRA bernilai 1. Bernilai awal 000 sehingga ADC
bekerja pada mode free running dan tidak ada interupsi yang akan dihasilkan. Untuk
Operasi ADC, bit ACME, PUD, PSR2, dan PSR10 tidak diaktifkan.

Tabel 12.3 Pemilihan Sumber Picu ADC

ADTS2 ADTS1 ADTS0 Sumber Picu


0 0 0 Mode Free Running
0 0 1 Komparator Analog
0 1 0 Interrupt External Request 0
0 1 1 Timer/Counter0 Compare Match
1 0 0 Timer/Counter0 Overflow
1 0 1 Timer/Counter1 Compare Match B
1 1 0 Timer/Counter1 Overflow
1 1 1 Timer/Counter1 Capture Event

Dalam proses pembacaan hasil konversi ADC, dilakukan pengecekan terhadap bit ADIF
(ADC Interupt Flag) pada register ADCSRA. ADIF akan benilai satu jika konversi sebuah
saluran ADC telah selesai dilakukan dan data hasil konversi siap untuk diambil, dan demikian
sebaliknya. Data disimpan dalam dua buah register, yaitu ADCH dan ADCL.

RANGKAIAN ADC ATMEGA DENGAN LED

VCC

U1
1 40
PB0/T0/XCK PA0/ADC0
2 39
PB1/T1 PA1/ADC1
3 38
VCC PB2/AIN0/INT2 PA2/ADC2
4 37
PB3/AIN1/OC0 PA3/ADC3
5 36
D1 6
PB4/SS PA4/ADC4
35
R1 7
PB5/MOSI PA5/ADC5
34
PB6/MISO PA6/ADC6
8 33 +88.8
D2 330R PB7/SCK PA7/ADC7
LED-RED R2 14 22
Volts
PD0/RXD PC0/SCL
15 23
D3 330R
16
PD1/TXD PC1/SDA
24
LED-RED R3 PD2/INT0 PC2
17 25
PD3/INT1 PC3
18 26
D4 330R
19
PD4/OC1B PC4
27
LED-RED R4 PD5/OC1A PC5
20 28
PD6/ICP1 PC6/TOSC1 VCC
330R 21 29
PD7/OC2 PC7/TOSC2
LED-RED
D5
R5 13
XTAL1
12 32
XTAL2 AREF
330R 9 30
RESET AVCC
LED-RED
D6
R6 ATMEGA8535

330R
LED-RED
D7
R7
D8 330R
LED-RED R8
330R
LED-RED

Gambar 12.5 Rangkaian ADC ATMEGA dengan LED


46
Rangkaian minimum untuk membaca ADC dengan tempilan LED ditunjukan pada
Gambar, yang perlu diperhatikan adalah konfigurasi rangkaian LED yaitu Common
Anode (CA) artinya untuk menghidupkan LED pada Port D, port D harus dikirim atau
diberi logika ‘0’.

Langkah Kerja

1. Buatlah program pada CodeVision AVR


2. Ketiklah program pada Editor.c, kemudian simpan.
3. Compile program dengan menekan tombol F9 (Compile) atau melalui menu
Project kemudian pilih Compile.
4. Buatlah rangkaian pada papan proyek modul sistem mikrokontroler seperti
gambar diatas, komponen yang dibutuhkan sebagai berikut :

No Komponen/Bahan Qty Ket


1 Resistor Var 10K 1
2 Kabel Jumper 3 -Terhubung ke VCC
-Terhubung ke Ground
-Terhubung ke PortA.0
3 Kabel pita/flat ribbon 1 Terhubung ke LED

5. Hubungkanlah kabel pita /flat ribbon cable ke header LED ke “PORTD”.

6. Selanjutnya buatlah file hex dari proyek yang dibuat yaitu melalui menu Project
kemudian pilih Make atau dengan tombol Shift + F9. Kemudian isikan file hex tersebut
ke modul system mikrokontroler

Contoh Program ADC ATMEGA dengan LED

//-------------------------------------------------------
//Program ADC LED
//-------------------------------------------------------
#include <mega8535.h>
#include <stdio.h>
#include <delay.h>
unsigned int data_adc;
int suhu;
#define ADC_VREF_TYPE 0x60
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;

return ADCH;
}
void main(void)
{
DDRD = 0xFF;
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x87;
SFIOR&=0xEF;
while (1) 47
{
data_adc=read_adc(0);
suhu=~data_adc;
PORTD = suhu;
}
}

RANGKAIAN ADC ATMEGA DENGAN LCD

LCD1
LM016L
VDD
VSS

VEE

RW

1
RS

D0
D1
D2
D3
D4
D5
D6
D7
E

U2
1
2
3

4
5
6

7
8
9
10
11
12
13
14

27.0 LM35
U1
+5V
1 40 2
PB0/T0/XCK PA0/ADC0 VOUT
2 39
PB1/T1 PA1/ADC1
3 38
RS

EN
RW

PB2/AIN0/INT2 PA2/ADC2
4 37
PB3/AIN1/OC0 PA3/ADC3
5 36 3
PB4/SS PA4/ADC4
6 35
PB5/MOSI PA5/ADC5
7 34
PB6/MISO PA6/ADC6
8 33
PB7/SCK PA7/ADC7
14 22
PD0/RXD PC0/SCL
15 23
PD1/TXD PC1/SDA
16 24
PD2/INT0 PC2
17 25
PD3/INT1 PC3
18 26
PD4/OC1B PC4
19 27
RS PD5/OC1A PC5
20 28
RW PD6/ICP1 PC6/TOSC1
21 29
EN PD7/OC2 PC7/TOSC2
13
XTAL1
12 32
XTAL2 AREF
9 30
RESET AVCC
VCC
ATMEGA8535

Gambar 12.6 Rangkaian LM35 dengan LCD

Rangkaian minimum untuk membaca ADC dengan tempilan LCD ditunjukan pada
Gambar 11.6, sensor suhu LM35 terhubung pada PORTA.0, output data digital dari sensor
suhu LM35 ditampilkan ke LCD menggunakan PORTB

Sensor Suhu (LM35)

Sensor LM35 merupakan sensor suhu dengan tegangan output yang linier sebesar 10 mv/ oC.
Tegangan yang dibutuhkan oleh LM35 antara 4 sampai 30 volt dengan suhu pengukuran
antara 0oC sampai +100oC. Misalnya suhu yang diukur sebesar 26oC maka tegangan output
sensor :

𝑉𝑜𝑢𝑡 = 26℃ 𝑥 10𝑚𝑉/℃ = 260 𝑚𝑉 = 0,26

Gambar 12.7. Rangkaian Sederhana Penggunaan Sensor LM35


48
Langkah Kerja :

1. Buatlah program pada CodeVision AVR


2. Ketiklah program pada Editor.c, kemudian simpan.
3. Compile program dengan menekan tombol F9 (Compile) atau melalui menu
Project kemudian pilih Compile.

4. Buatlah rangkaian pada papan proyek modul system mikrokontroler seperti


gambar diatas, komponen yang dibutuhkan sebagai berikut :
No Komponen/Bahan Qty Ket
1 LM35DZ 1 Sensor Suhu
2 Kabel Jumper 3 -Terhubung ke VCC
-Terhubung ke PortA.0
-Terhubung ke Ground
3 Kabel pita/flat ribbon LCD 1 Terhubung ke Port to LCD
4 Kabel Jumper LCD 3 Terhubung ke LCD
RS, RW, E

5. Selanjutnya buatlah file hex dari proyek yang dibuat yaitu melalui menu Project
kemudian pilih Make atau dengan tombol Shift + F9. Kemudian isikan file hex
tersebut ke modul system mikrokontroler

Contoh Program ADC ATMEGA ( LM35) dengan LCD

//-------------------------------------------------------
//Program LM35 LCD
//-------------------------------------------------------

#include <mega8535.h>

#include <delay.h>

#define RS PORTD.5 //setiap kata RS akan diganti dengan PORTD.5

#define RW PORTD.6

#define E PORTD.7

#define port_data PORTB //PORTB sebagai port bidirectional

#define ddr_data DDRB //konfigurasi sebagai input/output

#define pin_data PINB

#define ADC_VREF_TYPE 0x00

unsigned long int hasil;

// fungsi untuk mengubah input biner 16 bit menjadi

//bentuk BCD 5 digit

unsigned long int bin2bcd(unsigned int input)

hasil= ((input/10000)*65536)+
49
(((input%10000)/1000)*4096) +

((((input%10000)%1000)/100)*256)+

(((((input%10000)%1000)%100)/10)*16)+

((((input%10000)%1000)%100)%10);

return(hasil);

//fungsi untuk membaca tegangan input ADC (konversi

//ADC)

unsigned int read_adc(unsigned char adc_input)

unsigned char temp;

unsigned int data_adc;

ADMUX=adc_input|ADC_VREF_TYPE;

//start konversi ADC

ADCSRA|=0x40; //ADSCRA di-OR-kan dengan 40H

// (ADSCRA=ADSCRA|0X40)

//Tunggu sampai Konversi ADC selesai (flag ADIF)

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10; //Clear flag ADIF

data_adc=0x0000;

temp=ADCL; //Baca ADC Data Register LOW

data_adc=ADCH; //Baca ADC Data Register HIGH

data_adc<<=8; //Geser data_adc HIGH ke kiri 8 kali

data_adc|=temp; //Hasil Konversi ADC=0000

//00xx xxxx xxxx

return data_adc; //Right adjusted

unsigned char datalcd;

void kirim_perintah_lcd (void)

ddr_data=0xFF; //sebagai output


50
RS=0; RW=0;

E=1; //sinyal untuk chip enable LCD

port_data=datalcd;

E=0;

void tulis_data_ram_lcd (void)

{ ddr_data=0xff; RS=1;

RW=0; E=1;

port_data=datalcd; E=0;

void baca_alamat_ram_lcd(void)

ddr_data=0x00;

port_data=0x00;

RS=0;

RW=1;

E=1;

#asm ("nop");

datalcd=pin_data;

E=0;

void lcd_ready (void)

baca_alamat_ram_lcd();

while (datalcd & 0x80)

baca_alamat_ram_lcd();

//Inisialisasi LCD

void init_lcd(void)

{
51
delay_ms(20); //wait for more than 15 ms datalcd=0x30; //function set
(interface 8 bit) kirim_perintah_lcd();

datalcd=0x30; //function set (interface 8 bit)

kirim_perintah_lcd();

delay_ms(5);//wait for more than 100us datalcd=0x30; //function set


(interface 8 bit)

datalcd=0x30;

kirim_perintah_lcd();

delay_us(50); //execution time 39 us datalcd=0x38; //function set:


interface 8 bit

datalcd=0x30;

kirim_perintah_lcd();

delay_us(50);

datalcd=0x38; //display off

kirim_perintah_lcd();

lcd_ready();

datalcd=0x04;

kirim_perintah_lcd();

lcd_ready();

datalcd=0x01;

kirim_perintah_lcd();

lcd_ready();

datalcd=0x06;

kirim_perintah_lcd();

lcd_ready();

datalcd=0x0C;

kirim_perintah_lcd();

lcd_ready();

# include <string.h>

flash unsigned char string1[]={"SUHU/*C"};

void main(void)

unsigned char i,adc_input=0x00; 52


DDRA=0X00;

//Tegangan referensi ADC=pin AREF

ADMUX=ADC_VREF_TYPE;

//Inisialisasi ADC (Enable ADC)

//Frekuensi clock ADC :31.250 kHz (4Mhz/128)

ADCSRA=0x87;

SFIOR&=0xEF; //Sumber trigger :Free running Mode

DDRC=0XFF;

DDRD=0XFF;

PORTD=0X1C;

init_lcd();

for (i=0;i<=strlenf(string1)-1;i++)

datalcd=string1[i];

tulis_data_ram_lcd();

lcd_ready() ;

while (1)

datalcd=0xC0;

kirim_perintah_lcd();

lcd_ready();

hasil=read_adc(adc_input); // baca tegangan pada pin ADC0

hasil=hasil*49; //hasil pembacaan dikalikan dengan 1 LSB

PORTC=hasil;

hasil=bin2bcd(hasil); //konversi hasil ADC ke format BCD

datalcd=(hasil>>12 & 0x0F) +0x30; //ubah format BCD ke ASCII (+0x30)

tulis_data_ram_lcd();

lcd_ready();

datalcd=(hasil>>8 & 0x0F) +0x30;


53
tulis_data_ram_lcd();

lcd_ready();

datalcd=',';

tulis_data_ram_lcd();

lcd_ready();

datalcd=(hasil>>4 & 0x0F) +0x30;

tulis_data_ram_lcd();

lcd_ready();

datalcd=(hasil & 0x0F) +0x30;

tulis_data_ram_lcd();

lcd_ready();

datalcd='C';

tulis_data_ram_lcd();

lcd_ready();

};

54
JOB 13

APLIKASI MOTOR

Tujuan pratikum:

Setelah melakukan pratikum pengontrolan motor stepper ini, mahasiswa dapat :

1. memahami cara pengoperasian sistem mikrokontroler ATMEGA 8535


2. mengoperasikan sistem mikrokontroler ATMEGA 8535.
3. Memahami fungsi PWM pada mikrokontroler ATMEGA 8535
4. mengontrol motor stepper, motor DC dan motor servo dengan menggunakan sistem
mikrokontroler ATMEGA 8535

A. PENGONTROLAN MOTOR DC

Landasan Teori

PWM (Pulse Width Modulation) dapat digunakan untuk mengatur kecepatan motor, yaitu
dengan cara mengatur lebar pulsa (waktu ON) dari tegangan sumbernya (tegangan DC).
Perbandingan antara waktu ON dan waktu OFF disebut duty cycle (siklus kerja). Semakin
besar siklus kerjanya, akan semakin besar pula keluaran yang dihasilkan, sehingga kecepatan
motor akan semakin besar. Pembangkitan sinyal PWM dengan mikrokontroler memiliki
beberapa keuntungan, seperti teknik pemrograman yang sederhana, dan rangkaian listrik
menjadi sederhana. Mikrokontroler AVR ATMEGA8535 dapat digunakan sebagai
pembangkit gelombang PWM. Mikrokontroler AVR ATMEGA8535 mempunyai PWM yang
telah terintegrasi dalam chip. Keluaran dari PWM tersebut terdapat pada pin 15 (OC1). Untuk
menjalankan program PWM, diperlukan 3 unit register timer, yaitu:

a. Timer/Counter Control Register (TCCR), untuk menentukan mode PWM.

b. Timer/Counter Register (TCNT), digunakan untuk menentukan modulasi frekuensinya.

c. Output Compare Register (OCR), untuk menentukan nilai siklus kerjanya.

Dalam mikrokontroler ATMEGA8535, terdapat beberapa mode PWM. Mode PWM yang
akan dibahas adalah mode Phase Correct PWM. Pada resolusi untuk mode phase correct pwm
dapat dipilih 8,9,10 bit, atau ditentukan nilai ICR1 atau OCR1A. Resolusi minimum yang
diperbolehkan sebesar 2 bit ( ICR1 atau ICR1A=0x0003) dan resolusi maksimum sebesar 16
bit (ICR1 atau ICR1A=0xffff). Resolusi PWM dapat dihitung dengan menggunakan
persamaan :
log(𝑇𝑂𝑃+1)
R PCPWM = log(2)

Diagram waktu untuk mode Phase Correct PWM ditunjukkan pada gambar 13.1. Keterangan
yang lebih lengkap terdapat pada datasheet ATMEGA8535 pada bagian 16 bit Timer/Counter
(Modes of Operation).

55
Gambar 13.1 Diagram waktu Timer/Counter1 untuk Mode Phase Correct PWM

Frekuensi output PWM ketika menggunakan Phase Correct PWM dapat dihitung dengan
menggunakan persamaan:
𝑓 𝑐𝑙𝑘_𝐼/𝑂
F OC1xPCPWM = 2.𝑁.𝑇𝑂𝑃

Dimana N merupakan nilai prescaler, bernilai 1, 8, 64, 256, atau 1024.

Penggunaan 16 bit Timer/Counter1 sebagai PWM pada Mikrokontroler AVR


ATMEGA8535 untuk Mengendalikan Kecepatan Putar Suatu Motor DC

Untuk menggerakan suatu motor DC menggunakan mikrokontroler diperlukan suatu rangkaian


driver motor. Driver motor digunakan untuk menggerakan motor yang membutuhkan arus
cukup besar dan/atau tegangan motor yang berbeda dengan rangkaian digital (rangkaian
mikrokontroler). Arus yang mampu dikeluarkan atau diterima (current source/sink) oleh
mikrokontroler sangat kecil sehingga agar mikrokontroler dapat menggerakkan motor
diperlukan driver motor yang mampu mengalirkan arus sampai beberapa ampere. Beberapa
motor DC mempunyai tegangan kerja yang berbeda dengan rangkaian mikrokontroler (5 volt)
misalnya motor DC 6 volt, 12 volt, 24 volt, dan sebagainya. Rangkaian driver motor dapat
berupa rangkaian transistor, relay, rangkaian mosfet, IC, dan sebagainya. Dalam aplikasi ini
digunakan IC L293D yang berisi 4 channel driver dengan kemampuan mengalirkan arus
sebesar 600mA per channel. Tegangan kerja IC L293D dari 6 volt sampai dengan 36 volt dan
arus impuls tak berulang maksimum sebesar 1,2 ampere. Gambar 13.2 menunjukan
konfigurasi pin IC L293D.

Gambar 13.2. Konfigurasi Pin IC L293D 56


Pada gambar 13.2. pin VS/VCC2 (kaki 8) merupakan sumber tegangan untuk rangkaian
digital (INPUT) dan pin VSS/VCC1 (kaki 16) merupakan sumber tegangan untuk rangkaian
motor (OUTPUT). Pin ENABLE 1 (kaki 1) digunakan untuk mengaktifkan channel 1 (INPUT
1) dan channel 2 (INPUT 2) sedangkan pin ENABLE 2 (kaki 9) digunakan untuk
mengaktifkan channel 3 (INPUT 3) dan channel 4 (INPUT 4). Tabel kebenaran untuk IC
L293D (dua channel driver) ditunjukan pada table 13.2.

Tabel 13.1. Tabel Kebenaran IC L293D (Dua Channel Driver)

INPUT ENABLE * OUTPUT


H H H
L H L
H L Z
L L Z
Catatan : * = relative terhadap channel yang dipilih, Z = impedansi tinggi.

Gambar 13.3 menunjukkan penghubungan IC L293D dengan sebuah motor DC serta


penghubungannya dengan mikrokontroler ATMEGA8535. Penggunaan pin PD4 (OC1B) dan
PD5 (OC1A) pada mikrokontroler ATMEGA8535 merupakan pin output PWM untuk 16 bit
Timer/Counter1. Pada ganbar 13.4 digunakan sebuah motor DC dengan tegangan kerja 5 volt
dan arus motor maksimum 500 mA.

Gambar 13.3. Gambar Rangkaian Motor DC

Untuk menggerakkan motor DC seperti pada gambar 13.3. yaitu dengan memberikan logika 1
pada PD4 dan logika 0 pada PD5. Untuk membalik arah putaran motor dengan memberikan
logika 0 pada PD4 dan logika 1 pda PD5. Agar motor berhenti berputar dengan memberikan
nilai logika yang sama pada PD4 dan PD5.

Langkah Kerja

1. Buatlah program pada CodeVision AVR


2. Ketiklah program pada Editor.c, kemudian simpan.

3. Compile program dengan menekan tombol F9 (Compile) atau melalui menu


57
Project kemudian pilih Compile.

4. Buatlah rangkaian pada papan proyek modul sistem mikrokontroler seperti


gambar berikut ini :

Komponen yang dibutuhkan :

No Komponen/Bahan Qty Ket


1 IC L293D 1 IC driver
2 Motor DC 5 volt 1
3 Kapasitor 100uF / 2
50V
4 Kabel pita / flat 1 Terhubung ke Switch
Ribbon

5. Selanjutnya buatlah file hex dari proyek yang dibuat yaitu melalui menu Project
kemudian pilih Make atau dengan tombol Shift + F9. Kemudian isikan file hex
tersebut ke modul system mikrokontroler

Contoh Program1 motor DC berputar searah menggunakan output PWM


Timer/Counter1 pada channel A

#include <mega8535.h>

#include <delay.h>

void main (void)

unsigned int temp;

PORTC=0x00;

DDRC= 0x00; //portc sebagai input

PORTD=0x00;

PORTD=0x30; // PD4 (OC1B) dan PD5 (OC1A) sebagai output


58
// inisialisasi timer/counter1

// clock source : system clock/8

// clock value : 500 kHz

// Mode : phase correct pwm, TOP value =ICR1 value

//TCCR1A=0x82 -> Non inverted PWM mode

//OC1A output : clear OCR1A on compare match

// when up counting Set OC1A on compare

// match when down counting.

//OC1B output : disconnected (normal)

TCCR1A = 0x82; //PWM, phase correct

TCCR1B=0x12; // clock= (4 MHz /8)

TCNT1=0x0000;

ICR1H=0xff; // resolusi phase correct PWM =

// {log (TOP + 1) }/ {log (2) }

// {log (65535 + 1) }/{log (2) }

// 4.8165 / 0.301

// = 16 bit

OCR1A=0x0000;

temp=0x0ff0; //nilai awal PWM

while (1)

if (PINC.0==0) //jika tombol yang terhubung dengan PC0 ditekan

//maka motor semakin lambat

delay_ms(100); //berputar sampai berhenti

temp-=0xff;

if (temp==0xff01) temp=0x0000;

}
59
if (PINC.1==0) //jika tombol yang terhubung dengan PC1 ditekan

//maka motor semakin cepat

delay_ms(100); //berputar sampai berputar terus

temp+=0xff;

if (temp==0x00fe) temp=0xffff;

OCR1A=temp;

};

Program 2. Program motor DC dengan arah putaran dapat dipilih


menggunakan output PWM Timer/Counter1 pada channel A atau channel B

#include <mega8535.h>

#include <delay.h>

bit i;

void main(void)

unsigned int temp;

PORTC=0x00;

DDRC=0x00;

PORTD=0x00;

DDRD=0x30;

TCCR1A=0x82;

TCCR1B=0x12;

TCNT1=0x0000;

ICR1H=0xff;
60
ICR1L=0xff;

OCR1A=0x0000;

OCR1B=0x0000;

i=0;

temp=0x0ff0;

while (1)

if (PINC.0==0)

delay_ms(100);

temp-=0xff;

if (temp==0xff01) temp=0x0000;

if (PINC.1==0)

delay_ms(100);

temp+=0xff;

if (temp==0x00fe) temp=0xffff;

if (PINC.2==0) //Memilih arah putaran

i=~i; //Putar balik motor

if (i==0) TCCR1A=0x82; //OC1A:output,

//OC1B:normal

//OC1A:normal,

//OC1B:output

61
else TCCR1A=0x22;

delay_ms(100); //Delay untuk bouncing dari saklar

OCR1A=temp;

OCR1B=temp;

};

Tugas

Buatlah program seperti contoh program 2 dengan tambahan 2 push button. Push button
pertama (terhubung dengan pin PC6) digunakan untuk menggerakkan motor DC berputar
cepat, sedangkan push button kedua (terhubung dengan PC5) digunakan untuk menghentikan
putaran motor DC. Push button yang lain (push button yang terhubung dengan PC0, PC1 dan
PC2) mempunyai fungsi yang sama dengan contoh program 2.

B. PENGONTROLAN MOTOR STEPPER

Landasan Teori

Stepper motor adalah salah satu tipe motor yang sangat populer digunakan sebagai peralatan
penggerak/pemutar (movement unit/ actuator) dalam sistem kontrol otomasi diindustri,
instrumentasi bahkan printer yang sering kita pakai sehari-hari. Untuk mengerakkan suatu
motor stepper menggunakan mikrokontroler diperlukan suatu rangkaian driver motor.
Beberapa motor stepper mempunyai tegangan kerja yang sama atau berbeda dengan rangkaian
mikrokontroler (5 volt) misalnya motor stepper 5 volt, 24 volt, dan sebagainya. Driver yang
digunakan untuk menggerakkan motor stepper sama dengan yang digunakan pada aplikasi
motor DC yaitu L293D. Sedangkan motor stepper yang digunakan pada pratikum bertipe
bipolar dengan tegangan kerja sebesar 5 volt

Gambar 13.4. Gambar Rangkaian Motor Stepper


62
Gambar 13.4 menunjukan penghubungan IC L293D dengan sebuah motor stepper bipolar
serta penghubungannya dengan mikrokontroler ATMEGA8535.

Untuk menggerakkan motor stepper bipolar, seperti pada gambar 13.4, diperlukan beberapa
langkah agar motor stepper dapat berputar searah jarum jam (CW) maupun berlawanan arah
jarum jam (CCW). Langkah-langkah yang dimaksud adalah urutan pemberian nilai logika
pada kaki A, B, C, dan D seperti ditunjukan pada tabel 13.2. Untuk menggerakkan motor
stepper bipolar berlawanan arah jarum jam (CCW) secara full step maka pemberian nilai
logika dimulai dari nomor 2, nomor 4, nomor 6, nomor 8, kemudian kembali lagi ke nomor 2,
nomor 4 dan seterusnya. Sedangkan untuk mengerakkan motor stepper bipolar berlawanan
arah jarum jam (CCW) secara half step maka pemberian nilai logika dimulai dari nomor 1,
nomor 2, ..., nomor 7, nomor 8 kemudian kembali lagi ke nomor 1, nomor 2, dan seterusnya.
Agar motor stepper bipolar bergerak searah jarum jam (CW) secara full step atau half step
yaitu dengan membalik urutan pemberian nilai logika. Untuk lebih jelasnya dapat dilihat pada
tabel 13.2.

Tabel 13.2 Tabel Logika untuk Menggerakkan Motor Stepper Bipolar

Half step (8 siklus) / Full step (4 siklus)


NO A B C D KET
(PD7) (PD6) (PD5) (PD4)
1 1 0 0 0
2 1 1 0 0
3 0 1 0 0 CCW CW
4 0 1 1 0
5 0 0 1 0
6 0 0 1 1
7 0 0 0 1
8 1 0 0 1
Catatan : CW = Clock Wise, CCW = Counter Clock Wise

Langkah Kerja

1. Buatlah program pada CodeVision AVR


2. Ketiklah program pada Editor.c, kemudian simpan.

3. Compile program dengan menekan tombol F9 (Compile) atau melalui menu

Project kemudian pilih Compile.

4. Buatlah rangkaian pada papan proyek modul sistem mikrokontroler seperti


gambar berikut ini :

63
Komponen yang dibutuhkan :

No Komponen/Bahan Qty Ket


1 IC L293D 1 IC driver
2 Motor Stepper 1 Bipolar 5 volt
3 Kapasitor 100uF / 2
50V
4 Kabel pita / flat 1 Terhubung ke Switch
Ribbon

5. Selanjutnya buatlah file hex dari proyek yang dibuat yaitu melalui menu Project
kemudian pilih Make atau dengan tombol Shift + F9. Kemudian isikan file hex
tersebut ke modul system mikrokontroler

Contoh Program1 motor stepper yang berputar CCW secara full step

#include <mega8535.h>

#include <delay.h>

flash unsigned char string[]={0xC0,0x60,0x30,0x90};

void main(void)

unsigned char i;

PORTD=0x00;

DDRD=0xF0; //PD4-PD7 sebagai output

64
i=0;

while (1)

//Stepper berputar CCW secara full step

i++;

if(i==4) i=0;

PORTD=string[i];

delay_ms(25); //Delay agar motor stepper berputar

};

Contoh Program2 motor stepper yang berputar secara full step atau half step

#include <mega8535.h>

#include <delay.h>

flash unsigned char string[]={0x80,0xC0,0x40,0x60,0x20,

0x30,0x10,0x90};

bit j;

void main(void)

unsigned char i;

PORTC=0x00;

DDRC=0x00; //PC0-PC7 sebagai input

PORTD=0x00;

DDRD=0xF0; //PD4-PD7 sebagai output

i=1;

j=0;

while (1)

{
65
if (PINC.0==0) //Jika tombol yang terhubung

//dengan PC0 ditekan maka motor stepper CW

if(j==0)

i=i-2; //Diambil nilai

//0x90,0x30,0x60 dan 0xC0

if (i==0xff) i=7;

PORTD=string[i];

else //Jika Half step maka:

i--; //semua nilai pada variabel string

if (i==0xff) i=7;

PORTD=string[i];

delay_ms(100); //untuk bouncing saklar

PORTD=0; //Nilai logika stepper ='0'

if (PINC.1==0) //Jika tombol yang terhubung

//dengan PC0 ditekan maka motor stepper CW

delay_ms(50);

if (j==0) //full step

i=i+2; //Diambil nilai 0xc0,0x60,0x30 dan 0x90

if(i==9) i=1;
66
PORTD=string[i];

else //Half step

i++;

if (i==8) i=0;

PORTD=string[i];

delay_ms(100);

PORTD=0;

if (PINC.2==0) //untuk memilih stepper

//berputar secara full step

//atau half step

delay_ms(100);

j=~j; //Nilai j di komplemen

//Nilai awal i=1

i=1;

};

Program 3. Program motor stepper dengan kecepatan putar dapat


diatur

#include <mega8535.h>

#include <delay.h>

flash unsigned char string[] ={

0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};

bit j;
67
void main(void)

unsigned char i, temp;

PORTC=0x00;

DDRC=0x00; //PC0-PC7 sebagai input

PORTD=0x00;

DDRD=0xf0; //PD4-PD7 sebagai output

//inisialisasi timer/counter0 untuk waktu

//overflow 20ms (50Hz)

//sumber clock :system clock (kristal)

//nilai clock : system clock/1024 (clock prescale)

TCCR0=0x05; //mode operasi normal

//menggunakan timer/counter0 sebagai delay 20ms

temp=0xB2;

//dengan nilai ini diperoleh overflow

//20ms (dengan frekuensi kristal 4MHz)

//t= TNCT0 x (1/kristal) x clock prescale

//20ms= TNCT0 x(1/4MHz) x 1024

//20ms= TNCT0 x 256us

//TNCT0=78,125 --> dibulatkan menjadi 78

//diambil nilai TCNT2 = FFH -4EH (78)=B1H

//nilai B1H + 1 (untuk overflow timer) = B2H

i=0;

j=0; //Motor stepper berputar CCW

while (1)

{
68
if (j==0)

// stepper berputar CCW secara half step

i++;

if (i==8) i=0;

PORTD=string[i];

else

// stepper berputar CW secara half step

i--;

if (i==0xff) i=7;

PORTD=string[i];

if (PINC.0==0) //jika tombol yang terhubung dengan

// PC0 ditekan maka stepper motor

//semakin lambat berputar

delay_ms(100);

temp--;

if (temp==0xff) temp=0; //nilai temp=0

//delay=65, 5ms

if (PINC.1==0) //jika tombol yang terhubung dengan

// PC1 ditekan maka stepper motor

//semakin cepat berputar

{
69
delay_ms(100);

temp++;

if (temp==0xf9) temp=0xf8;

//nilai temp=0xf8, delay=2ms

//stepper masih berputar cepat

if (PINC.2==0) //untuk memilih stepper

//berputar CCW atau CW

delay_ms(100);

j=~j; // nilai j di komplemen

i=0; // nilai awal i=0

TCNT0=temp;

TIFR&=0x01; //clear flag TOV0 dengan menulis logika '1'

while (!(TIFR&0x01)); //tunggu sampai flag TOV0 (timer overflow)

TIFR&=0x01; //clear flag TOV0 (overflow)

};

Tugas

Buatlah program seperti pada contoh program 3 dengan tambahan 2 push button. Push button
pertama terhubung dengan pin PC7 digunakan untuk menggerakkan motor stepper berputar
cepat secara half step, sedangkan push button kedua terhubung dengan pin PC6 digunakan
untuk menghentikan putaran motor stepper. Push button yang lain yang terhubung dengan pin
PC0, PC1, dan PC2 mempunyai fungsi yang sama dengan program 3.

70
C. PENGONTROLAN MOTOR SERVO

Landasan Teori

Terdapat dua macam motor servo yaitu standart servo dan continuous servo. Standard servo
hanya dapat berputar pada possi 00 sampai 1800 (setengah putaran) sedangkan continous servo
dapat berputar terus-menerus (3600) . Kelebihan standart servo yaitu posisi putaran yang dapat
di atur dengan memberikan pulsa ke motor servo dengan frekuensi tertentu. Sehingga dengan
memberikan pulsa dengan frekuensi tertentu yang sama, posisi putaran akan tetap pada titik
tertentu (pada derajat tertentu). Kelemahan countinous servo yaitu posisi putaran tidak dapat
diatur, pemberian pulsa dengan frekuensi tertentu hanya digunakan untuk memilih arah
putaran (CW, CCW, atau berhenti). Motor servo yang digunakan pada contoh ini adalah
standard servo.

Gambar 13.5 menunjukkan bentuk pulsa yang diberikan ke standard servo untuk mengubah
posisi putaran motor. Lebar pulsa yang diberikan ke motor servo harus akurat jika tidak maka
putaran motor servo tidak tepat pada posisinya. Jarak antar pulsa yang diberikan ke motor
servo adalah 20 ms

Catatan : Lebar pulsa yang diberikan ke standard servo tidak boleh kurang dari 920 µs untuk
full counterclockwise dan tidak boleh lebih dari 2120 µs untuk full clockwise sebab dapat
menyebabkan kerusakan pada motor servo. Kerusakan terjadi karena motor berputar melebihi
dari batas putaran (00 – 1800) yang mana pada batas tersebut motor tidak bisa berputar
sehingga dapat menyebabkan motor servo terbakar.

Gambar 13.5. Lebar Pulsa Motor Standard Servo

Gambar 13.6 menunjukkan penghubungan motor standard servo dengan mikrokontroler


ATMEGA8535. Motor servo hanya membutuhkan sebuah input pulsa untuk mengatur putaran
motor sebab di dalam motor servo terdapat rangkaian yang mengatur putaran motor
berdasarkan pulsa yang diterima oleh rangkaian tertentu

71
Gambar 13.6. Gambar Rangkaian Motor Servo

Langkah Kerja

1. Buatlah program pada CodeVision AVR


2. Ketiklah program pada Editor.c, kemudian simpan.

3. Compile program dengan menekan tombol F9 (Compile) atau melalui menu

Project kemudian pilih Compile.

4. Buatlah rangkaian pada papan proyek modul sistem mikrokontroler seperti


gambar berikut ini :

Komponen yang dibutuhkan :

No Komponen/Bahan Qty Ket


0
1 Standard Servo 1 (180 ) Parallax

5. Selanjutnya buatlah file hex dari proyek yang dibuat yaitu melalui menu Project
kemudian pilih Make atau dengan tombol Shift + F9. Kemudian isikan file hex
tersebut ke modul system mikrokontroler
72
Contoh Program 1. Program untuk menggerakkan motor servo

#include <mega8535.h>

#include <delay.h>

unsigned char I,j,k;

void putar_servo (void)

//kirim pulsa sebanyak nilai k (75 kali)

for(k=1;k<=75; k++)

PORTA.0=1;

for(j=1;j<=i;j++) // ulang delay 10us sebanyak nilai i

delay_us(10);

PORTA.0=0;

//Menggunakan timer/counter2 sebagai

//delay 20ms

TIFR&=0x40; //clear flag TOV2 (pending overflow)

TCNT2=0xB1;

//dengan nilai ini diperoleh overflow

//20ms (dengan frekuensi kristal 4MHz)

//t= TNCT0 x (1/kristal) x clock prescale

//20ms= TNCT0 x(1/4MHz) x 1024

//20ms= TNCT0 x 256us

//TNCT0=78,125 --> dibulatkan menjadi 78

//diambil nilai TCNT2 = FFH -4EH (78)=B1H

//cek TOV2 flag

73
while(!(TIFR&0x40)); //tunggu sampai flag TOV2 (overflow)

TIFR&=0x40; //clear flag TOV2 dengan menulis logika '1'

void main (void)

PORTC=0x00;

DDRC=0x00;

PORTA=0x00; //PA0 sebagai output

DDRA=0x01;

// Inisialisasi Timer/Counter2 untuk waktu overflow

// 20ms(50Hz)

//Sumber clock : system clock (kristal)

//Nilai clock : system clock/1024 (clock prescale)

TCCR2=0x07;

ASSR=0x00;

while(1)

if (PINC.0==0)

i=45;

putar_servo();

if (PINC.1==0)

i=125;

putar_servo();
74
}

if (PINC.2==0)

i=205;

putar_servo();

Tugas

Buatlah program seperti contoh program 1 dengan menggunakan 5 push button untuk memilih
posisi motor servo. Setiap push button mewakili posisi servo berada pada 00, 450,900, 1350, dan
1800. Push button pertama (terhubung pada pin PC0) digunakan untuk posisi motor servo pada
full CW (1800), push button kedua (terhubung pada pin PC1) untuk posisi 1350, …, dan
seterusnya sampai push button kelima (terhubung pada pin PC4) untuk posisi pada full CCW
(00).

75
JOB 14

APLIKASI USART

Tujuan pratikum:

Setelah melakukan pratikum pengontrolan motor stepper ini, mahasiswa dapat :

1. Mampu memahami cara melakukan inisialisasi pada komunikasi serial USART


mikrokontroler
2. Mampu membuat program untuk mengirimkan suatu karakter dari mikrokontroler
AVR Atmega8535 ke komputer
3. Mampu membuat program untuk menerima suatu karakter dari computer

Landasan Teori
Pada Mikrokontroler AVR ATmega8535 mempunyai pinI/O (PD0,PD1,da, PB0) untuk
komunikasi serial USART (Universal Syncronous Asyncronous Receiver and Transmitter).
Pada AVR mendukung komunikasi serial secara full duplex yang berarti dapat dilakukan
komunikasi searah yaitu menerima dan mengirimkan data pada waktu bersamaan.

Komunikasi serial USART mempunyai format frame dalam pengiriman atau


penerimaan data seperti terlihat pada gambar 14.1

Gambar 14.1 Format Frame Serial

Keterangan:

- St=Start Bit. Sinyal start bit (selalu berlogika 0) digunakan untuk memulai
komunikasi serial USART.
- [n]: data bit (0 s/d 8). Setelah sinyal start, dikirimkan data secara bit per-bit mulai
dari LSB data bit sampai MSB data bit
- P : Parity bit (dapat parity ganjil atau genap). Parity bit dapat digunakan untuk
mengetahui bahwa data yang dikirimkan benar/salah
- Sp : Stop Bit (selalu berlogika 1)
- IDLE : Tidak ada pengiriman data pada saluran komunikasi (TXD atau RXD).
Logika untuk IDLE harus 1
76
Pada gambar 11.2 menampilkan contoh pengiriman data 41H melalui USART dengan
format frame : satu start bit, 8 data bit, parity dan satu stop bit.

Gambar 14.2 Frame Pengiriman Data 41H Melalui USART

Pada Mikrokontroler ini untuk proses mengirimkan atau membaca karakter terlebih
dahulu disimpan di register I/O UDR.

Komunikasi serial USART antara mikrokontroler dan komputer menggunakan level


sinyal yang berbeda, yaitu mikrtokontroler menggunakan level sinyal TTL
(penggunaan tegangan antara 0V sampai dengan 5V) dan komputer menggunakan
level sinyal RS232 (tegangan antara -15V sampai dengan 15V) sehingga diperlukan
media penghubung antara kedua level sinyal ini. Media tersebut adalah rangkaian
max232 yang merubah sinyal TTL ke RS232 maupun sebaliknya, seperti terlihat pada
gambar 14.3 . Gambar 14.3 merupakan skema rangkaian komunikasi serial USART.

Gambar 14.3. Rangkaian komunikasi serial USART

Pada komunikasi serial asyncronous yang perlu diperhatikan adalah baudrate yang
digunakan untuk mesampling bit data yang dikirim atau diterima, sehingga besar
baudrate antara kedua modul (mikrokontroler dan komputer) harus sama karena jika
berbeda akan mengakibatkan kesalahan penerimaan data. Baudrate yang sering
digunakan dalam komunikasi ini adalah sebesar 9600 bps.

77
Langkah Kerja

1. Buatlah program pada CodeVision AVR


2. Ketiklah program pada Editor.c, kemudian simpan.

Program1 mengirimkan karakter “A” dengan menggunakan fungsi putchar dan


mengirimkan karakter “B” dengan menggunakan register I/O UDR ke komputer dengan
menggunakan aplikasi terminal)

#include <mega8535.h>

#include <stdio.h>

void main (void)

// Inisialisasi USART

//Format frame :8 data, 1 Stop bit, No Parity

//USART Receiver : on (enable)

//USART mode : Asynchronous

UCSRA=0x00;

UCSRB=0x18;

UCSRC=0x86;

UBRRH=0x00; // USART baudrate :9600 bps

UBRRL=0x19; // Untuk kristal 4MHz

putchar('A'); //Kirim karakter ‘A’ ke USART

UDR='B'; //Kirim karakter ‘B’ ke USART

3. Compile program dengan menekan tombol F9 (Compile) atau melalui menu


project kemudian pilih Compile.
4. Hubungkan kabel serial dengan perangkat USART (DB9) pada modul mikrokontroler
dengan komputer.

78
5. Ketikkan Program2 berikut pada Editor.c, kemudian simpan.
Program2 mengirimkan kata dengan 3 metode yang berbeda
#include <mega8535.h>
#include <string.h>
#include <stdio.h>
flash unsigned char string1[]={"Komunikasi serial USART"};
flash unsigned char string2[]={"Menggunakan Mikrokontroler"};
flash unsigned char string3[]={"AVR ATMEGA8535"};

void main (void)


{
unsigned char i;
// Inisialisasi USART
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;

UBRRH=0x00; // USART baudrate :9600 bps


UBRRL=0x19; // Untuk kristal 4MHz

for (i=0;i<= strlenf(string1)-1;i++)


{
UDR=string1[i];
while (UCSRA.5!=1); //tunggu sampai UDR siap
//menerima data baru
//bit ke 5 dari UCSRA adalah UDRE flag
}

for (i=0;i<= strlenf(string2)-1;i++)


{
putchar(string2[i]);
}

putsf(string3);
}
6. Compile dan download program ke modul. Amati pada layar Komputer
7. Tulis Program berikut

79
Program3 Menampilkan Kiriman Karakter dari Komputer ke LCD

#include <mega8535.h>

#include <delay.h>

//Definisi pin-pin LCD

#define RS PORTD.5 //Setiap kata RS diganti dengan PORTD.5

#define RW PORTD.6

#define E PORTD.7

#define PORT_DATA PORTA //PORTA sebagai port bidirectional

#define DDR_DATA DDRA // Konfigurasi input/output

#define PIN_DATA PINA

unsigned char dataLCD;

void kirim_perintah_lcd (void)

DDR_DATA=0xFF; //sebagai ouput

RS=0;

RW=0;

E=1; //Sinyal chip enable LCD

PORT_DATA =dataLCD;

E=0;

void tulis_data_ram_lcd (void)

DDR_DATA=0xFF;

RS=1;

RW=0;

80
E=1;

PORT_DATA=dataLCD;

E=0;

//Prosedur untuk membaca busy flag LCD

void lcd_ready (void)

dataLCD=0x80;

while (dataLCD & 0x80) //jika busy flag=”1” maka

{ //baca busy flag sampai “0”

DDR_DATA=0x00; //sebagai input

PORT_DATA=0x00; //matikan internal pullup

RS=0;

RW=1;

E=1;

#asm("nop"); //sinkronisasi input pin

dataLCD=PIN_DATA;

E=0;

//Inisialisasi LCD

void init_lcd (void)

delay_ms(20); //tunda ± 15ms

dataLCD=0x30;

81
kirim_perintah_lcd();

delay_ms(5);

dataLCD=0x30;

kirim_perintah_lcd();

delay_us(150);

dataLCD=0x30;

kirim_perintah_lcd();

lcd_ready();

delay_us(50);

dataLCD=0x38; //mematikan layar

kirim_perintah_lcd();

lcd_ready();

dataLCD=0x04; //mematikan layar

kirim_perintah_lcd();

lcd_ready();

dataLCD=0x01; //mengosongkan layar

kirim_perintah_lcd();

lcd_ready();

dataLCD=0x06; //enty mode set:increment&no

//display shift

kirim_perintah_lcd();

lcd_ready();

dataLCD=0x0C; //Display on, Cursor Off dan Blink

82
//OFF

kirim_perintah_lcd();

lcd_ready();

void main (void)

unsigned char i;

DDRD=0xFF;

PORTD=0x1C;

init_lcd();

//Inisialisasi USART

UCSRA=0x00;

UCSRB=0x18;

UCSRC=0x86;

UBRRH=0x00; // USART baudrate :9600 bps

UBRRL=0x19; // Untuk kristal 4MHz

i=0;

while (1)

while (UCSRA.7) //Cek data baru

{//Jika UCSRA.1 = 1 berarti data belum

//terbaca

dataLCD=UDR;

83
tulis_data_ram_lcd();

lcd_ready();

i++;

if (i==8) //jika sudah 8 karakter

//tertampil maka kembali ke baris 1

dataLCD=0x80;

kirim_perintah_lcd();

lcd_ready();

i=0;

Tugas
Buat program untuk menampilkan nama dan no BP anda di komputer!

84

Anda mungkin juga menyukai