Anda di halaman 1dari 51

BUKU MODUL PRAKTIKUM

MIKROKONTROLLER

Dibuat Oleh:
Iswanto, S.T, M.Eng

TEKNIK ELEKTRO MEDIK


PROGRAM VOKASI
UNIVERSITAS MUHAMMADIYAH YOGYAKARTA
2015
KATA PENGANTAR

Assalamu’alaikum wr wb
Puji syukur kehadirat Allah SWT, penulis sampaikan atas kenikmatan yang tiada tara yang selalu
dilimpahkan oleh-Nya sehingga penulisan modul praktikum Sistem Mikrokontroller ini selesai.
Sholawat dan salam semoga selalu tercurah kepada nabi Muhammad SAW.
Salah satu jenis pendidikan yang dilaksanakan di-universitas yaitu mata kuliah praktikum.
Diantara praktikum yang ada di Teknik Elektro Universitas Muhammadiyah Yogyakarta adalah
praktikum Sistem Mikrokontroller. Telah diketahui bersama bahwa sistem mikrokontroller pada
akhir-akhir periode ini memegang peranan penting dalam kehidupan. Dimulai dari alat
komunikasi, alat-alat rumah tangga, alat keamanan, dan lain sebagainya berbasis teknologi
mikroprosesor. Dalam rangka memberi bekal ilmu tersebut, maka disusunlah modul Praktikum
Sistem Mikrokontroller dibawah Laboratorium Teknik Elektro UMY.
Akhirnya, penulis ucapkan terima kasih kepada semua pihak yang telah membantu dan
membaca, serta mempraktikkan modul ini. Semoga bermanfaat.
Wassalamu’alaikum wr wb.
Agustus 2012
Penulis

Iswanto, ST, M.Eng


TATA TERTIB
Tata Tertib Laboratorium:
1. Berlaku sopan, santun dan menjunjung etika akademik dalam laboratorium.
2. Menjunjung tinggi dan menghargai staf laboratorium dan sesama pengguna laboratorium.
3. Menjaga kebersihan dan kenyamanan ruang laboratorium.
4. Peserta praktikum (praktikan) yang mengenakan pakaian/kaos oblong tidak boleh
memasuki laboratorium dan/atau tidak boleh mengikuti praktikum.
5. Praktikan makan dan minum, membuat kericuhan selama kegiatan praktikum dan di
dalam ruang laboratorium.
6. Dilarang memindahkan, mengganti dan menggunakan peralatan di laboratorium yang
tidak sesuai dengan acara praktikum matakuliah yang diambil.
7. Praktikan yang telah menghilangkan, merusak atau memecahkan peralatan praktikum
harus mengganti sesuai dengan spesifikasi alat yang dimaksud, dengan kesepakatan
antara laboran, pembimbing praktikum dan kepala laboratorium. Persentase pengantian
alat yang hilang, rusak atau pecah disesuaikan dengan jenis alat atau tingkat kerusakan
dari alat.
8. Apabila praktikan tidak sanggup mengganti alat yang hilang, rusak atau pecah
dikarenakan harga alat mahal atau alat tidak ada dipasaran, maka nilai penggantian
ditetapkan atas kesepakatan antara ketua jurusan, pembimbing praktikum dan peserta
praktikum.
9. Membaca, memahami dan mengikuti prosedur operasional untuk setiap peralatan dan
kegiatan selama praktikum dan di ruang laboratorium.

Hal yang perlu diperhatikan oleh praktikan sebelum meninggalkan ruangan laboratorium:
1. Pastikan komputer telah di-shutdown (dimatikan).
2. Matikan modul hardware praktikum.
3. Cabutlah kabel power komputer dari stop kontak.
4. Cabutlah kabel power modul hardware dari stop kontak.
5. Cabutlah semua kabel aplikasi pada masing-masing port mikrokontroler.
6. Rapikan kabel modul hardware dengan cara menggulung dan mengikatnya.
7. Letakkan modul hardware dan kabel-kabel aplikasi pada meja dengan rapi.
8. Rapikan laci keyboard, mouse, dan pad mouse.
9. Rapikan kursi dengan cara mendekatkannya dengan meja komputer.
10. Jangan meninggalkan sampah apapun di dalam ruang praktikum (kertas, sobekan kertas, plastik,
bungkus permen, dll).
11. Periksa barang-barang anda agar tidak ada yang ketinggalan (flashdisk, buku, pulpen,
handphone).
12. Kehilangan barang-barang setelah meninggalkan tempat menjadi tanggung jawab praktikan
sendiri.
DAFTAR ISI

KATA PENGANTAR 2
TATA TERTIB 3
DAFTAR ISI 4
DAFTAR GAMBAR 7
APLIKASI PORT KELUARAN DIGITAL MIKROKONTROLLER 8
TUJUAN 8
DASAR TEORI 8
RANGKAIAN LAMPU LED 9
PEMROGRAMAN LED BERKEDIP 9
LATIHAN PEMROGRAMAN LED 10
APLIKASI PORT MASUKAN DIGITAL MIKROKONTROLLER 11
TUJUAN 11
DASAR TEORI 11
RANGKAIAN PEMBACAAN 8 TOMBOL 12
PEMROGRAMAN PEMBACAAN TOMBOL 12
LATIHAN PEMROGRAMAN SAKLAR 13
APLIKASI SEVEN SEGMENT 14
TUJUAN 14
DASAR TEORI 14
RANGKAIAN SEVEN SEGMENT 15
PEMROGRAMAN SEVENT SEGMENT 15
LATIHAN PEMROGRAMAN SEVEN SEGMENT 16
APLIKASI LCD 18
TUJUAN 18
DASAR TEORI 18
RANGKAIAN LCD 20
PEMROGRAMAN LCD 20
LATIHAN PEMROGRAMAN LCD 21
APLIKASI KEYPAD 22
TUJUAN 22
DASAR TEORI 22
RANGKAIAN PEMBACAAN KEYPAD DENGAN LCD 24
PEMROGRAMAN PEMBACAAN KEYPAD 24
LATIHAN PEMROGRAMAN KEYPAD 26
APLIKASI COUNTER 28
TUJUAN 28
DASAR TEORI 28
RANGKAIAN MENCACAH COUNTER T0 29
PEMROGRAMAN MENCACAH COUNTER T0 29
RANGKAIAN MENCACAH COUNTER T1 30
PEMROGRAMAN MENCACAH COUNTER T1 30
LATIHAN PEMROGRAMAN COUNTER 31
APLIKASI TIMER 32
TUJUAN 32
DASAR TEORI 32
RANGKAIAN MENCACAH TIMER T0 33
PEMROGRAMAN MENCACAH TIMER T0 33
RANGKAIAN MENCACAH TIMER T1 34
PEMROGRAMAN MENCACAH TIMER T1 35
LATIHAN PEMROGRAMAN TIMER 36
APLIKASI ADC 37
TUJUAN 37
DASAR TEORI 37
RANGKAIAN ADC ATMEGA DENGAN LED 38
PEMROGRAMAN ADC ATMEGA16 38
LATIHAN PEMROGRAMAN ADC 39
APLIKASI INTERUPSI 40
TUJUAN 40
DASAR TEORI 40
RANGKAIAN INTERUPSI EKTERNAL 41
PEMROGRAMAN INTERUPSI EKTERNAL INT0 41
LATIHAN PEMROGRAMAN INTRUPSI 42
APLIKASI PWM 43
TUJUAN 43
DASAR TEORI 43
RANGKAIAN PWM 44
PEMROGRAMAN PWM 45
LATIHAN PWM 46
APLIKASI SERIAL PORT 47
TUJUAN 47
DASAR TEORI 47
RANGKAIAN SERIAL PORT 48
PEMROGRAMAN PWM 49
LATIHAN SERIAL PORT 50
DAFTAR GAMBAR
APLIKASI PORT KELUARAN DIGITAL MIKROKONTROLLER

TUJUAN
1. Mahasiswa dapat menjalankan program CodeVisionAVR 2.
2. Mahasiswa dapat memahami cara kerja port untuk keluaran digital pada mikrokontroller
3. Mahasiswa dapat membuat program port untuk keluaran digital pada mikrokontroller

DASAR TEORI
ATmega16 mempunyai empat buah port yang bernama PortA, PortB, PortC, dan PortD.
Keempat port tersebut merupakan jalur bidirectional dengan pilihan internal pull-up. Tiap port
mempunyai tiga buah register bit, yaitu DDxn, PORTxn, dan PINxn. Huruf ‘x’mewakili nama
huruf dari port sedangkan huruf ‘n’ mewakili nomor bit. Bit DDxn terdapat pada I/O address
DDRx, bit PORTxn terdapat pada I/O address PORTx, dan bit PINxn terdapat pada I/O address
PINx. Bit DDxn dalam regiter DDRx (Data Direction Register) menentukan arah pin.
Bila DDxn diset 1 maka Px berfungsi sebagai pin output. Bila PORTxn diset 1 pada saat
pin terkonfigurasi sebagai pin output maka pin port akan berlogika 1. Dan bila PORTxn diset 0
pada saat pin terkonfigurasi sebagai pin output maka pin port akan berlogika 0. Saat mengubah
kondisi port dari kondisi tri-state (DDxn=0, PORTxn=0) ke kondisi output high (DDxn=1,
PORTxn=1) maka harus ada kondisi peralihan apakah itu kondisi pull-up enabled (DDxn=0,
PORTxn=1)atau kondisi output low (DDxn=1, PORTxn=0).
Biasanya, kondisi pull-up enabled dapat diterima sepenuhnya, selama lingkungan
impedansi tinggi tidak memperhatikan perbedaan antara sebuah strong high driver dengan
sebuah pull-up. Jika ini bukan suatu masalah, maka bit PUD pada register SFIOR dapat diset 1
untuk mematikan semua pull-up dalam semua port. Peralihan dari kondisi input dengan pullup
ke kondisi output low juga menimbulkan masalah yang sama. Kita harus menggunakan kondisi
tri-state (DDxn=0, PORTxn=0) atau kondisi output high (DDxn=1, PORTxn=0) sebagai kondisi
transisi.
RANGKAIAN LAMPU LED
Rangkaian minimum untuk menghidupkan 8 LED melalui Port B ditunjukan pada
Gambar 3.1. yang perlu diperhatikan adalah konfigurasi rangkaian LED yaitu Common Anode
(CA) artinya untuk menghidupkan LED pada Port B, port B harus dikirim atau diberi logika ‘0’.

VCC

U1
VCC 1 40
2 PB0(XCK/T0) PA0(ADC0) 39
3 PB1(T1) PA1(ADC1) 38
4 PB2(INT2/AIN0) PA2(ADC2) 37
5 PB3(OC0/AIN1) PA3(ADC3) 36
R1 6 PB4(SS) PA4(ADC4) 35
7 PB5(MOSI) PA5(ADC5) 34
8 PB6[MISO) PA6(ADC6) 33
9 PB7[SCK) PA7(ADC7) 32
C1 22pF RST VCC 10 RESET AREF 31
1

11 VCC AGND 30
GND AVCC VCC
C3 100nF 12 29
SW1 13 XTAL2 PC7(TOSC2) 28
X1 14 XTAL1 PC6(TOSC1) 27
15 PD0(RXD) PC5 26
16 PD1(TXD) PC4 25
2

C2 22pF 17 PD2(INT0) PC3 24


18 PD3(INT1) PC2 23
19 PD4(OC1B) PC1(SDA) 22
20 PD5(OC1A) PC0(SCL) 21
PD6(ICP) PD7(OC2)
ATMEGA16

Hasil pemasangan komponen rangkaian lampu led

PEMROGRAMAN LED BERKEDIP


Program sebagai berikut ini

#include <mega16.h>
#include <delay.h>
void main(void)
{
char a; char b;
a=0x000; b=0x0FF;
DDRB=0xFF;
while(1)
{
PORTB= a;
delay_ms(500);
PORTB= b;
delay_ms(500);
}
}
LATIHAN PEMROGRAMAN LED
1. Jelaskan program diatas
2. Buatlah dan Jelaskan Program LED Flip-Flop
3. Buatlah dan Jelaskan Program LED Berjalan Kekanan
4. Buatlah dan Jelaskan Program LED Berjalan kekiri
APLIKASI PORT MASUKAN DIGITAL MIKROKONTROLLER

TUJUAN
1. Mahasiswa dapat menjalankan program CodeVisionAVR 2.
2. Mahasiswa dapat memahami cara kerja port untuk keluaran digital pada mikrokontroller
3. Mahasiswa dapat membuat program port untuk keluaran digital pada mikrokontroller

DASAR TEORI
ATmega16 mempunyai empat buah port yang bernama PortA, PortB, PortC, dan PortD.
Keempat port tersebut merupakan jalur bidirectional dengan pilihan internal pull-up. Tiap port
mempunyai tiga buah register bit, yaitu DDxn, PORTxn, dan PINxn. Huruf ‘x’mewakili nama
huruf dari port sedangkan huruf ‘n’ mewakili nomor bit. Bit DDxn terdapat pada I/O address
DDRx, bit PORTxn terdapat pada I/O address PORTx, dan bit PINxn terdapat pada I/O address
PINx. Bit DDxn dalam regiter DDRx (Data Direction Register) menentukan arah pin.
Bila DDxn diset 0 maka Px berfungsi sebagai pin input. Bila PORTxn diset 1 pada saat
pin terkonfigurasi sebagai pin input, maka resistor pull-up akan diaktifkan. Untuk mematikan
resistor pull-up, PORTxn harus diset 0 atau pin dikonfigurasi sebagai pin output. Pin port adalah
tri-state setelah kondisi reset. Bila PORTxn diset 1 pada saat pin terkonfigurasi sebagai pin
output maka pin port akan berlogika 1. Dan bila PORTxn diset 0 pada saat pin terkonfigurasi
sebagai pin output maka pin port akan berlogika 0. Saat mengubah kondisi port dari kondisi tri-
state (DDxn=0, PORTxn=0) ke kondisi output high (DDxn=1, PORTxn=1) maka harus ada
kondisi peralihan apakah itu kondisi pull-up enabled (DDxn=0, PORTxn=1)atau kondisi output
low (DDxn=1, PORTxn=0).
Biasanya, kondisi pull-up enabled dapat diterima sepenuhnya, selama lingkungan
impedansi tinggi tidak memperhatikan perbedaan antara sebuah strong high driver dengan
sebuah pull-up. Jika ini bukan suatu masalah, maka bit PUD pada register SFIOR dapat diset 1
untuk mematikan semua pull-up dalam semua port. Peralihan dari kondisi input dengan pullup
ke kondisi output low juga menimbulkan masalah yang sama. Kita harus menggunakan kondisi
tri-state (DDxn=0, PORTxn=0) atau kondisi output high (DDxn=1, PORTxn=0) sebagai kondisi
transisi.
Bit 2 – PUD : Pull-up Disable. Bila bit diset bernilai 1 maka pull-up pada port I/O akan
dimatikan walaupun register DDxn dan PORTxn dikonfigurasikan untuk menyalakan pull-up
(DDxn=0, PORTxn=1).

RANGKAIAN PEMBACAAN 8 TOMBOL


Rangkaian pembacaan 8 buah tombol adalah rangkaian untuk membaca penekanan tombol
yang terhubung pada port keluaran mikrokontroller yang hasilnya tertampil pada led .

VCC

U1 PORTC.7
VCC 1 40 PORTC.6
2 PB0(XCK/T0) PA0(ADC0) 39 PORTC.5
3 PB1(T1) PA1(ADC1) 38 PORTC.4
4 PB2(INT2/AIN0) PA2(ADC2) 37 PORTC.3
5 PB3(OC0/AIN1) PA3(ADC3) 36 PORTC.2
R1 6 PB4(SS) PA4(ADC4) 35 PORTC.1
7 PB5(MOSI) PA5(ADC5) 34 PORTC.0
8 PB6[MISO) PA6(ADC6) 33
9 PB7[SCK) PA7(ADC7) 32 VCC
C1 22pF RST VCC 10 RESET AREF 31 JP3
1

11 VCC AGND 30
GND AVCC VCC 1
C3 100nF 12 29 PORTC.7
SW1 13 XTAL2 PC7(TOSC2) 28 PORTC.6 2
X1 14 XTAL1 PC6(TOSC1) 27 PORTC.5 3
15 PD0(RXD) PC5 26 PORTC.4 4
16 PD1(TXD) PC4 25 PORTC.3 5
2

C2 22pF 17 PD2(INT0) PC3 24 PORTC.2 6


18 PD3(INT1) PC2 23 PORTC.1 7
19 PD4(OC1B) PC1(SDA) 22 PORTC.0 8
20 PD5(OC1A) PC0(SCL) 21 9
PD6(ICP) PD7(OC2)
R-PACK
ATMEGA16

Rangkaian aplikasi pembacaan 8 buah tombol

PEMROGRAMAN PEMBACAAN TOMBOL


Program sebagai berikut ini

#include <mega16.h>
#include <delay.h>

void jalankiri()
{
char i;
volatile unsigned char dataLED=0x80;
DDRB=0xFF;
PORTB = 0;
for(i=0; i<8;i++)
{
dataLED= ((dataLED<<1) | (dataLED >>7));
PORTB=dataLED;
delay_ms(100);
}
}

void jalankanan()
{
char i;
volatile unsigned char dataLED=0x01;
DDRB=0xFF;
PORTB = 0;
for(i=0; i<8;i++)
{
dataLED= ((dataLED<<7) | (dataLED >>1));
PORTB=dataLED;
delay_ms(100);
}
}

void main(void)
{
DDRC=0x00;
while(1)
{
if (PINC.0==1)
{
jalankanan();
}
else
{
jalankiri();
}
}
}

LATIHAN PEMROGRAMAN SAKLAR


1. Jelaskan program diatas
2. Buatlah dan Jelaskan Program jika tombol 0 ditekan maka led akan berkedip
3. Buatlah dan Jelaskan Program jika tombol 3 ditekan maka LED Berjalan Kekanan
4. Buatlah dan Jelaskan Program jika tombol 0 ditekan maka LED akan flip flop.
APLIKASI SEVEN SEGMENT
TUJUAN
1. Mahasiswa dapat menjalankan program CodeVisionAVR 2.
2. Mahasiswa dapat memahami cara segment
3. Mahasiswa dapat membuat program untuk segment

DASAR TEORI
Peralatan keluaran yang sering digunakan dalam menampilkan bilangan adalah penampil
seven segmen yang ditunjukkan pada gambar 4.1 (a). tujuh segmen tersebut dilabelkan dengan
huruf a sampai g.
a

f b
g

e c
d

(a) (b)
Tabel 11.1 (a) Tampilan Fisik LED, (b) Skema dalam LED

Peraga seven segmen dapat dibuat dalam berbagai cara. Tiap tujuh segmen tersebut dapat
berupa filamen tipis yang berpijar. Jenis peraga ini disebut peraga pijar (meandescent display),
dan sama dengan bola lampu biasa. Peraga jenis lain adalah LCD (liquid crystal display), peraga
cairan, yang ,menghasilkan angka – angka berwarna kelabu atau puth perak. Dioda pemancar
cahaya (LED, Light Emiting Dioda) menghasilkan cahaya kemerah – merahan. Pada peraga
LED, LED membutuhkan arus khusus sebesar 20 mA. Karena berupa dioda, LED sensitif
terhadap polaritas. Katoda (K) harus dihubung ke negatif (GND) dari catu daya dan Anoda (A)
dihubung ke positif dari catu daya. Seven segmen ini mempunyai 2 tipe yaitu common anoda dan
common katoda. Gambar 4.1(b) memperlihatkan catu daya yang dihubungkan ke seven segmen
common anoda.

RANGKAIAN SEVEN SEGMENT


Rangkaian seven segment tunggal adalah rangkaian untuk menggerakkan penampil 7
segment secara langsung dari port keluaran mikrokontroller. Penampil seven segment yang
digunakan common anoda. Data yang digunakan untuk menghasilkan angka atau huruf tertentu
didapatkan dengan cara seperti pada Tabel 4.1

U4
P0 1 40
VCC P1 2 PB0(XCK/T0) PA0(ADC0) 39
P2 3 PB1(T1) PA1(ADC1) 38
P3 4 PB2(INT2/AIN0) PA2(ADC2) 37
P4 5 PB3(OC0/AIN1) PA3(ADC3) 36
P5 6 PB4(SS) PA4(ADC4) 35
R1 P6 7 PB5(MOSI) PA5(ADC5) 34
P7 8 PB6[MISO) PA6(ADC6) 33
RST 9 PB7[SCK) PA7(ADC7) 32
VCC 10 RESET AREF 31
C1 22pF 11 VCC AGND 30 VCC
VCC
1

12 GND AVCC 29
C3 100nF1 13 XTAL2 PC7(TOSC2) 28
SW2 PD0 14 XTAL1 PC6(TOSC1) 27

6
X1 PD1 15 PD0(RXD) PC5 26
PD2 16 PD1(TXD) PC4 25
PD3 17 PD2(INT0) PC3 24
2

C2 22pF PD4 18 PD3(INT1) PC2 23


PD5 19 PD4(OC1B) PC1(SDA) 22
PD6 20 PD5(OC1A) PC0(SCL) 21 PD7
PD6(ICP) PD7(OC2)
ATMEGA16

HEADER 5

10
1
2
3
4
5
8
9
P5 PD0
1 P6 PD1
2 P7 PD2
3 RST PD3
4 GND PD4
5 PD5
JISP PD6
PD7

Rangkaian aplikasi penggerak seven segmen tunggal

PEMROGRAMAN SEVENT SEGMENT


Program sebagai berikut ini

#include <mega16.h>
#include <delay.h>

void bin7seg(unsigned char data1)


{
switch(data1)
{
case 0 :
PORTD = 0xc0;
break;
case 1 :
PORTD = 0xf9;
break;
case 2 :
PORTD = 0xa4;
break;
case 3 :
PORTD = 0xb0;
break;
case 4 :
PORTD = 0x99;
break;
case 5 :
PORTD = 0x92;
break;
case 6 :
PORTD = 0x82;
break;
case 7 :
PORTD = 0xf8;
break;
case 8 :
PORTD = 0x80;
break;
case 9 :
PORTD = 0x90;
break;
}
}

void main(void)
{
DDRD=0xFF;
while(1)
{
bin7seg(0); delay_ms(100);
bin7seg(2); delay_ms(100);
}
}

LATIHAN PEMROGRAMAN SEVEN SEGMENT


1. Jelaskan program diatas
2. Buatlah dan Jelaskan Program jika tombol 0 ditekan maka seven segment menampilkan
angka 0
3. Buatlah dan Jelaskan Program jika tombol 3 ditekan maka seven segment menampilkan
angka 3
4. Buatlah dan Jelaskan Program jika tombol 8 ditekan maka seven segment menampilkan
angka 8
APLIKASI LCD

TUJUAN
1. Mahasiswa dapat menjalankan program CodeVisionAVR 2.
2. Mahasiswa dapat memahami cara kerja LCD pada mikrokontroller
3. Mahasiswa dapat membuat program port untuk LCD pada mikrokontroller

DASAR TEORI
Kemampuan dari LCD untuk menampilkan tidak hanya angka-angka, tetapi juga huruf-huruf,
kata-kata dan semua sarana simbol, lebih bagus dan serbaguna daripada penampil-penampil
menggunakan 7-segment LED (Light Emiting Diode) yang sudah umum. Modul LCD
mempunyai basic interface yang cukup baik, yang mana sesuai dengan minimum system 8031.
Sesuai juga dengan keluarga mikrokontroler yang lain. Bentuk dan ukuran modul-modul
berbasis karakter banyak ragamnya, salah satu variasi bentuk dan ukuran yang tersedia dan
dipergunakan pada peralatan ini adalah 16x 2 karakter (panjang 16, baris 2, karakter 32) dan 16
pin.
Ketika power dinyalakan, display menampilkan sederet persegi gelap, mungkin hanya
pada sebagian display. Sel-sel karakter ini sebenarnya merupakan bagian yang mati. Modul
display mereset sendiri pada bagian awal ketika power dinyalakan, yang mana layar jadi kosong
sehingga karakter-karakter tidak dapat terlihat. Dengan demikian perlu untuk memberikan
perintah pada poin ini, untuk menyalakan display.
Penulisan data ke Register Perintah dilakukan dengan tujuan mengatur tampilan LCD,
inisialisasi dan mengatur Address Counter maupun Address Data. Gambar 5 menunjukkan
proses penulisan data ke register perintah dengan menggunakan mode 4 bit interface. Kondisi RS
berlogika 0 menunjukkan akses data ke Register Perintah. RW berlogika 0 yang menunjukkan
proses penulisan data akan dilakukan. Nibble tinggi (bit 7 sampai bit 4) terlebih dahulu
dikirimkan dengan diawali pulsa logika 1 pada E Clock. Kemudian Nibble rendah (bit 3 sampai
bit 0) dikirimkan dengan diawali pulsa logika 1 pada E Clock lagi. Untuk mode 8 bit interface,
proses penulisan dapat langsung dilakukan secara 8 bit (bit 7 … bit 0) dan diawali sebuah pulsa
logika 1 pada E Clock.
Timing diagram penulisan data ke register mode 4 bit interface

Proses pembacaan data pada register perintah biasa digunakan untuk melihat status busy
dari LCD atau membaca Address Counter. RS diatur pada logika 0 untuk akses ke Register
Perintah, R/W diatur pada logika 1 yang menunjukkan proses pembacaan data. 4 bit nibble tinggi
dibaca dengan diawali pulsa logika 1 pada E Clock dan kemudian 4 bit nibble rendah dibaca
dengan diawali pulsa logika 1 pada E Clock. Untuk Mode 8 bit interface, pembacaan 8 bit
(nibble tinggi dan rendah) dilakukan sekaligus dengan diawali sebuah pulsa logika 1 pada E
Clock

Timing Diagram Pembacaan Register Perintah Mode 4 bit Interface


RANGKAIAN LCD
VCC
J16.
J5

1
1 pinb.5 VCC 2
2 pinb.6 U1 3
VCC 3 pinb.7 1 40 RS_LCD 5k RS_LCD 4
4 RST 2 PB0(XCK/T0) PA0(ADC0) 39 E_LCD R9 5
5 3 PB1(T1) PA1(ADC1) 38 E_LCD 6
4 PB2(INT2/AIN0) PA2(ADC2) 37 7
Rreset 5 PB3(OC0/AIN1) PA3(ADC3) 36 ADC4 8
pinb.5 6 PB4(SS) PA4(ADC4) 35 ADC5 9
HEADER 5 pinb.6 7 PB5(MOSI) PA5(ADC5) 34 ADC6 10
pinb.7 8 PB6[MISO) PA6(ADC6) 33 ADC7 ADC4 11
9 PB7[SCK) PA7(ADC7) 32 ADC5 12
C1 22pF RST VCC 10 RESET AREF 31 ADC6 13
1

11 VCC AGND 30 ADC7 14


GND AVCC VCC
C3 100nF 12 29 15
SW1 13 XTAL2 PC7(TOSC2) 28 16
X1 14 XTAL1 PC6(TOSC1) 27

C
15 PD0(RXD) PC5 26
16 PD1(TXD) PC4 25 D3
2

C2 22pF 17 PD2(INT0) PC3 24 HEADER 16


18 PD3(INT1) PC2 23 1N4002
19 PD4(OC1B) PC1(SDA) 22
PD5(OC1A) PC0(SCL) VCC
20 21

A
PD6(ICP) PD7(OC2)
ATMEGA16

Gambar 8.1. Rangkaian LCD mikrokontroller

PEMROGRAMAN LCD
Program sebagai berikut ini

#include <mega16.h>
#include <delay.h>
#include <stdio.h>

#asm
.equ __lcd_port=0x18;PORTB
#endasm

#include <lcd.h>

void main(void)
{
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf("Halo Iswanto");
delay_ms(100);
lcd_gotoxy(0,1);
lcd_putsf("D3 T.ELEKTRO");
delay_ms(100);
lcd_gotoxy(5,0);
lcd_putsf("UGM ");
delay_ms(100);
while (1);
}

LATIHAN PEMROGRAMAN LCD


1. Jelaskan program diatas
2. Buatlah dan Jelaskan Program Menampilkan nama sendiri dan nim
APLIKASI KEYPAD

TUJUAN
1. Mahasiswa dapat menjalankan program CodeVisionAVR 2.
2. Mahasiswa dapat memahami cara kerja keypad pada mikrokontroller
3. Mahasiswa dapat membuat program keypad pada mikrokontroller

DASAR TEORI
Keypad 4x3 di sini adalah sebuah keypad matrix dengan susunan empat baris dan tiga
kolom dengan sebuah common.

Gambar 12.1 Konstruksi keypad 4x3 dengan common

Seperti terlihat dalam gambar di atas, apabila saklar ‘1’ ditekan, maka baris 1 dan kolom
1 akan terhubung ke common. Apabila saklar ‘2’ ditekan, maka baris 1 dan kolom 2 akan
terhubung ke common dan seterusnya.
Gambar 12.2 Gambar interface keypad 4x3

Agar keypad tersebut dapat memberian input pada B51PEB, maka terlebih dahulu keypad
ini harus disusun dalam sebuah rangkaian di mana terdapat perbedaan kondisi pada pin-pinnya
antara kondisi tidak ada penekanan tombol, penekanan tombol 1, 2, 3 dan seterusnya.
Kondisi tidak adanya penekanan tombol diatur dengan adanya kondisi logika high
dengan menghubungkan semua pin keypad (kecuali common) ke VCC melalui resistor pull up.
Pada saat tombol tidak ditekan, maka arus akan mengalir dari VCC melalui resistor menuju ke
port seperti tampak pada gambar berikut.

Gambar 12.3 Aliran arus saat tombol tidak ditekan


Sedangkan saat tombol ditekan, maka baris dan kolom akan terhubung ke ground sehingga
kondisi pada baris dan kolom tersebut akan menjadi low. Apabila tombol ‘1’ ditekan, maka baris
1 dan kolom 1 akan terhubung ke ground sehingga kondisi baris dan kolom tersebut akan
berubah menjadi low, demikian pula pada tombol ‘2’ dan seterusnya sehingga terbentuk tabel
berikut.

RANGKAIAN PEMBACAAN KEYPAD DENGAN LCD


VCC
J16.

1
J5 VCC 2
3
5k pinb.0 4
1 pinb.5 R9 pinb.1 5
2 pinb.6 pinb.2 6
3 pinb.7 7
4 RST 8
5 9
10
pinb.4 11
pinb.5 12
HEADER 5 pinb.6 13
U4 pinb.7 14
pinb.0 1 40 15
VCC pinb.1 2 PB0(XCK/T0) PA0(ADC0) 39 16
pinb.2 3 PB1(T1) PA1(ADC1) 38

C
4 PB2(INT2/AIN0) PA2(ADC2) 37
5 PB3(OC0/AIN1) PA3(ADC3) 36 D3
pinb.5 6 PB4(SS) PA4(ADC4) 35 HEADER 16
R1 pinb.6 7 PB5(MOSI) PA5(ADC5) 34 1N4002
pinb.7 8 PB6[MISO) PA6(ADC6) 33
PB7[SCK) PA7(ADC7) VCC
9 32
A

VCC 10 RESET AREF 31


C1 22pF 11 VCC AGND 30 VCC
1

12 GND AVCC 29
C3 100nF1 13 XTAL2 PC7(TOSC2) 28
SW2 PD0 14 XTAL1 PC6(TOSC1) 27
X1 PD1 15 PD0(RXD) PC5 26
PD2 16 PD1(TXD) PC4 25
PD3 17 PD2(INT0) PC3 24
2

C2 22pF PD4 18 PD3(INT1) PC2 23


PD5 19 PD4(OC1B) PC1(SDA) 22
PD6 20 PD5(OC1A) PC0(SCL) 21
PD6(ICP) PD7(OC2)
PD7 ATMEGA16

S4 S8 S12 S16

SW SW SW SW

S5 S9 S13 S17

SW SW SW SW

S6 S10 S14 S18

PD0
PD1
PD2 SW SW SW SW
PD3
PD4
PD5 S7 S11 S15 S19
PD6
PD7
SW SW SW SW

Rangkaian aplikasi tombol keypad dengan lcd

PEMROGRAMAN PEMBACAAN KEYPAD


Program sebagai berikut ini

#include <lcd.h>
#include <stdio.h>
#include <mega16.h>
#include <delay.h>

#asm
.equ __lcd_port=0x18;PORTB
#endasm

unsigned char dt, dtkey;


char buf[33];

void inkey(void);

void main()
{
PORTD = 0XFF;
DDRD=0xF0;
lcd_init(16);
lcd_gotoxy(0,1);
lcd_putsf("Hello world");
while(1)
{
inkey();
lcd_gotoxy(0,1);
sprintf(buf,"hex %x ",dtkey);
lcd_puts(buf);
}
}

void inkey(void)
{
PORTD.4 = 0;
dt = (~PIND & 0x0F);
switch (dt)
{
case 1:dtkey = 0x01;
break;
case 2:dtkey = 0x05;
break;
case 4:dtkey = 0x09;
break;
case 8:dtkey = 0x13;
break;
}

PORTD.4 = 1;PORTD.5 = 0;
dt = (~PIND & 0x0F);
switch (dt)
{
case 1:dtkey = 0x02;
break;
case 2:dtkey = 0x06;
break;
case 4:dtkey = 0x10;
break;
case 8:dtkey = 0x14;
break;
}

PORTD.5 = 1;PORTD.6 = 0;
dt = (~PIND & 0x0F);
switch (dt)
{
case 1:dtkey = 0x03;
break;
case 2:dtkey = 0x07;
break;
case 4:dtkey = 0x11;
break;
case 8:dtkey = 0x15;
break;
}

PORTD.6 = 1;PORTD.7 = 0;
dt = (~PIND & 0x0F);
switch (dt)
{
case 1:dtkey = 0x04;
break;
case 2:dtkey = 0x08;
break;
case 4:dtkey = 0x12;
break;
case 8:dtkey = 0x16;
break;
}
PORTD.7 = 1;
}

LATIHAN PEMROGRAMAN KEYPAD


1. Jelaskan program diatas
APLIKASI COUNTER

TUJUAN
1. Mahasiswa dapat menjalankan program CodeVisionAVR 2.
2. Mahasiswa dapat memahami cara kerja counter pada mikrokontroller
3. Mahasiswa dapat membuat program counter pada mikrokontroller

DASAR 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 ATMEGA16
memiliki tiga buah timer, yaitu Timer/Counter0 (8 bit), Timer/Counter1 (16 bit), dan
Timer/Counter3 (16 bit).
Timer/couter adalah tujuan umum single channel, module 8 bit timer/counter. Beberapa
fasilitas chanel dari timer counter antara lain:
 Counter channel tunggal
 Pengosongan data timer sesuai dengan data pembanding
 Bebas -glitch, tahap yang tepat Pulse Width Modulator (PWM)
 Pembangkit frekuensi
 Event counter external

Blok diagram timer counter


Gambar diagram block timer/counter 8 bit ditunjukan pada gambar di bawah ini. Untuk
penempatan pin I/O telah di jelaskan Ibit hal 67 pada bagian I/O di atas. CPU dapat diakses
register I/O, termasuk dalam pinpin I/O dan bit I/O. Device khusus register I/O dan lokasi bit
terdaftar pada deskripsi timer/counter 8 bit pada gambar 1.13

RANGKAIAN MENCACAH COUNTER T0


HEADER 5

VCC P5
1 P6
2 P7
3 RST
4 GND
5
JISP U4
P0 1 40
VCC P1 2 PB0(XCK/T0) PA0(ADC0) 39
P2 3 PB1(T1) PA1(ADC1) 38
P3 4 PB2(INT2/AIN0) PA2(ADC2) 37
P4 5 PB3(OC0/AIN1) PA3(ADC3) 36
P5 6 PB4(SS) PA4(ADC4) 35
R1 P6 7 PB5(MOSI) PA5(ADC5) 34
P7 8 PB6[MISO) PA6(ADC6) 33
RST 9 PB7[SCK) PA7(ADC7) 32
10 RESET AREF 31
C1 22pF VCC 11 VCC AGND 30 VCC
1

12 GND AVCC 29
C3 100nF1 L1 13 XTAL2 PC7(TOSC2) 28
SW2 1 2 14 XTAL1 PC6(TOSC1) 27
X1 1 2 15 PD0(RXD) PC5 26
1 2 16 PD1(TXD) PC4 25
1 2 17 PD2(INT0) PC3 24
2

C2 22pF 1 2 18 PD3(INT1) PC2 23


1 2 19 PD4(OC1B) PC1(SDA) 22
1 2 20 PD5(OC1A) PC0(SCL) 21
1 2 PD6(ICP) PD7(OC2)
ATMEGA16

Hasil pemasangan komponen-komponen mencacah counter T0

PEMROGRAMAN MENCACAH COUNTER T0


Program sebagai berikut ini

#include <mega16.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;
}

RANGKAIAN MENCACAH COUNTER T1


HEADER 5

P5
1 P6
VCC 2 P7
3 RST
4 GND
5
JISP U4
P0 1 40
VCC P1 2 PB0(XCK/T0) PA0(ADC0) 39
P2 3 PB1(T1) PA1(ADC1) 38
P3 4 PB2(INT2/AIN0) PA2(ADC2) 37
P4 5 PB3(OC0/AIN1) PA3(ADC3) 36
P5 6 PB4(SS) PA4(ADC4) 35
R1 P6 7 PB5(MOSI) PA5(ADC5) 34
P7 8 PB6[MISO) PA6(ADC6) 33
RST 9 PB7[SCK) PA7(ADC7) 32
10 RESET AREF 31
C1 22pF VCC 11 VCC AGND 30 VCC
1

12 GND AVCC 29
C3 100nF1 L1 13 XTAL2 PC7(TOSC2) 28
SW2 1 2 14 XTAL1 PC6(TOSC1) 27
X1 1 2 15 PD0(RXD) PC5 26
1 2 16 PD1(TXD) PC4 25
1 2 17 PD2(INT0) PC3 24
2

C2 22pF 1 2 18 PD3(INT1) PC2 23


1 2 19 PD4(OC1B) PC1(SDA) 22
1 2 20 PD5(OC1A) PC0(SCL) 21
1 2 PD6(ICP) PD7(OC2)
ATMEGA16

Gambar 6.1. Hasil pemasangan komponen-komponen mencacah counter T1

PEMROGRAMAN MENCACAH COUNTER T1


Program sebagai berikut ini

#include <mega16.h>
#include <delay.h>
#include <stdio.h>

unsigned char led,a;

void InisialisasiTIMER ();

void main (void)


{
DDRD = 0xff;
led=0x00;
InisialisasiTIMER();
while(1)
{
a = TCNT1L + TCNT1H;
if (a == 0x06)
{
led = PIND;
PORTD=~led;
TCNT1L=0x00;
TCNT1H=0x00;
}
}
}

void InisialisasiTIMER ()
{
TCNT1L=0x00;
TCNT1H=0x00;
TCCR1A=0x00;
TCCR1B=0x07;
}

LATIHAN PEMROGRAMAN COUNTER


1. Jelaskan program diatas
APLIKASI TIMER

TUJUAN
1. Mahasiswa dapat menjalankan program CodeVisionAVR 2.
2. Mahasiswa dapat memahami cara kerja timer pada mikrokontroller
3. Mahasiswa dapat membuat program timer pada mikrokontroller

DASAR 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 ATMEGA16
memiliki tiga buah timer, yaitu Timer/Counter0 (8 bit), Timer/Counter1 (16 bit), dan
Timer/Counter3 (16 bit).
Timer/couter adalah tujuan umum single channel, module 8 bit timer/counter. Beberapa
fasilitas chanel dari timer counter antara lain:
 Counter channel tunggal
 Pengosongan data timer sesuai dengan data pembanding
 Bebas -glitch, tahap yang tepat Pulse Width Modulator (PWM)
 Pembangkit frekuensi
 Event counter external

Blok diagram timer counter


Gambar diagram block timer/counter 8 bit ditunjukan pada gambar di bawah ini. Untuk
penempatan pin I/O telah di jelaskan Ibit hal 67 pada bagian I/O di atas. CPU dapat diakses
register I/O, termasuk dalam pinpin I/O dan bit I/O. Device khusus register I/O dan lokasi bit
terdaftar pada deskripsi timer/counter 8 bit pada gambar 1.13

RANGKAIAN MENCACAH TIMER T0


HEADER 5

VCC P5
1 P6
2 P7
3 RST
4 GND
5
JISP U4
P0 1 40
VCC P1 2 PB0(XCK/T0) PA0(ADC0) 39
P2 3 PB1(T1) PA1(ADC1) 38
P3 4 PB2(INT2/AIN0) PA2(ADC2) 37
P4 5 PB3(OC0/AIN1) PA3(ADC3) 36
P5 6 PB4(SS) PA4(ADC4) 35
R1 P6 7 PB5(MOSI) PA5(ADC5) 34
P7 8 PB6[MISO) PA6(ADC6) 33
RST 9 PB7[SCK) PA7(ADC7) 32
10 RESET AREF 31
C1 22pF VCC 11 VCC AGND 30 VCC
1

12 GND AVCC 29
C3 100nF1 L1 13 XTAL2 PC7(TOSC2) 28
SW2 1 2 14 XTAL1 PC6(TOSC1) 27
X1 1 2 15 PD0(RXD) PC5 26
1 2 16 PD1(TXD) PC4 25
1 2 17 PD2(INT0) PC3 24
2

C2 22pF 1 2 18 PD3(INT1) PC2 23


1 2 19 PD4(OC1B) PC1(SDA) 22
1 2 20 PD5(OC1A) PC0(SCL) 21
1 2 PD6(ICP) PD7(OC2)
ATMEGA16

Hasil pemasangan komponen-komponen mencacah counter T0

PEMROGRAMAN MENCACAH TIMER T0


Program sebagai berikut ini

#include <mega16.h>
#include <delay.h>
#include <stdio.h>

unsigned char led=0;


char a;

void InisialisasiTIMER ();

void main (void)


{
DDRB=0x00;
DDRD=0xFF;
PORTD=led;
InisialisasiTIMER();
led = 0x01;
while(1)
{
if (led == 0x80)
{
led = 0x01;
}
a = TCNT0;
if (a == 0xFE)
{
PORTD=led;
TCNT0=0x00;
led=led <<1;
}
}
}

void InisialisasiTIMER ()
{
TCNT0=0x00;
TCCR0=0x05;
}

RANGKAIAN MENCACAH TIMER T1


HEADER 5

P5
1 P6
VCC 2 P7
3 RST
4 GND
5
JISP U4
P0 1 40
VCC P1 2 PB0(XCK/T0) PA0(ADC0) 39
P2 3 PB1(T1) PA1(ADC1) 38
P3 4 PB2(INT2/AIN0) PA2(ADC2) 37
P4 5 PB3(OC0/AIN1) PA3(ADC3) 36
P5 6 PB4(SS) PA4(ADC4) 35
R1 P6 7 PB5(MOSI) PA5(ADC5) 34
P7 8 PB6[MISO) PA6(ADC6) 33
RST 9 PB7[SCK) PA7(ADC7) 32
10 RESET AREF 31
C1 22pF VCC 11 VCC AGND 30 VCC
1

12 GND AVCC 29
C3 100nF1 L1 13 XTAL2 PC7(TOSC2) 28
SW2 1 2 14 XTAL1 PC6(TOSC1) 27
X1 1 2 15 PD0(RXD) PC5 26
1 2 16 PD1(TXD) PC4 25
1 2 17 PD2(INT0) PC3 24
2

C2 22pF 1 2 18 PD3(INT1) PC2 23


1 2 19 PD4(OC1B) PC1(SDA) 22
1 2 20 PD5(OC1A) PC0(SCL) 21
1 2 PD6(ICP) PD7(OC2)
ATMEGA16

Hasil pemasangan komponen-komponen mencacah counter T1


PEMROGRAMAN MENCACAH TIMER T1
Program sebagai berikut ini

#include <mega16.h>
#include <delay.h>
#include <stdio.h>

unsigned char led=0;


char a;

void InisialisasiTIMER ();

void main (void)


{
DDRB=0x00;
DDRD=0xFF;
PORTD=led;
InisialisasiTIMER();
led = 0x01;
while(1)
{
if (led == 0x80)
{
led = 0x01;
}
a = TCNT1L + TCNT1H;
if (a == 0xFE)
{
PORTD=led;
TCNT1L=0x00;
TCNT1H=0x00;
led=led <<1;
}
}
}

void InisialisasiTIMER ()
{
TCNT1L=0x00;
TCNT1H=0x00;
TCCR1A=0x00;
TCCR1B=0x05;
}
LATIHAN PEMROGRAMAN TIMER
1. Jelaskan program diatas
APLIKASI ADC

TUJUAN
1. Mahasiswa dapat menjalankan program CodeVisionAVR 2.
2. Mahasiswa dapat memahami cara kerja port ADC pada mikrokontroller
3. Mahasiswa dapat membuat program port ADC pada mikrokontroller

DASAR TEORI
ATmega16 mempunyai ADC (Analog to Digital Converter) internal dengan fitur sebagai
berikut (untuk lebih detil dapat mengacu pada datasheet) :
� 10-bit Resolution
� 65 - 260 μs Conversion Time
� 8 Multiplexed Single Ended Input Channels
� Optional Left Adjustment for ADC Result Readout
� 0 - VCC ADC Input Voltage Range
� Selectable 2.56V ADC Reference Voltage
� Free Running or Single Conversion Mode ~ ADC Start Conversion by Auto Triggering
on Interrupt 9Ibit ha l 49 Sources
� Interrupt on ADC Conversion Complete
� Sleep Mode Noise Canceler
Dibawah ini gambar timing diagram untuk mode single convertion maksudnya hanya satu input
chanel saja yang dikonversi.


� Gambar 4. 1 Timing diagram mode single conversion
RANGKAIAN ADC ATMEGA DENGAN LED
Rangkaian minimum untuk membaca ADC dengan tempilan LED ditunjukan pada Gambar 9.7
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’.
VCC
HEADER 5

3
P5
1 P6 R2
2 P7
3 RST 2 POT
4 GND
5
JISP U4
P0 1 40

1
VCC P1 2 PB0(XCK/T0) PA0(ADC0) 39
P2 3 PB1(T1) PA1(ADC1) 38
P3 4 PB2(INT2/AIN0) PA2(ADC2) 37
P4 5 PB3(OC0/AIN1) PA3(ADC3) 36
P5 6 PB4(SS) PA4(ADC4) 35
R1 P6 7 PB5(MOSI) PA5(ADC5) 34
P7 8 PB6[MISO) PA6(ADC6) 33
RST 9 PB7[SCK) PA7(ADC7) 32
10 RESET AREF 31
C1 22pF VCC 11 VCC AGND 30 VCC
1

12 GND AVCC 29
C3 100nF1 L1 13 XTAL2 PC7(TOSC2) 28
SW2 1 2 14 XTAL1 PC6(TOSC1) 27
X1 1 2 15 PD0(RXD) PC5 26
1 2 16 PD1(TXD) PC4 25
1 2 17 PD2(INT0) PC3 24
2

C2 22pF 1 2 18 PD3(INT1) PC2 23


1 2 19 PD4(OC1B) PC1(SDA) 22
1 2 20 PD5(OC1A) PC0(SCL) 21
1 2 PD6(ICP) PD7(OC2)
ATMEGA16

Hasil pemasangan komponen ADC LED

PEMROGRAMAN ADC ATMEGA16


Program sebagai berikut ini

#include <mega16.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)
{
data_adc=read_adc(0);
suhu=~data_adc;
PORTD = suhu;
}
}

LATIHAN PEMROGRAMAN ADC


1. Jelaskan program diatas
APLIKASI INTERUPSI
TUJUAN
1. Mahasiswa dapat menjalankan program CodeVisionAVR 2.
2. Mahasiswa dapat memahami cara kerja interupsi pada mikrokontroller
3. Mahasiswa dapat membuat program interupsi pada mikrokontroller

DASAR TEORI
Interupsi adalah suatu kejadian atau peristiwa yang menyebabkan mikrokontroler
berhenti sejenak untuk melayani interupsi tersebut. Program yang dijalankan pada saat melayani
interupsi disebut Interrupt Service Routine. Pada sistem mikrokontroler yang sedang
menjalankan programnya, saat terjadi interupsi , program akan berhenti sesaat, melayani
interupsi tersebut dengan menjalankan program yang berada pada alamat yang ditunjuk oleh
vektor dari interupsi yang terjadi hingga selesai dan kembali meneruskan program yang terhenti
oleh interupsi tadi.
Tabel 1. 1Interrupt vektor
Meskipun memerlukan pengertian yang lebih mendalam, pengetahuan mengenai
interupsi sangat membantu mengatasi masalah pemrograman mikroprosesor / mikrokontroler
dalam hal menangani banyak peralatan input/output. Pengetahuan mengenai interupsi tidak
cukup hanya dibahas secara teori saja, diperlukan contoh program yang konkrit untuk
memahami. ATMEGA16 memiliki 21 buah sumber interupsi. Interupsi tersebut bekerja jika bit I
pada Register status atau Status Register (SREG) dan bit pada masing-masing register bernilai 1.

RANGKAIAN INTERUPSI EKTERNAL


Rangkaian berikut digunakan untuk interupsi ekternal mikrokontroller. Rangkaian
tersebut menggunakan interupsi eksternal 0, 1, dan 2 yang menggunakan tampilan LED yang
dihubungkan pada Port A.
VCC VCC

U4 L1

VCC
INT2 P0
P1
1
2 PB0(XCK/T0) PA0(ADC0)
40
39
2
2
1
1
P2 3 PB1(T1) PA1(ADC1) 38 2 1
P3 4 PB2(INT2/AIN0) PA2(ADC2) 37 2 1
P4 5 PB3(OC0/AIN1) PA3(ADC3) 36 2 1
P5 6 PB4(SS) PA4(ADC4) 35 2 1
R1 P6 7 PB5(MOSI) PA5(ADC5) 34 2 1
P7 8 PB6[MISO) PA6(ADC6) 33 2 1
RST 9 PB7[SCK) PA7(ADC7) 32
10 RESET AREF 31
C1 22pF VCC 11 VCC AGND 30 VCC
1

12 GND AVCC 29
C3 100nF1 13 XTAL2 PC7(TOSC2) 28
SW2 14 XTAL1 PC6(TOSC1) 27
X1 15 PD0(RXD) PC5 26
16 PD1(TXD) PC4 25
17 PD2(INT0) PC3 24
2

C2 22pF 18 PD3(INT1) PC2 23


19 PD4(OC1B) PC1(SDA) 22
20 PD5(OC1A) PC0(SCL) 21
PD6(ICP) PD7(OC2)
ATMEGA16
VCC VCC

HEADER 5
INT1 INT0 P5
1 P6
2 P7
3 RST
4 GND
5
JISP

Rangkaian interupsi ekternal mikrokontroller

PEMROGRAMAN INTERUPSI EKTERNAL INT0


Program sebagai berikut ini
#include <mega16.h>
#include <delay.h>
#include <stdio.h>

unsigned char dt=0x01;

void InisialisasiINT0();

void main (void)


{
DDRA=0xff; InisialisasiINT0();
#asm ("sei");
while(1)
{
PORTA=dt;
delay_ms(100);
dt=dt<<1;
if (dt==0) {dt=0x01;}
}
}

interrupt [EXT_INT0] void ext_int0_isr(void)


{
unsigned char rr=0;
while (rr<5)
{
PORTA=0x0f;
delay_ms(5);
PORTA=0xf0;
delay_ms(5);
++rr;
}
}
void InisialisasiINT0 ()
{
GICR|=0x80;
MCUCR=0x0C;
MCUCSR=0x00;
GIFR=0x80;
}

LATIHAN PEMROGRAMAN INTRUPSI


1. Jelaskan program diatas
APLIKASI PWM

TUJUAN
1. Mahasiswa dapat menjalankan program CodeVisionAVR 2.
2. Mahasiswa dapat memahami cara kerja pwm pada mikrokontroller
3. Mahasiswa dapat membuat program pwm pada mikrokontroller

DASAR 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 ATMEGA16 dapat digunakan sebagai pembangkit gelombang
PWM. Mikrokontroler AVR ATMEGA16 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.

nilai counter nilai OCR TOP

Keluaran

Gambar 8.1 Prinsip Kerja Mode Fast PWM


Dalam mikrokontroler ATMEGA16, terdapat beberapa mode PWM. Mode PWM yang
akan dibahas adalah mode Fast PWM, karena dalam perancangan sistem robot ini menggunakan
mode Fast PWM. Pada mode Fast PWM, semakin besar nilai OCR, maka akan semakin besar
pula siklus kerja yang dihasilkan. Keluaran PWM akan berlogika tinggi setelah nilai TOP
tercapai sampai nilai OCR tercapai dan kemudian akan berlogika rendah sampai nilai TOP
tercapai kembali. Prinsip kerja dari Fast PWM dapat dilihat pada Gambar 10.1.

RANGKAIAN PWM
Rangkaian minimum untuk pwm melalui Port D.4 dan Port D.5 ditunjukan pada Gambar
10.2. Rangkaian tersebut menggunakan diver motor dc yaitu transistor. Rangkaian driver tersebut
akan di hubungkan dengan pin D.4 dan pin D.5.
JISP
1 RST
2 pinb.7
3 pinb.6 U1
4 pinb.5 1 40
5V 5 2 PB0(XCK/T0) PA0(ADC0) 39
3 PB1(T1) PA1(ADC1) 38
4 PB2(INT2/AIN0) PA2(ADC2) 37
5 PB3(OC0/AIN1) PA3(ADC3) 36
pinb.5 6 PB4(SS) PA4(ADC4) 35
R1 pinb.6 7 PB5(MOSI) PA5(ADC5) 34
pinb.7 8 PB6[MISO) PA6(ADC6) 33
RST 9 PB7[SCK) PA7(ADC7) 32
5V 10 RESET AREF 31
C1 22pF 11 VCC AGND 30 5V
1

12 GND AVCC 29
C3 100nF1 13 XTAL2 PC7(TOSC2) 28
SW2 14 XTAL1 PC6(TOSC1) 27
X1 15 PD0(RXD) PC5 26
16 PD1(TXD) PC4 25
17 PD2(INT0) PC3 24
2

C2 22pF 18 PD3(INT1) PC2 23


19 PD4(OC1B) PC1(SDA) 22
20 PD5(OC1A) PC0(SCL) 21
PD6(ICP) PD7(OC2)
ATMEGA16

12V2 MG2
1

D2

DIODE

MOTOR DC
2

EN2 Q2
TI9013
470 TIP3055

MG2
1

12V2
D1

DIODE

MOTOR DC
2

EN2
TI9013
470 TIP3055

Gambar 8.2 Hasil pemasangan komponen rangkaian minimum untuk pwm


PEMROGRAMAN PWM
Program sebagai berikut ini

//-------------------------------------------------------
// Program PWM
// DEKLARASI HEADER
//-------------------------------------------------------
#include <stdio.h>
#include <mega16.h>
#include <delay.h>
//------------------------------------------------------
//DEKLARASI SUB RUTIN
//------------------------------------------------------
void InisialisasiPWM();
//------------------------------------------------------
//DEKLARASI VARIABEL
//------------------------------------------------------
int data1;
int data2;
//------------------------------------------------------
//RUTIN UTAMA
//------------------------------------------------------
void main (void)
{
InisialisasiPWM();
while(1)
{
data1 = 50;
data2 = 1024;
OCR1A=data1;
OCR1B=data2;
TIFR=0;
}
}
//------------------------------------------------------
//SUB RUTIN INISIALISASI PWM
//------------------------------------------------------
void InisialisasiPWM()
{
DDRD=0xff;
TCCR1A=0xa3;
TCCR1B=0x0b;
TCNT1=0x0000;
}
LATIHAN PWM
1. Jelaskan program diatas
APLIKASI SERIAL PORT

TUJUAN
1. Mahasiswa dapat menjalankan program CodeVisionAVR 2.
2. Mahasiswa dapat memahami cara kerja serial port pada mikrokontroller
3. Mahasiswa dapat membuat program serial port pada mikrokontroller

DASAR TEORI
Universal synchronous dan asynchronous pemancar dan penerima serial adalah suatu alat
komunikasi serial sangat fleksibel. Jenis yang utama adalah :
� Operasi full duplex (register penerima dan pengirim dapat berdiri sendiri )
� Operasi Asychronous atau synchronous
� Master atau slave mendapat clock dengan operasi synchronous
� Pembangkit boud rate dengan resolusi tinggi
� Dukung frames serial dengan 5, 6, 7, 8 atau 9 Data bit dan 1 atau 2 Stop bit
� Tahap odd atau even parity dan parity check didukung oleh hardware
� Pendeteksian data overrun
� Pendeteksi framing error
� Pemfilteran gangguan ( noise ) meliputi pendeteksian bit false start dan pendeteksian low pass
filter digital
� Tiga interrupt yaitu TX complete, TX data register empty dan RX complete.
� Mode komunikasi multi-processor
� Mode komunikasi double speed asynchronous
USART harus diinisialisasi sebelum komunikasi manapun dapat berlansung. Proses inisialisasi
normalnyaterdiri daripengesetan boud rate, penyetingan frame format dan pengaktifan pengirim atau
penerimatergantung pada pemakaian. Untuk interrupt menjalankan operasi USART , global interrupt
flag ( penanda ) sebaiknya dibersihkan ( dan interrupt global disable ) ketika inisialisasi dilakukan.
Sebelum melakukan inisialisasi ulang dengan mengubah boud rate atau frame format, untuk
meyakinkan bahwa tidak ada transmisi berkelanjutan sepanjang peiode register yang diubah.
Flag TXC dapat digunakan untuk mengecek bahwa pemancar telah melengkapi semua pengiriman, dan
flag RXC dapat digunakan untuk mengecek bahwa tidak ada data yang tidak terbaca pada buffer
penerima. Tercatat bahwa flag TXC harus dibersihkan sebelum tiap transmisi ( sebelum UDR ditulisi )
jika itu semua digunakan untuk tujuan tersebut. USART sederhana inisialisasi kode contoh berikut
menunjukan fungsi satu assembly dan satu C itu mempunyai kesamaan dalam kemampuan. Pada contoh
tersebit mengasumsikan bahwa operasi asinkron menggunakan metode poling ( tidak ada interrupt
enable ) frame format yang tetap. Boud rate diberikan sebagai fungsi parameter.
Untuk kode assembly, parameter boud rate diasumsikan untuk di simpan pada register r16, r17. Ketika
menulis fungsi pada register UCSRC, bit URSEL (MSB) harus diset dalam kaitan dengan pembagian
penempatan I/O oleh UBRRH dan UCSRC. Lebih mengedepankan inisialisasi rutin dapat dibuat seperti
itu meliputi frame format sebagai parameter, disable interrupt dan lain-lain. Bagai manapun juga banyak
aplikasi menggunakan seting tetap boud dan register control, dan untuk aplikasi jenis ini dapat
ditempatkan secara langsung pada keseluruhan routine, atau dikombinasikan dengan inisialisasi kode
untuk modul I/O yang lain.
RANGKAIAN SERIAL PORT
Rangkaian berikut digunakan untuk interfacing Led dengan port serial. Rangkaian tersebut,
sebagai konverter dari serial ke pararel. Berikut adalah rangkaian serial led driver yang akan kita
hubungkan pada port serial. Rangkaian Led Driver Serial menggunakan Microcontroller ATMEGA16
yang dihubungkan ke port serial dengan menggunakan IC RS232 Rangkaian Serial LED Driver ini akan
mendeteksi setiap pengiriman data karakter dari port serial computer.
VCC
HEADER 5 U4 L1
P0 1 40 DATA0 2 1
VCC P5 P1 2 PB0(XCK/T0) PA0(ADC0) 39 DATA1 2 1
1 P6 P2 3 PB1(T1) PA1(ADC1) 38 DATA2 2 1
2 P7 P3 4 PB2(INT2/AIN0) PA2(ADC2) 37 DATA3 2 1
3 RST P4 5 PB3(OC0/AIN1) PA3(ADC3) 36 DATA4 2 1
4 GND P5 6 PB4(SS) PA4(ADC4) 35 DATA5 2 1
R1 5 P6 7 PB5(MOSI) PA5(ADC5) 34 DATA6 2 1
P7 8 PB6[MISO) PA6(ADC6) 33 DATA7 2 1
JISP PB7[SCK) PA7(ADC7)
RST 9 32
VCC 10 RESET AREF 31
C1 22pF 11 VCC AGND 30 VCC
1

12 GND AVCC 29 ADD8


C3 100nF1 13 XTAL2 PC7(TOSC2) 28 ADD9
SW2 PD0 14 XTAL1 PC6(TOSC1) 27 ADD10
X1 PD1 15 PD0(RXD) PC5 26 ADD11
PD2 16 PD1(TXD) PC4 25 ADD12
PD3 17 PD2(INT0) PC3 24 ADD13
2

C2 22pF PD4 18 PD3(INT1) PC2 23 ADD14


PD5 19 PD4(OC1B) PC1(SDA) 22 ADD15
PD6 20 PD5(OC1A) PC0(SCL) 21 PD7
PD6(ICP) PD7(OC2)
ATMEGA16

HEADER 3 U6
8 11
RX1 13 R2IN T1IN 12
1 7 R1IN R1OUT 10
2 TX1 14 T2OUT T2IN 9
3 T1OUT R2OUT
JSerial1 1uF 16V
1 4 1uF 16V
C+ C2+
+ C4 + C5

3 5
C1- C2-
1uF 16V 2 6 1uF 16V
V+ V- C9
+ C8 MAX232 +

Gambar 4.2 Hasil pemasangan komponen rangkaian serial mikrokontroller


PEMROGRAMAN PWM
Program sebagai berikut ini

//-------------------------------------------------------
//Program Bab 5.2. MENGIRIM DAN MENERIMA DATA
//-------------------------------------------------------
//-------------------------------------------------------
//DEKLARASI HEADER
//------------------------------------------------------- #include
<mega16.h>
#include <delay.h>
#include <stdio.h>
//-------------------------------------------------------
//DEKLARASI VARIABEL
//------------------------------------------------------- unsigned
char data_terima = 0x00;
const long int osilator = 12000000;
unsigned long int UBRR;
//------------------------------------------------------
//DEKLARASI SUB RUTIN
//------------------------------------------------------void
InisialisasiUSART (unsigned long int baud_rate);
//------------------------------------------------------
//PROGRAM UTAMA
//------------------------------------------------------void
main(void)
{
DDRC = 0xFF;
PORTC = 0x00;
InisialisasiUSART(9600);
putsf("Selamat Datang Mas Iswanto"); putchar(13);
while(1)
{
putsf("Tekan sembarang tombol"); putchar(13);
data_terima = getchar();
delay_ms(100);
putsf("Anda menekan tombol ");
putchar(data_terima);; putchar(13);
}
}
//------------------------------------------------------
//SUB RUTIN BAUDRATE
//------------------------------------------------------void
InisialisasiUSART (unsigned long int baud_rate)
{
UBRR = (osilator/(16*baud_rate))-1;
UBRRL = UBRR;
UBRRH = UBRR>>8;
UCSRB = 0x18;
UCSRC = 0x86;
}
LATIHAN SERIAL PORT
1. Jelaskan program diatas

Anda mungkin juga menyukai