View
158
Download
26
Category
Preview:
DESCRIPTION
semester 6
Citation preview
PRAKTIKUM MIKROPROSESSOR DAN TEKNIK ANTARMUKA
PTI-494
PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA
PETUNJUK PRAKTIKUM
DYAH LESTARI
LABORATORIUM MIKROPROSESSOR
JURUSAN TEKNIK ELEKTRO-FAKULTAS TEKNIK
UNIVERSITAS NEGERI MALANG
2012
PRAKTIKUM MIKROPROSESSOR DAN TEKNIK ANTARMUKA
PTI-494
PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA
PETUNJUK PRAKTIKUM
Dosen Pembina
Dyah Lestari
Asisten Praktikum
Daniel Wijaya
Frebu Trilangga
Ahmad Ganjar Baiquni
Ian Hadinata
LABORATORIUM MIKROPROSESSOR
JURUSAN TEKNIK ELEKTRO-FAKULTAS TEKNIK
UNIVERSITAS NEGERI MALANG
2012
i
KATA PENGANTAR
Puji syukur ke hadirat Tuhan YME, perbaikan-perbaikan petunjuk
praktikum yang sebelumnya merupakan salah satu titik lemah prodi telah selesai.
Perbaikan yang telah dilakukan harus menjadi satu sistem perbaikan yang
berkelanjutan.
Perubahan yang dilakukan dalam penyusunan materi Petunjuk Praktikum
ini dari Petunjuk Praktikum tahun lalu merupakan perubahan atau perbaikan
layout serta penambahan tugas-tugas yang bersifat eksplorasi.
Pada kesempatan ini, kami ingin menyampaikan terima kasih yang besar-
besarnya pada semua pihak yang telah terlibat dalam penyusunan petunjuk
praktikum ini. Secara khusus untuk dosen pembina Praktikum Mikroprosessor
dan Teknik Antarmuka, Ibu Dyah Lestari, yang sudah memberikan tenaga, pikiran
dan waktunya untuk perbaikan praktikum dalam Program Studi S1 Pendidikan
Teknik Informatika ini. Ucapan terima kasih juga disampaikan untuk dukungan
rekan-rekan teknisi dan asisten praktikum di Laboratorium Mikroprosessor. Akhir
kata, semoga semua usaha yang telah dilakukan berkontribusi pada
dihasilkannya lulusan Program Studi S1 Pendidikan Teknik Informatika yang
berkompeten.
Malang, September 2012
Tim Penyusun
ii
DAFTAR ISI
Halaman KATA PENGANTAR ............................................................................................ i DAFTAR ISI ........................................................................................................ ii MODUL I ANTARMUKA MIKROKONTROLLER DENGAN LED ....................... 1 MODUL II ANTARMUKA MIKROKONTROLLER DENGAN TOGGLE SWITCH . 6 MODUL III ANTARMUKA MIKROKONTROLLER DENGAN SEVEN SEGMENT . 10 MODUL IV ANTARMUKA MIKROKONTROLLER DENGAN KEYPAD ............... 15 MODUL V ANTARMUKA MIKROKONTROLLER DENGAN LCD ...................... 20 MODUL VI MENGGUNAKAN ANALOG TO DIGITAL CONVERTER (ADC)
DALAM MIKROKONTROLLER ATMEGA8535 .............................. 26 MODUL VII MENGGUNAKAN INTERRUPT DALAM MIKROKONTROLLER
ATMEGA8535 ............................................................................. 34 MODUL VIII MENGGUNAKAN TIMER, COUNTER dan PWM DALAM MIKRO-
KONTROLLER ATMEGA8535 ...................................................... 39 DAFTAR RUJUKAN ........................................................................................... 49
1
MODUL I
ANTARMUKA MIKROKONTROLER DENGAN LED
TUJUAN
Mengetahui dan memahami cara mengantarmukakan mikrokontroler dengan
rangkaian LED.
Mengetahui dan memahami bagaimana memrogram mikrokontroler untuk
menyalakan LED.
LED
Sebuah LED (Light Emitting Diode) adalah sebuah sumber cahaya yang terbuat dari
semikonduktor. Biasanya LED digunakan sebagai lampu indikator dalam beberapa piranti,
dan mulai banyak digunakan sebagai penerangan/lampu. Gambar 1 memperlihatkan bentuk
fisik LED dan simbol rangkaiannya.
(a) Bentuk fisik LED (b) Simbol elektronik
Untuk menyalakan sebuah LED perlu
rangkaian tambahan yang dapat dilihat pada
gambar disamping. Rangkaian tersebut berupa
sebuah transistor yang difungsikan sebagai
saklar dan dua buah resistor untuk pembatas
arus. Dalam modul I/O yang dipakai dalam
praktikum, kedelapan rangkaian LED tersebut
dihubungkan ke sebuah soket jumper bernama
OUTPUT.
2
PERINTAH DASAR MENGELUARKAN DATA
Sebelum mulai menulis program dengan bahasa C, perlu diketahui bahwa
mikrokontroler ATmega8535 perlu diset isi register DDR dan PORT agar bisa digunakan
sebagaimana mestinya, seperti yang terlihat dalam Tabel 1.
Tabel 1 Konfigurasi Pengaturan Port I/O
DDR bit = 1 DDR bit = 0
PORT bit = 1 Output ; High Input; R pull up
PORT bit = 0 Output; Low Input, Floating
Untuk mengirim data byte dalam bentuk bilangan desimal ke PORTX (X=A, B, C, D) digunakan
statement
PORTX = desimal; PORTB = 128;
Untuk mengirim data byte dalam bentuk bilangan biner ke PORTX (X=A, B, C, D) digunakan
statement
PORTX = 0bdata; PORTB = 0b10101010;
Untuk mengirim data per bit ke PORTX.Y (X=A, B, C, D, dan Y=0, 1, 2 , 3, 4, 5, 6, 7) digunakan
statement
PORTX.Y = data; PORTB.1 = 0;
Dimana data bisa berupa 0 atau 1.
ALAT DAN BAHAN YANG DIGUNAKAN
1 set PC/Laptop yang sudah berisi program Code Vision dan Khazama
1 buah catu daya DC +5V
1 buah multimeter
1 buah ISP Downloader AVR
1 buah sistem minimum AVR
1 buah I/O
1 buah kabel printer USB
1 buah kabel pita hitam
3
PROSEDUR
1. Rangkailah peralatan yang diperlukan seperti pada gambar dibawah. Hubungkan
soket jumper PORTB pada minimum system dengan soket jumper OUTPUT pada I/O.
I/OISP Downloader
Kabel USBKabel
downloader Minimum
system AVR
Kabel pita
hitam
Catu Daya + 5V
2. Buka program Code Vision AVR
3. Buatlah project baru dengan inisialisasi PORTA sebagai output (DDRA = FFH) dan
output value = 0 (PORTA=00H) sehingga pada program bagian inisialisasi PORTA
terlihat sebagai berikut:
PORTA=0x00;
DDRA=0xff;
4. Tambahkan file header
#include <delay.h>
5. Tuliskan dalam program utama sebagai berikut:
// Program LED1
PORTA=0x0f;
delay_ms(1000);
PORTA=0xf0;
delay_ms(1000);
6. Amati nyala LED dan gambarkan nyala LED tersebut.
7. Ulangi langkah 3-6 untuk program-program berikut:
//Program LED2
PORTA=0b00001111;
delay_ms(1000);
PORTA=0b11110000;
delay_ms(1000);
4
//Program LED3
PORTA=0x55;
delay_ms(1000);
PORTA=0xaa;
delay_ms(1000);
//Program LED4
PORTA=0b11100111;
delay_ms(1000);
PORTA=0b11011011;
delay_ms(1000);
PORTA=0b10111101;
delay_ms(1000);
PORTA=0b01111110;
delay_ms(1000);
PORTA=0b10111101;
delay_ms(1000);
PORTA=0b11011011;
delay_ms(1000);
//Program LED5
PORTA=0b00000001; PORTA.2=1;
delay_ms(1000);
PORTA=0b00000010; PORTA.1=1;
delay_ms(1000);
PORTA=0b00000100;
delay_ms(1000);
PORTA=0b00001000;
delay_ms(1000);
PORTA=0b00010000;
delay_ms(1000);
PORTA=0b00100000;
delay_ms(1000);
PORTA=0b01000000;
delay_ms(1000);
PORTA=0b10000000;
delay_ms(1000);
5
DATA HASIL PERCOBAAN
1. Tampilan nyala LED Program LED1
2. Tampilan nyala LED Program LED2
3. Tampilan nyala LED Program LED3
4. Tampilan nyala LED Program LED4
5. Tampilan nyala LED Program LED5
ANALISA DATA
1. Analisa Program LED1 – LED5!
2. Apakah persamaan dan perbedaan PROGRAM LED1 dan PROGRAM LED2?
3. Instruksi apa yang digunakan untuk mengeluarkan data ke LED?
4. Mengapa ada jeda waktu sekitar 1 detik antara tampilan LED yang pertama dengan
yang berikutnya?
6
MODUL II
ANTARMUKA MIKROKONTROLER DENGAN TOGGLE SWITCH
TUJUAN
Mengetahui dan memahami cara mengantarmukakan mikrokontroler dengan
rangkaian input saklar toggle.
Mengetahui dan memahami bagaimana memrogram mikrokontroler untuk membaca
data input dari saklar toggle.
SAKLAR TOGGLE
Saklar toggle adalah salah satu saklar elektrik yang digerakkan secara manual oleh batang
mekanik. Saklar toggle tersedia dalam berbagai bentuk dan ukuran, serta digunakan dalam
berbagai aplikasi. Gambar dibawah memperlihatkan bentuk fisik dan symbol saklar toggle.
(b) Salah satu toggle switch (b) Simbol elektronik
Dalam modul I/O yang dipakai dalam
praktikum, saklar toggle yang digunakan diberi
rangkaian tambahan berupa rangkaian LED
untuk melihat secara langsung logika yang ada
pada saklar. Rangkaian LED sama dengan
rangkaian dalam Modul I. Kedelapan rangkaian
saklar tersebut dihubungkan ke sebuah soket
jumper bernama INPUT.
7
PERINTAH DASAR MEMBACA DATA
Sebelum membaca data, perlu dibuat deklarasi variabel untuk data yang dimasukkan.
Data bisa bertipe char. Deklarasi variabel diletakkan di variabel lokal pada main
program.
void main (void)
{
//Declare your local variables here
unsigned char data_in;
…
Untuk membaca data byte ke PORTX (X=A, B, C, D) digunakan statement
data_in = PINX;
contoh: data_in = PINB;
Untuk membaca data bit ke PORTX.Y (X=A, B, C, D dan Y=0, 1, 2 , 3, 4, 5, 6, 7)
digunakan statement
data_in = PINX.Y;
contoh: data_in = PINB.1;
ALAT DAN BAHAN YANG DIGUNAKAN
1 set PC/Laptop yang sudah berisi program Code Vision dan Khazama
1 buah catu daya DC +5V
1 buah multimeter
1 buah ISP Downloader AVR
1 buah sistem minimum AVR
1 buah I/O
1 buah kabel printer USB
2 buah kabel pita hitam
PROSEDUR
1. Hubungkan soket jumper PORTB pada minimum system dengan soket jumper
OUTPUT pada I/O dan soket jumper PORTC pada minimum system dengan soket
jumper INPUT pada I/O
2. Buka program Code Vision AVR
8
3. Buatlah project baru dengan inisialisasi PORTB sebagai output (DDRB = FFH) dan
output value = 0 (PORTB=00H), dan PORTC sebagai input (DDRC = 00H) dan resistor
pullup dihubungkan (PORTC=FFH) sehingga pada program bagian inisialisasi PORTB
dan PORTC terlihat sebagai berikut:
PORTB=0x00;
DDRB=0xff; //portb sebagai output, 0b11111111, nilai awal 0
PORTC=0xff;
DDRC=0x00; // portc sebagai input, 0b00000000, pull up
4. Tambahkan deklarasi variabel lokal dalam program utama
unsigned char data_in;
5. Tuliskan dalam program utama sebagai berikut:
// Program Saklar1
data_in=PINC; //baca saklar di PORTC
PORTB=data_in; //tampilkan logika saklar ke LED di PORTB
6. Pindahkan saklar sesuai tabel 2.1 dibawah, amati dan catat nyala LED.
Tabel 2.1 Program Saklar1
No. Saklar LED
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
1 0 0 0 0 0 0 0 1
2 0 0 0 0 0 0 1 1
3 0 0 0 0 0 1 0 1
4 0 0 0 0 1 0 0 1
5 0 0 0 1 0 0 0 1
6 0 0 1 0 0 0 0 1
7 0 1 0 0 0 0 0 1
8 1 0 0 0 0 0 0 1
9 1 1 1 1 1 1 1 1
7. Ulangi langkah 3-4 untuk program berikut:
//Program Saklar2
data_in = PINC.0; // baca saklar bit ke 0
PORTB.7 = data_in; // tampilkan logika saklar pada LED bit ke 7
8. Pindah saklar sesuai tabel 3.1 dibawah, Amati dan catat nyala LED. Tabel 3.1 Program Saklar2
No. Saklar LED
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
1 0 0 0 0 0 0 0 1
2 0 0 0 0 0 0 1 1
3 0 0 0 0 0 1 0 0
4 0 0 0 0 1 0 0 1
5 0 0 0 1 0 0 0 0
6 0 0 1 0 0 0 0 1
7 0 1 0 0 0 0 0 0
9
9. Buat program untuk masing–masing algoritma berikut dengan menggunakan if :
a) Jika switch bit 0 berlogika 1 maka LED bit 4 menyala.
b) Jika switch bit 1 berlogika 1 maka LED bit 7 menyala.
10. Buat satu program untuk masing–masing algoritma berikut dengan menggunakan if-
else.
a) Jika switch bit 0 berlogika 1 maka LED bit 4 menyala.
b) Jika switch bit 1 berlogika 1 maka LED bit 7 menyala.
c) Jika switch bit 2 berlogika 1 maka LED menyala dengan konfigurasi
ON-OFF-ON-OFF-ON-OFF-ON-OFF (bit7-bit0).
d) Jika switch bit 3 berlogika 1 maka LED menyala dengan konfigurasi
OFF-ON-OFF-ON-OFF-ON-OFF-ON (bit7-bit0).
e) Jika switch bit 4 berlogika 1 maka LED menyala semua.
f) JIka switch bit 5 berlogika 1 maka LED mati semua.
g) Jika switch bit 6 berlogika 1 maka LED menyala berurutan mulai dari bit0 ke bit7
lalu kembali lagi ke bit0 dengan delay 1 detik
h) Jika switch bit 7 berlogika 1 maka LED akan menyala dengan nilai sama dengan
dua digit terakhir NIM anda.
DATA HASIL PERCOBAAN
1. Tabel 2.1
2. Tabel 3.1
3. Source code program pada percobaan langkah 9
4. Source code program pada percobaan langkah 10
ANALISA DATA
1. Analisa Program Saklar1 dan Saklar2
2. Instruksi apa yang digunakan untuk membaca data input?
3. Apakah perbedaan program yang menggunakan if dan if-else?
10
MODUL III
ANTARMUKA MIKROKONTROLER DENGAN SEVEN SEGMEN
TUJUAN
Mengetahui dan memahami cara mengantarmukakan mikrokontroler dengan
rangkaian seven segment.
Mengetahui dan memahami bagaimana memrogram mikrokontroler untuk
menampilkan karakter ke seven segment.
SEVEN SEGMENT
Penampil seven segment adalah sebuah piranti penampil untuk menampilkan angka
desimal. Penampil seven segment banyak digunakan dalam jam digital, meter elektronik,
dan piranti elektronik yang lain. Gambar 3.1 memperlihatkan bentuk fisik dan layout dasar
penampil seven segment. Penampil seven segment terdiri atas 8 LED yang disusun seperti
dalam Gambar 3.1(b). Setiap LED diidentifikasi sebagai huruf a, b, c, d, e, f, g, yang dimulai
dari huruf a di sebelah atas. Di sebelah kanan terdapat satu LED tambahan yang digunakan
sebagai koma (dp).
(a) Penampil seven segment (b) Layout LED
Gambar 3.1 Seven segment
Untuk menampilkan sebuah karakter, minimal 2 LED harus dinyalakan. Tabel 3.1
memperlihatkan kode heksadesimal untuk menampilkan angka 0 sampai 9.
Dalam modul I/O yang dipakai dalam praktikum, seven segment yang digunakan ada
2 buah, semuanya bertipe common anoda. Kedua seven segment tersebut dimultipleks
sehingga data diperoleh dari satu kaki (D0-D7), sedangkan untuk menyalakannya digunakan
kaki kontrol yang berbeda (DO1 dan DO2). Rangkaian lengkap seven segment dapat dilihat
dalam Gambar 3.2.
11
Tabel 3.1 Kode heksadesimal untuk angka 0-9
Digit gfedcba g f e d c b a
0 0x3F off on on on on on on
1 0x06 off off off off on on off
2 0x5B on off on on off on on
3 0x4F on off off on on on on
4 0x66 on on off off on on off
5 0x6D on on off on on off on
6 0x7D on on on on on off on
7 0x07 off off off off on on on
8 0x7F on on on on on on on
9 0x6F on on off on on on on
Gambar 3.2 Rangkaian penampil seven segment
Dalam Gambar 3.2, kaki a, b, c, d, e, f, g, dp dihubungkan ke soket jumper DATA 7S,
sedangkan kaki kontrol (DO1 dan DO2 dihubungkan dengan soket jumper I/P S KEY.
12
ALAT DAN BAHAN YANG DIGUNAKAN
1 set PC/Laptop yang sudah berisi program Code Vision dan Khazama
1 buah catu daya DC +5V
1 buah multimeter
1 buah ISP Downloader AVR
1 buah sistem minimum AVR
1 buah I/O
1 buah kabel printer USB
2 buah kabel pita hitam
PROSEDUR
1. Hubungkan soket jumper PORTB pada minimum system dengan soket jumper
DATA7S pada I/O dan soket jumper PORTC pada minimum system dengan soket
jumper I/P S KEY pada I/O.
2. Buka program Code Vision AVR
3. Buatlah project baru dengan inisialisasi PORTB sebagai output (DDRB = FFH) dan
output value = 0 (PORTB=00H), dan PORTC.0-PORTC.3 sebagai input, PORTC.4-
PORTC.7 sebagai output (DDRC = F0H) dan (PORTC=F0H) sehingga pada program
bagian inisialisasi PORTB dan PORTC terlihat sebagai berikut:
PORTB=0x00;
DDRB=0xff; //portb sebagai output, 0b11111111
//untuk data 7s
PORTC=0xf0;
DDRC=0xf0; //portc sebagai input dan output, 0b11110000
//untuk kontrol DO1, DO2
4. Tuliskan dalam program utama sebagai berikut:
PROGRAM SEGMEN1
//Menampilkan angka 8 pada seven segmen sebelah kanan.
while (1)
{
PORTC.7=1; //nonaktifkan seven segment kiri
PORTC.6=0; //aktifkan seven segmen kanan
PORTB=0x7f; //tampilkan data angka 8
delay_ms(10);
}
13
5. Amati nyala seven segment.
6. Ulangi langkah 3-5 untuk program berikut:
PROGRAM SEGMEN2
//Menampilkan angka 4 pada seven segmen sebelah kiri.
while (1)
{
PORTC.7=0; //aktifkan seven segment kiri
PORTC.6=1; //nonaktifkan seven segmen kanan
PORTB=0x66; //tampilkan data angka 4
delay_ms(10);
}
7. Gabungkan kedua program di atas dan lihat nyala seven segmen.
8. Ubah nilai delay untuk masing-masing seven segment menjadi 100 ms dan amati
tampilan seven segmen.
9. Ulangi langkah 3-5 untuk program berikut:
PROGRAM SEGMEN3
//Membuat counter 0-9 di segmen sebelah kanan
// Declare your global variables here
unsigned char bil[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // Declare your local variables here
int kanan;
while (1)
{
// Place your code here
kanan=0;
for (kanan=0;kanan<10;kanan++)
{
PORTC.7=1;
PORTC.6=0;
PORTB=bil[kanan];
delay_ms(1000);
}
}
10. Ubah nilai delay untuk program SEGMEN3 menjadi 100 ms dan amati tampilan seven
segmen.
11. Buat program SEGMEN4 untuk menampilkan 00-99 di kedua seven segmen sehingga
kedua angka tampil bersamaan.
12. Buat program SEGMEN5 untuk menampilkan 00 hingga dua digit terakhir NIM anda
(counter up) lalu menghitung mundur dari dua digit NIM terakhir anda ke 00 (counter
down). (kedua seven segment menyala bersamaan).
14
DATA HASIL PERCOBAAN
5. Program SEGMEN1
6. Program SEGMEN2
7. Gabungan SEGMEN1 dan SEGMEN2 delay 100ms
8. Program SEGMEN3
9. Program SEGMEN3 delay 100ms
10. Source code Program SEGMEN4
11. Source code Program SEGMEN5
ANALISA DATA
1. Analisa Program SEGMEN1 sampai SEGMEN5
2. Instruksi apa yang digunakan untuk mengeluarkan data ke seven segment?
3. Instruksi apa yang digunakan untuk mengontrol nyala seven segment?
4. Jika nilai delay pada Gabungan Program SEGMEN1 dan SEGMEN2 diperbesar, apa
yang terjadi pada tampilan seven segment?
5. Jika nilai delay pada program SEGMEN3 diperkecil, apa yang terjadi pada tampilan
seven segment?
15
MODUL IV
ANTARMUKA MIKROKONTROLER DENGAN KEYPAD
TUJUAN
Mengetahui dan memahami cara mengantarmukakan mikrokontroler dengan
keypad.
Mengetahui dan memahami bagaimana memrogram mikrokontroler untuk membaca
masukan dari keypad.
KEYPAD
Keypad merupakan tombol push button yang disusun sebagai baris dan kolom sehingga
membentuk matriks. Keypad banyak digunakan sebagai piranti masukan dalam piranti
elektronik. Gambar 4.1 memperlihatkan bentuk fisik keypad. Keypad ini memiliki 16 tombol
yaitu 0,1,2,3,4,5,6,7,8,9,A,B,C, D,* dan #.
Gambar 4.1 Keypad 4x4
Dalam modul I/O yang di Dalam gambar 4.2 keypad dihubungkan ke PORTB
mikrokontroler dengan posisi baris (b1-b4) terhubung ke PORTB.0-PORTB.3 dan posisi kolom
(c1-c4) terhubung ke PORTB.4-PORTB.7. Sedangkan untuk mengetahui tombol apa yang
ditekan oleh user, 8 buah LED yang terdapat dalam MODUL I/O dihubungkan ke PORTC.
Gambar 4.2
Rangkaian keypad dan LED
16
ALAT DAN BAHAN YANG DIGUNAKAN
1 set PC/Laptop yang sudah berisi program Code Vision dan Khazama
1 buah catu daya DC +5V
1 buah multimeter
1 buah ISP Downloader AVR
1 buah sistem minimum AVR
1 buah modul I/O
1 buah keypad
1 buah kabel printer USB
2 buah kabel pita hitam
PROSEDUR
1. Hubungkan soket jumper PORTB pada minimum system dengan soket jumper
KEYPAD dan soket jumper PORTC pada minimum system dengan soket jumper
OUTPUT pada I/O.
2. Buka program Code Vision AVR
3. Buatlah project baru dengan inisialisasi PORTB.0-PORTB.3 sebagai output dengan
kondisi awal berlogika HIGH dan PORTB.4-PORTB.7 sebagai input dengan pull-up
(DDRB = 0FH dan PORTB=FFH), serta PORTC sebagai output dan kondisi awal LOW
(DDRC = FFH dan PORTC=00H), sehingga pada program bagian inisialisasi PORTB dan
PORTC terlihat sebagai berikut:
PORTB=0xff; //0b11111111
DDRB=0x0f; //PORTB sebagai input dan output, 0b00001111
PORTC=0x00;
DDRC=0xff; //PORTC sebagai output
4. Deklarasikan fungsi keypad() dengan bilangan yang dikembalikan ke program utama
sebagai bilangan integer pada global variabel.
unsigned char keypad();
5. Tuliskan script berikut dalam program utama:
while (1)
{
PORTC=keypad();
//menampilkan hasil yang dikembalikan oleh fungsi ke LED
}
17
6. Tambahkan fungsi berikut di bawah program utama (di luar fungsi void) :
unsigned char keypad()
{
PORTB = 0b11111110; //aktifkan baris1 (memberi logika 0 ke baris1) delay_ms(100);
if(PINB.7==0) return (10);
if(PINB.6==0) return (3);
if(PINB.5==0) return (2);
if(PINB.4==0) return (1);
//========================
PORTB = 0b11111101; //aktifkan baris2 delay_ms(100);
if(PINB.7==0) return (11);
if(PINB.6==0) return (6);
if(PINB.5==0) return (5);
if(PINB.4==0) return (4);
//========================
PORTB = 0b11111011; //aktifkan baris3 delay_ms(100);
if(PINB.7==0) return (12);
if(PINB.6==0) return (9);
if(PINB.5==0) return (8);
if(PINB.4==0) return (7);
//========================
PORTB = 0b11110111; //aktifkan baris4 delay_ms(100);
if(PINB.7==0) return (13);
if(PINB.6==0) return (15);
if(PINB.5==0) return (0);
if(PINB.4==0) return (14);
}
7. Tekan tombol keypad, amati nyala LED dan isi Tabel 4.1.
8. Ubah program utama untuk algoritma berikut:
a. Jika tombol 0 ditekan semua LED mati.
b. Jika tombol 1 ditekan semua LED menyala.
9. Buatlah satu program dengan algoritma sebagai berikut:
a. Jika tombol 0 ditekan LED bit 0 menyala.
b. Jika tombol 1 ditekan LED bit 1 menyala.
c. Jika tombol 2 ditekan LED bit 2 menyala.
d. Jika tombol 3 ditekan LED bit 3 menyala.
e. Jika tombol 4 ditekan LED bit 4 menyala.
f. Jika tombol 5 ditekan LED bit 5 menyala.
g. Jika tombol 6 ditekan LED bit 6 menyala.
h. Jika tombol 7 ditekan LED bit 7 menyala.
18
i. Jika tombol 8 ditekan LED menyala sesuai gambar dibawah ini ber urutan dari atas kebawah dengan delay 1 detik. (Gunakan perulangan for ...)
j. Jika tombol 9 ditekan LED menyala sesuai gambar dibawah ini ber urutan dari
atas kebawah dengan delay 1 detik. (Gunakan perulangan for ...)
k. Jika tombol A ditekan LED bit 0,2,4,6 menyala dan bit 1,3,5,7 mati.
l. Jika tombol B ditekan LED bit 0,2,4,6, mati dan bit 1,3,5,7 menyala.
m. Jika tombol C ditekan ditekan algoritma k dan l dilaksanakan bergantian dengan
delay 1 detik.
n. Jika tombol D ditekan ditekan maka LED menyala menunjukkan nilai biner dua
digit terakhir NIM anda.
o. Jika tombol * semua LED mati.
p. Jika tombol # semua LED menyala.
LED Menyala
LED Mati
LED Menyala
LED Mati
19
DATA HASIL PERCOBAAN
1. Tabel 4.1
2. Source code program pada langkah percobaan nomor 8
3. Source code program pada langkah percobaan nomor 9
ANALISA DATA
1. Analisa hasil percobaan pada tabel 4.1!
2. Instruksi apa yang digunakan untuk mebaca tombol keypad yang ditekan?
3. Instruksi yang digunakan untuk menyalakan LED sesuai keypad yang ditekan?
4. Buatlah flowchart instruksi pada nomor 3 dan jelaskan algoritmanya!
No Tombol keypad yang
ditekan Tampilan LED Nilai tampilan LED (dalam desimal)
1 0 0
2 1 1
3 2 2
4 3 3
5 4 4
6 5 5
7 6 6
8 7 7
9 8 8
10 9 9
11 A 10
12 B 11
13 C 12
14 D 13
15 * 14
16 # 15
20
MODUL V
ANTARMUKA MIKROKONTROLER DENGAN PENAMPIL LCD (Liquid Crystal Display)
TUJUAN
Mengetahui dan memahami cara mengantarmukakan mikrokontroler dengan modul
penampil LCD.
Mengetahui dan memahami bagaimana memrogram mikrokontroler untuk
menampilkan karakter ke penampil LCD.
LCD M1632
Modul LCD M1632 seperti dalam Gambar 5.1 merupakan modul LCD dengan tampilan
16 x 2 baris dengan konsumsi daya yang rendah. Modul ini dilengkapi dengan mikrokontroler
yang didisain khusus untuk mengendalikan LCD. Mikrokontroler HD44780 buatan Hitachi
yang berfungsi sebagai pengendali LCD ini mempunyai CGROM (Character Generator Read
Only Memory), CGRAM (Character Generator Random Access Memory), dan DDRAM
(Display Data Random Access Memory).
Gambar 5.1 Modul LCD M1632
LCD ini memiliki 16 kaki, sebagaimana ditunjukkan dalam Tabel 6.1. Tabel 5.1 Konfigurasi Pin LCD M1632
No Kaki Deskripsi
1 Vss 0V (GND)
2 Vcc +5V
3 VLC LCD Contrast Voltage
4 RS Register Select; H: Data Input; L: Instruction Input
5 RD H:Read; L: Write
6 EN Enable Signal
7 D0 Data Bus 0
8 D1 Data Bus 1
9 D2 Data Bus 2
10 D3 Data Bus 3
11 D4 Data Bus 4
12 D5 Data Bus 5
13 D6 Data Bus 6
14 D7 Data Bus 7
15 V+BL Positive Backlight Voltage
16 V-BL Negative Backlight Voltage
21
DDRAM
DDRAM adalah merupakan memori tempat karakter yang ditampilkan berada.
Contoh, untuk karakter ‘A’ atau 41H yang ditulis pada alamat 00, maka karakter tersebut
akan tampil pada baris pertama dan kolom pertama dari LCD. Apabila karakter tersebut
ditulis di alamat 40, maka karakter tersebut akan tampil pada baris kedua kolom
pertama dari LCD. Posisi ini ditunjukkan dalam Gambar 5.2.
Gambar 5.2 Posisi DDRAM
CGRAM
CGRAM adalah merupakan memori untuk menggambarkan pola sebuah karakter
di mana bentuk dari karakter dapat diubah-ubah sesuai keinginan. Namun memori ini
akan hilang saat power supply tidak aktif, sehingga pola karakter akan hilang.
CGROM
CGROM adalah merupakan memori untuk menggambarkan pola sebuah karakter
di mana pola tersebut sudah ditentukan secara permanen dari HD44780 sehingga
pengguna tidak dapat mengubah lagi. Namun karena ROM bersifat permanen, maka
pola karakter tersebut tidak akan hilang walaupun power supply tidak aktif. Pada
Gambar 6.3, tampak terlihat pola-pola karakter yang tersimpan dalam lokasi-lokasi
tertentu dalam CGROM. Pada saat HD44780 akan menampilkan data 41H ke DDRAM,
maka HD44780 akan mengambil data di alamat 41H (0100 0001) yang ada pada CGROM
yaitu pola karakter A.
Dalam Gambar 5.4 modul LCD dihubungkan ke PORTB mikrokontroler dimana kaki RS,
RD, EN terhubung ke PORTB.0-PORTB.2 dan D4, D5, D6, D7 terhubung ke PORTB.4-PORTB.7.
22
Gambar 5.3 pola Karakter dalam CGROM
Gambar 5.4 Rangkaian LCD
23
ALAT DAN BAHAN YANG DIGUNAKAN
1 set PC/Laptop yang sudah berisi program Code Vision dan Khazama
1 buah catu daya DC +5V
1 buah multimeter
1 buah ISP Downloader AVR
1 buah sistem minimum AVR
1 buah LCD
1 buah kabel printer USB
PROSEDUR
1. Rangkailah peralatan yang diperlukan seperti dalam Gambar 6.5. Hubungkan soket
jumper PORTB pada minimum system dengan soket jumper pada LCD.
LCDISP Downloader
Kabel USBKabel
downloader Minimum
system AVR
Kabel LCD
Gambar 5.5 Rangkaian antarmuka mikrokontroler dengan LCD
2. Buka program Code Vision AVR
3. Buatlah project baru. Pada saat mengeset chip dan clock, set juga bagian LCD seperti
Gambar 5.6. Kemudian simpanlah file tersebut.
Gambar 5.6 Setting LCD
24
4. Blok berikut merupakan bagian inisialisasi LCD pada awal program.
// LCD module initialization lcd_init(16);
5. Tuliskan script berikut dalam program utama:
while (1)
{
lcd_gotoxy(0,0); //menempatkan kursor di kolom 0 baris 0
lcd_putchar(0x41); //menampilkan string ‘A’
}
6. Tambahkan delay dalam langkah 6:
while (1)
{
lcd_gotoxy(0,0); //menempatkan kursor di kolom 0 baris 0
lcd_putchar(0x41);//menampilkan string ‘A’
delay_ms(1000);
lcd_clear();
lcd_gotoxy(0,1);
lcd_putchar(0x30);
delay_ms(1000);
}
7. Tuliskan script berikut dalam program utama:
while (1)
{
lcd_gotoxy(0,0);//menempatkan kursor di baris 0 kolom 0
lcd_putsf("Saya belajar");//menampilkan string “Saya belajar”
}
8. Ganti script pada langkah 8 menjadi seperti berikut:
while (1)
{
lcd_gotoxy(0,1); //menempatkan kursor di kolom 0 baris 1
lcd_putsf("Antarmuka LCD");//menampilkan string “Antarmuka LCD”
}
9. Gabungkan script pada langkah 8 dan 9 menjadi seperti berikut: while (1)
{
lcd_gotoxy(0,0); //menempatkan kursor di baris 0 kolom 0
lcd_putsf("Saya belajar");//menampilkan string “Saya belajar”
lcd_gotoxy(0,1);//menempatkan kursor di baris 1 kolom 0
lcd_putsf("Antarmuka LCD");//menampilkan string “Antarmuka LCD”
}
10. Buatlah tampilan nama anda berjalan dari kiri ke kanan pada baris 0 dan NIM anda
berjalan dari kanan ke kiri pada baris 1 (tampidlan di baris 0 dan 1 muncul secara
bersamaan).
11. Ubahlah nilai dalam lcd_init(16) menjadi lcd_init(40) dan lihat perbedaannya.
25
DATA HASIL PERCOBAAN
1. Tampilan LCD pada langkah percobaan nomor 6
2. Tampilan LCD pada langkah percobaan nomor 7
3. Tampilan LCD pada langkah percobaan nomor 8
4. Tampilan LCD pada langkah percobaan nomor 9
5. Tampilan LCD pada langkah percobaan nomor 10
6. Source code program pada langkah percobaan nomor 11
7. Tampilan LCD pada langkah percobaan nomor 12
ANALISA DATA
1. Analisa data hasil percobaan pada langkah percobaan nomor 6 sampai dengan nomor
10!
2. Jelaskan program anda pada langkah percobaan nomor 11!
3. Apakah fungsi sintaks lcd_init() dan jelaskan perbedaan antara menggunakan
lcd_init(16) menjadi lcd_init(40)?
26
MODUL VI
MENGGUNAKAN ANALOG TO DIGITAL CONVERTER (ADC)
DALAM MIKROKONTROLLER ATMEGA8535
TUJUAN
Mengetahui dan memahami cara menggunakan ADC yang ada di dalam
mikrokontroler.
Mengetahui dan memahami bagaimana memrogram mikrokontroler untuk
mengonversi data analog menjadi data digital.
ANALOG TO DIGITAL CONVERTER (ADC)
Penggunaan ADC sebagai pengonversi data analog menjadi data digital merupakan
sesuatu hal yang diperlukan jika data yang masuk ke dalam mikrokontroler, biasanya data
dari sensor berupa sinyal analog.
Fitur ADC dalam ATMega8535 adalah sebagai berikut:
Resolusi 10 bit.
Waktu konversi 65-260 μs.
Input 8 kanal.
Input ADC 0-5Vcc.
3 Mode pemilihan tegangan referensi.
Ada beberapa langkah yang harus dilakukan untuk inisialisasi ADC, yaitu penentuan
clock, tegangan referensi, format data output dan mode pembacaan. Inisialisasi ini dilakukan
pada register-register berikut:
ADMUX (ADC Multiplexer Selection Register)
ADMUX merupakan register yang mengatur tegangan referensi yang digunakan ADC,
format data output dan saluran ADC.
27
REFS0-1 (Reference Selection Bits)
REFS0-1 adalah bit-bit pengatur mode tegangan referensi ADC.
ADLAR (ADC Left Adjust Result)
ADLAR adalah bit keluaran ADC. Jika ADC telah selesai konversi, maka data ADC akan
diletakkan di 2 register, yaitu ADCH dan ADCL dengan format sesuai ADLAR.
Format data ADC jika ADLAR=0
Format data ADC jika ADLAR=1
28
MUX0-4 (Analog Channel and Gain Selection Bits)
MUX0-4 adalah bit-bit pemilih saluran pembacaan ADC.
ADCSRA (ADC Control and Status Register A)
ADCSRA adalah register 8 bit yang berfungsi untuk melakukan manajemen sinyal kontrol dan
status ADC.
ADEN (ADC Enable)
ADEN merupakan bit pengatur aktivasi ADC. Jika bernilai 1 maka ADC akan aktif.
29
ADCS (ADC Start Conversion)
ADCS merupakan bit penanda dimulainya konversi ADC. Selama konversi berlogika 1
dan akan berlogika 0 jika selesai konversi.
ADATE (ADC Auto Trigger Enable)
ADATE merupakan bit pengatur aktivasi picu otomatis. Jika bernilai 1 maka konversi
ADC akan dimulai pada saat tepi positif pada sinyal trigger yang digunakan.
ADIF (ADC Interrupt Flag)
ADIF merupakan bit penanda akhir konversi ADC. Jika bernilai 1 konversi ADC pada
suatu saluran telah selesai dan siap diakses.
ADIE (ADC Interrupt Enable)
ADIE merupakan bit pengatur aktivasi interupsi. Jika bernilai 1 maka interupsi
penandaan telah selesai. Konversi ADC diaktifkan.
ADPS0-2 (ADC Prescaler Select Bit)
ADPS0-2 merupakan bit pengatur clock ADC.
SFIOR (Special Function IO Register)
SFIOR adalah register 8 bit yang mengatur sumber pemicu ADC. Jika bit ADATE pada register
ADCSRA bernilai 0 maka ADTS0-2 tidak berfungsi.
30
Rangkaian yang digunakan untuk mempelajari ADC dapat dilihat dalam Gambar dibawah.
Rangkaian ini merupakan rangkaian pembagi tegangan dimana tegangan keluaran dapat
dihitung dengan rumus:
Vout = R2 x Vcc R1+R2
ALAT DAN BAHAN YANG DIGUNAKAN
1 set PC/Laptop yang sudah berisi program Code Vision dan Khazama
1 buah catu daya DC +5V
1 buah multimeter
1 buah ISP Downloader AVR
1 buah sistem minimum AVR
1 buah I/O
1 buah kabel printer USB
1 buah kabel pita hitam
1 buah potensiometer
31
PROSEDUR
1. Rangkailah peralatan yang diperlukan seperti dalam Gambar diatas. Hubungkan soket
jumper PORTC pada minimum system dengan soket jumper pada OUTPUT LED. Vout
pada rangkaian potensiometer dihubungkan pada PORTA.0 (ADC channel 0).
I/OISP Downloader
Kabel USBKabel
downloader Minimum
system AVR
Kabel hitam
Potensio
meter
2. Buka program Code Vision AVR
3. Buatlah project baru. Pada saat mengeset chip dan clock, set juga bagian PORTC
untuk LED dan ADC seperti Gambar 7.3. Kemudian simpanlah file tersebut.
Gambar 7.3 Setting LED dan ADC
4. Perhatikan blok program berikut. Arti dari blok instruksi tersebut adalah setting ADC
di PORTA dan inisialisasi ADC.
#define ADC_VREF_TYPE 0x60
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
32
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
// ADC initialization
// ADC Clock frequency: 31.250 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: Free Running
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA7;
SFIOR&=0x0F;
5. Blok berikut merupakan deklarasi variabel hasil konversi ADC.
// Declare your local variables here
unsigned char adcdt;
6. Tuliskan script berikut dalam program utama:
while (1)
{ // Place your code here adcdt=read_adc(0); //mengambil hasil konversi PORTC=adcdt; //ditampilkan ke LED } }
7. Ukur tegangan potensiometer (kaki tengah) sebesar 0-5V (sesuai tabel).
8. Lepas probe AVO Meter lalu perhatikan dan catat nyala LED dan konversi nilai dalam
desimal.
9. Hitung perhotungan nilai digital dalam desimal dengan rumus berikut:
Vdigital = Vukur / Vcc *255
Contoh: misal tegangan analog yang diukur 1 V, maka tegangan digital adalah:
V = 1/5 *255 = 51 desimal, atau 33H atau 00110011B
33
DATA HASIL PERCOBAAN
Tabel ADC
No Tegangan analog (0-5V)
Tampilan LED (bit7-bit0)
Nilai digital LED (decimal)
Nilai digital perhitungan (desimal)
1 0
2 0.5
3 1
4 1.5
5 2
6 2.5
7 3
8 3.5
9 4
10 4.5
11 5
ANALISA DATA
1. Analisa data hasil pada Tabel ADC
34
MODUL VII
MENGGUNAKAN INTERRUPT DALAM MIKROKONTROLLER ATMEGA8535
TUJUAN
Mengetahui dan memahami cara menggunakan INTERRUPT yang ada di dalam
mikrokontroler.
Mengetahui dan memahami bagaimana memrogram mikrokontroler untuk
menjalankan interupsi pada saat program utama dijalankan
INTERUPSI
Kondisi di mana pada saat program utama dieksekusi/dikerjakan oleh CPU kemudian
tiba-tiba berhenti untuk sementara waktu karena ada rutin lain yang harus ditangani terlebih
dahulu oleh CPU. Setelah selesai mengerjakan rutin tersebut, CPU kembali mengerjakan
instruksi pada program utama.
PORT yang berfungsi sebagai Interrupt
PORTD.2 (PD2) External Interrupt 0 Input (INT0)
PORTD.3 (PD3) External Interrupt 1 Input (INT1)
PORTB.2 (PB2) External Interrupt 2 Input (INT2)
Register-register Interrupt
35
a. MCU Control Register-MCUCR
b. MCU Control and Status Register-MCUCSR
ISC2 = 0, a falling edge on INT2 activates the interrupt
ISC2 = 1, a rising edge on INT2 activates the interrupt
Lebar pulsa minimum: 50 ns
c. Status Register-SREG
36
d. General Interrupt Control Register-GICR
Bit 7 - INT1:eksternal interrupt request 1 enable
Bit 6 – INT0 :eksternal interrupt request 0 enable
Bit 5 – INT2 : eksternal interrupt request 2 enable
e. General Interrupt Flag Register-GIFR
Bit 7 - INT1:eksternal interrupt flag 1 enable
Bit 6 – INT0 :eksternal interrupt flag 0 enable
Bit 5 – INT2 : eksternal interrupt flag 2 enable
ALAT DAN BAHAN YANG DIGUNAKAN
1 set PC/Laptop yang sudah berisi program Code Vision dan Khazama
1 buah catu daya DC +5V
1 buah multimeter
1 buah ISP Downloader AVR
1 buah sistem minimum AVR
1 buah I/O
1 buah kabel printer USB
2 buah kabel pita hitam
37
PROSEDUR
1. Hubungkan PORTC pada minimum system dengan soket jumper OUTPUT pada trainer
dan PORTD.2 (INT0) dari minimum sistem ke soket IS1 pada trainer.
2. Buka program Code Vision AVR
3. Buatlah project baru. Pada tap External IRQ centang INT0 lalu pilih Mode Falling edge
dan set PORTC sebagai OUTPUT
4. Ketik program interrupt pada blok Interrupt seperti sintaks dibawah ini.
#include <mega8535.h>
#include <delay.h>
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
// disini hanya menggunakan 1 interrup saja
{
// Place your code here
PORTC = 0b10101010;
delay_ms(1000);
PORTC = 0b11111111;
delay_ms(1000);
}
5. Ketik dalam program utama (main program)
while (1) // program utama
{
PORTC = 0b11110000;
}
6. Amati nyala LED sebelum dan sesudah anda menekan tombol interupsi
7. Ulangi langkah 3-6 untuk mode interupsi (Interrupt Sense Control) Rising Edge, Any
Change dan Low Level.
38
DATA HASIL PERCOBAAN
Tabel Interupsi
No Mode Interupsi
Program yang dijalankan (Interrupt / Main Program)
Saat tombol IS1 belum ditekan
(Low)
Saat tombol IS1 ditekan dan ditahan
(Raising)
Saat tombol IS1 dilepaskan
(Falling)
1 Falling Edge
2 Rising Edge
3 Any Change
4 Low Level
ANALISA DATA
1. Analisa data hasil pada Tabel Interupsi
39
MODUL VIII
MENGGUNAKAN TIMER, COUNTER dan PWM
DALAM MIKROKONTROLLER ATMEGA8535
TUJUAN
Mahasiswa mampu menggunakan fitur timer/counter mikrokontroler.
Mahasiswa mampu menggunakan mikrokontroler untuk membuat timer.
Mahasiswa mampu menggunakan mikrokontroler untuk menghitung banyaknya
pulsa yang masuk.
TIMER/COUNTER
Timer/counter dalam Atmega8535 ada 3 yaitu:
Timer/counter 0
Timer/counter 1
Timer/counter 2
Interrupt timer berasal dari dua sumber yaitu:
Overflow interrupt, dimana interrupt terjadi jika TCNTn mencapai 255 untuk timer 8
bit dan 65535 untuk timer 16 bit.
Compare match interrupt, dimana interrupt terjadi jika nilai OCR sama dengan
TCNTn.
Pada dasarnya Timer hanya menghitung pulsa clock. Frekuensi pulsa clock yang
dihitung tersebut bisa sama dengan frekuensi kristal yang digunakan atau dapat diperlambat
menggunakan prescaler dengan faktor 8, 64, 256, atau 1024.
Contohnya jika sebuah sistem mikrokontroler menggunakan kristal dengan frekuensi 4 MHz
dan timer yang digunakan adalah timer 8 bit, maka maksimum waktu timer yang bisa
dihasilkan adalah:
𝑡𝑀𝐴𝑋 = 1
𝑓𝐶𝐿𝐾 𝑥 (𝐹𝐹ℎ + 1)
= 1/4.000.000 x (255+1)
= 0,000064 s
40
Untuk menghasilkan timer yang lebih lama dapat digunakan prescaler, misalnya
1024, maka maksimum waktu timer yang bisa dihasilkan adalah:
𝑡𝑀𝐴𝑋 = 1
𝑓𝐶𝐿𝐾 𝑥 (𝐹𝐹ℎ + 1) 𝑥 𝑁
= 1/4.000.000 x (255+1) x 1024
= 0,065536 s
Untuk menghitung nilai TCNT supaya menghasilkan waktu timer tertentu dipergunakan
rumus berikut:
𝑇𝐶𝑁𝑇 = (1 + 𝐹𝐹ℎ) – (𝑇𝑡𝑖𝑚𝑒𝑟 𝑥 𝑓𝐶𝐿𝐾)
𝑁
Dimana:
TCNT = nilai Timer (Heksadesimal)
fCLK = Frekuensi clock kristal yang digunakan (Hz)
Ttimer = Waktu timer yang diinginkan (detik)
N = prescaler (1,8,64,256,1024)
1+FFh = nilai maksimum timer adalah FFh dan overflow saat FFh ke 00h
ALAT DAN BAHAN YANG DIGUNAKAN
1 set PC/Laptop yang sudah berisi program Code Vision dan Khazama
1 buah catu daya DC +5V
1 buah multimeter
1 buah ISP Downloader AVR
1 buah sistem minimum AVR
1 buah I/O
1 buah kabel printer USB
2 buah kabel pita hitam
41
PROSEDUR
TIMER
1. Rangkailah peralatan yang diperlukan seperti gambar dibawah. Hubungkan soket
jumper PORTC pada minimum system dengan soket jumper pada OUTPUT Trainer
I/O.
I/OISP Downloader
Kabel USBKabel
downloader Minimum
system AVR
Kabel hitam
2. Buka program Code Vision AVR
3. Buatlah project baru. Pada saat mengeset chip dan clock, set juga bagian PORTC
untuk LED serta Timer seperti gambar dibawah. Kemudian simpanlah file tersebut.
Nilai Clock Value adalah Nilai Clock Frequency Chip (Fclock) dibagi dengan
prescaller dimana prescaller tersebuat bernilai 1, 8, 64, 256, atau 1024
Contoh jika nilai Fclock = 4 Mhz maka jika kita ingin menggunakan prescaller 1024
setting Clock Value nya adalah 4Mhz/1024=3,906 Khz
4. Perhatikan blok program berikut.
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x05;
TCNT0=0x50;
OCR0=0x00;
42
// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x01; // Global enable interrupts #asm("sei")
5. Tuliskan script berikut dalam interrupt:
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void) {
// Reinitialize Timer 0 value TCNT0=0x50;
// Place your code here
if (PINC==0)
{PORTC=0xFF;}
else
{PORTC=0x00;}
}
6. Perhatikan dan catat nyala LED.
7. Ubah nilai TCCR0 menjadi 0x04 dan 0x03. Perhatikan perbedaan nyala LED dengan
nilai TCCR yang berbeda-beda.
8. Ulangi langkah 3-7 untuk Timer2 dengan TCNT=0x80;
9. Buat Project baru untuk Timer1 dengan TCNT = 0xd5d0
10. Perhatikan blok berikut
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: On
43
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0xD5;
TCNT1L=0xD0;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x04;
// Global enable interrupts
#asm("sei")
11. Tuliskan script berikut dalam blok interrupt
// Timer1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer1 value
TCNT1H=0xD5D0 >> 8;
TCNT1L=0xD5D0 & 0xff;
// Place your code here
if (PINC==0)
{PORTC=0xFF;}
else
{PORTC=0x00;}
}
12. Ubah nilai TCCR1B sehingga menjadi 0x04, 0x03, 0x02, 0x01. Perhatikan perbedaan
nyala LED dengan nilai TCCR yang berbeda-beda.
13. Menggunakan Timer 16bit (Timer1) dengan nilai TCCR1B=0x05, Ubah nilai TCNT
sehingga menghasilkan timer 1 detik.
44
COUNTER
1. Rangkailah peralatan yang diperlukan seperti dalam gambar dibawah. Hubungkan
soket jumper PORTC pada minimum system dengan soket jumper pada OUTPUT LED.
Hubungkan kaki IS1 ke PORTB.0 (T0).
I/OISP Downloader
Kabel USBKabel
downloader Minimum
system AVR
Kabel hitam
2. Buka program Code Vision AVR
3. Buatlah project baru. Pada saat mengeset chip dan clock, set juga bagian PORTC
untuk LED serta Timer seperti gambar dibawah. Kemudian simpanlah file tersebut.
4. Perhatikan blok program berikut.
// Timer/Counter 0 initialization
// Clock source: T0 pin Falling Edge
// Mode: Normal top=FFh
// OC0 output: Disconnected TCCR0=0x06;
TCNT0=0xFB;
OCR0=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
// Global enable interrupts #asm("sei")
5. Tuliskan script berikut dalam interrupt:
45
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0xFB;
// Place your code here
if (PINC==0)
{PORTC=0xFF;}
else
{PORTC=0x00;}
}
6. Tekan push button IS1 Perhatikan dan catat nyala LED.
7. Lakukan hal serupa dengan Timer dengan mengganti nilai TCNT0 menjadi 0xFC dan
0xF0.
46
PULSE WIDTH MODULATION (PWM)
1. Rangkailah peralatan yang diperlukan seperti dalam Gambar 1.2. Hubungkan soket
jumper PORTC pada minimum system dengan soket jumper pada OUTPUT LED.
Hubungkan kaki IS1 ke PORTB.0 (T0).
I/OISP Downloader
Kabel USBKabel
downloader Minimum
system AVR
Kabel hitam
2. Buka program Code Vision AVR
3. Buatlah project baru. Pada saat mengeset chip dan clock, set juga bagian PORTB
untuk LED serta Timer. Kemudian simpanlah file tersebut.
4. Klik Yes jika muncul dialog diatas
5. Perhatikan blok program berikut.
47
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x08;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 4000,000 kHz
// Mode: Phase correct PWM top=FFh
// OC0 output: Non-Inverted PWM
TCCR0=0x65;
TCNT0=0x00;
OCR0=0x50;
6. Jalankan program dan lihat nyala LED di PORTB.3.
7. Lihat sinyal di kaki OC0 (PORTB.3) dengan osiloskop.
8. Ulang langkah 3-6 jika diubah PWM mode Fast PWM.
DATA HASIL PERCOBAAN
TIMER
No TIMER TCCRx TCNTx Kondisi Led Delay
1 Timer0 0x05 0x50
2 Timer0 0x04 0x50
3 Timer0 0x03 0x50
6 Timer2 0x05 0x80
7 Timer1 0x05 0xD5D0
8 Timer1 0x04 0xD5D0
9 Timer1 0x03 0xD5D0
10 Timer1 0x02 0xD5D0
11 Timer1 0x01 0xD5D0
8 Timer1 00000000 11111111 1 s
Counter
No TIMER TCCRx TCNTx Jumlah Penekanan Tombol IS1 Hingga
LED Menyala
Jumlah Penekanan Tombol IS1 Hingga
LED Mati
1 Timer0 0x06 0xFB
2 Timer0 0x06 0xFC
3 Timer0 0x06 0xF0
PWM
1. Nyala LED dan gambar sinyal kaki OC0 (PORTB.3) untuk mode Phase Correct PWM
2. Nyala LED dan gambar sinyal kaki OC0 (PORTB.3) untuk mode Fast PWM
48
ANALISA DATA
TIMER
1. Analisa data hasil pada tabel Timer dengan menggunakan rumus :
𝑇𝑡𝑖𝑚𝑒𝑟0 =((1 + 255) − 𝑇𝐶𝑁𝑇0) ∙ 𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑒𝑟
𝑓𝑐𝑙𝑜𝑐𝑘
𝑇𝑡𝑖𝑚𝑒𝑟1 =((1 + 65535) − 𝑇𝐶𝑁𝑇1) ∙ 𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑒𝑟
𝑓𝑐𝑙𝑜𝑐𝑘
Hitung Nilai Ttimer :
TIMER TCCRx TCNTx Fclock (Hz) Prescaler 8 / 16 bit T (s) Keterangan
Timer0 0x05 0x50 4.000.000 1.024 255 0,05 Delay tidak terlihat
Timer0 0x04 0x50
Timer0 0x03 0x50
Timer2 0x05 0x80
Timer1 0x05 0xD5D0
Timer1 0x04 0xD5D0
Timer1 0x03 0xD5D0
Timer1 0x02 0xD5D0
Timer1 0x01 0xD5D0
2. Bagaimana anda mendapatkan timer dengan Ttimer 1 detik dengan menggunakan
Timer1?
COUNTER
1. Analisa data hasil pada tabel counter
PWM
1. Analisa data hasil dari output PWM pada LED dan gambar sinyal
49
DAFTAR PUSTAKA
Andrianto, Heri. 2007. Pemrograman Mikrokontroler AVR Atmega 16. Jakarta: Informatika.
Atmel Corporation. Atmega 8535 Datasheet (Complete).
Gadre, Dhananjay V. 2001. Programming and Customizing the AVR Microcontroller. New York: Mc
Graw Hill.
Ibrahim, Dogan. 2002. Microcontroller Based Temperature Monitoring & Control. Newnes
Heryanto, M Ary. 2007. Pemrograman Bahasa C untuk Mikrokontroler Atmega 8535. Yogyakarta;
Penerbit Andi.
John Crisp. Introduction to Microprocessors and microcontrollers. OXFORD: Newnes
Recommended