Buku Modul Mikrokontroller V - 1
Buku Modul Mikrokontroller V - 1
MIKROKONTROLLER
Dibuat Oleh:
Iswanto, S.T, M.Eng
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
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
#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).
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
#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();
}
}
}
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.
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
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
#include <mega16.h>
#include <delay.h>
void main(void)
{
DDRD=0xFF;
while(1)
{
bin7seg(0); delay_ms(100);
bin7seg(2); delay_ms(100);
}
}
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
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
C
15 PD0(RXD) PC5 26
16 PD1(TXD) PC4 25 D3
2
A
PD6(ICP) PD7(OC2)
ATMEGA16
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);
}
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.
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.
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
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
S4 S8 S12 S16
SW SW SW SW
S5 S9 S13 S17
SW SW SW SW
PD0
PD1
PD2 SW SW SW SW
PD3
PD4
PD5 S7 S11 S15 S19
PD6
PD7
SW SW SW SW
#include <lcd.h>
#include <stdio.h>
#include <mega16.h>
#include <delay.h>
#asm
.equ __lcd_port=0x18;PORTB
#endasm
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;
}
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
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
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
void InisialisasiTIMER ()
{
TCNT0=0x00;
TCCR0=0x07;
}
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
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
void InisialisasiTIMER ()
{
TCNT1L=0x00;
TCNT1H=0x00;
TCCR1A=0x00;
TCCR1B=0x07;
}
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
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
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
void InisialisasiTIMER ()
{
TCNT0=0x00;
TCCR0=0x05;
}
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
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
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
#include <mega16.h>
#include <stdio.h>
#include <delay.h>
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.
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
HEADER 5
INT1 INT0 P5
1 P6
2 P7
3 RST
4 GND
5
JISP
void InisialisasiINT0();
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.
Keluaran
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
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
//-------------------------------------------------------
// 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
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 +
//-------------------------------------------------------
//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