MIKROKONTROLER
MS3201/ MEKATRONIKA II
SEMESTER I 2013-2014
1. Mikrokontroller ATMega8535/16/32
Mikrokontroler ATMega8535/16/32 memiliki 40 pin untuk model PDIP, dan 44 pin untuk
model TQFP dan PLCC. Nama-nama pin pada mikrokontroler ini adalah
1. VCC untuk tegangan pencatu daya positif.
2. GND untuk tegangan pencatu daya negatif.
3. PortA (PA0 - PA7) sebagai port Input/Output dan memiliki kemampuan lain yaitu
sebagai input untuk ADC
4. PortB (PB0 – PB7) sebagai port Input/Output dan juga memiliki kemampuan yang lain.
5. PortC (PC0 – PC7) sebagai port Input/Output untuk ATMega8535.
6. PortD (PD0 – PD7) sebagai port Input/Output dan juga memiliki kemampuan yang lain.
7. RESET untuk melakukan reset program dalam mikrokontroler.
8. XTAL1 dan XTAL2 untuk input pembangkit sinyal clock.
9. AVCC untuk pin masukan tegangan pencatu daya untuk ADC.
10. AREF untuk pin tegangan referensi ADC.
Sistem minimum mikrokontroler adalah sistem elektronika yang terdiri dari komponen-
komponen dasar yang dibutuhkan oleh suatu mikrokontroler untuk dapat berfungsi dengan
baik. Pada umumnya, suatu mikrokontoler membutuhkan dua elemen (selain power supply)
untuk berfungsi: Kristal Oscillator (XTAL), dan Rangkaian RESET. Analogi fungsi Kristal
Oscillator adalah jantung pada tubuh manusia. Perbedaannya, jantung memompa darah dan
seluruh kandungannya, sedangkan XTAL memompa data. Dan fungsi rangkaian RESET adalah
untuk membuat mikrokontroler memulai kembali pembacaan program, hal tersebut
dibutuhkan pada saat mikrokontroler mengalami gangguan dalam meng-eksekusi program.
Pada sistem minimum AVR khususnya ATMEGA8535 terdapat elemen tambahan (optional),
yaitu rangkaian pengendalian ADC: AGND (= GND ADC), AVCC (VCC ADC), dan AREF (=
Tegangan Referensi ADC). Jangan lupa tambahkan konektor ISP untuk mengunduh
(download) program ke mikrokontroler. Peta Memory dan Sistem Minimum AT8535 dapat
dilihat pada gambar dibawah ini :
Peta Memory Flash Memory
3. Kita diberi pilihan, apakah menggunakan wizard atau tidak. Jika iya, pilih yes, lalu Pilih
Type Chip AVR AT90,ATiny, ATmega,FPSLIC.
4. Akan mucul box dialog lagi, silakan pilih chip yang akan digunakan. Misalnya
Atmega16.
1.
2.
7. Setelah proses meyimpan file selesai, mucul seperti dibawah ini. Disinilah kita akan
menuliskan program.
Header merupakan include file (.hex), yang berguna untuk memberitahu compiler agar
membaca file yang ada pada library tersebut. Sehinga compiler dapat mengenali definisi dari
instruksi yang telah dibuat pada program dan tidak dianggap error. Sedangkan komentar
berguna untuk mempermudah mengingat fungsi dari statment yang kita buat diprogram.
Ada dua cara penulisan komentar yaitu dengan menggunakan “//’ (untuk komentar 1 baris)
dan “/*_____*/”(untuk komentar lebih dari 1 baris/bisa berupa paragraf). Contoh :
2. Variable
Variable adalah perintah untuk menyimpan data untuk dibaca datanya dengan
diwakilkan memori pada mikrokontroller. Namun sebelumnya harus dideklarasikan dengan
“tipe data” dan “nama variable” yang akan digunakan. Untuk nama varible dan fungsi dapat
berupa huruf (A...Z, a...z) dan angka (0...9), juga karakter underscore(_). Cara penulisan
hanya bisa diawali dengan huruf atau underscore.
Varible global adalah variable yang nilainya dapat diakses dan ditulis dari seluruh fungsi
program yang ada. Sedangkan varible lokal hanya dapat diakses dan ditulis sesuai dimana
letak dari variable tersebut.
3. Perulangan “while”
Merupakan suatu perulangan yang dimana alur programnya yaitu, jika suatu kondisi
bernilai true atau benar maka pernyataan-pernyataan dibawahnya (while) akan diteruskan
hingga selesai kemudian akan menguji kembali kondisi diatas. Contoh pemrograman :
#include<atmega8535.h>
int main(void);
#include <atmega8535.h>
#include <delay.h> //memanggil pustaka tunda pada library
int main(void);
while(1)
{ PORTC.1=0;
delay_ms(200);
PORTC.1=1;
delay_us(20000);}:
#include <atmega8535.h>
int main(void);
do
{ PORTC=0xff; //pernyataan-pernyataan
delay_ms(200);
PORTC=0x0f;
delay_ms(200);
A++;}
while(A<10); //ujikondisi mengulang sampai A<10
#include <atmega8535.h>
int main(void);
a=1;
for (b=1; b<40; b++) //akan melakukan perulangan sebanyak
{ a=a*2; //40 kali
PORTB=a;};
8. Operator
Operator adalah karakter – karakter khusus untuk manipulasi variable. Operator terdiri
dari operator aritmatika, penugasan, logika dan bit.
Contoh :
int main(void);
{
unsigned int A; //variable dengan nama A tipe (integer)
unsigned char F; //variable dengan nama F tipe (char)
unsigned char G; //variable dengan nama G tipe (char)
//Operator or
A=F|G; //0x6E or 0xF3 hasil 0xFF (0b11111111)
//Operator ex-or
A=F^G; //0x6E xor 0xF3 hasil ox9D (0b10011101)
Contoh :
…………
if(A==5 && B==6) //portC bernilai 0xFF jika A=5 & B=6
{PORTC=0xFF;}
else if (C==5||D==6) //portC bernilai 0x00 jika C=5 or D=6
{PORTC=0x00;}
else if (!E==5) //portC bernilai 0x0F jika E bukan = 5
{PORTC=0x0F;}
else
{PORTC=0xF0;}
……..
“goto” digunakan untuk melompat ke baris tertentu (jika didalam fungsi tidak dapat
keluar ke fungsi lainnya) yang telah diberi label. Contoh :
………
kembali; //label lompatan
...........isi program…………. //isi program/perintah
……………………………………….
goto kembali; //lompat ke label lompatan (kembali)
Contoh :
………….
unsigned char data;
switch(data)
{
case 5: PORTA=0xFF; break;
case 4: PORTB=0xFF; break;
case 3: PORTC=0xFF; break;
default: PORTA=0x00; PORTB=0x00; PORTC=0x00; break;
}
……………
Sebelum memulai pemrograman kita harus terlebih dahulu mengetahui susunan dari
program, yaitu :
#include <mega16.h>
#include <delay.h> Header
int a;
Variabel
char x; Global
void subprogram()
{ Pembuka fungsi
PORTB=0b00000111; subprogram
delay_ms(200); Subrutin/sub program
Isi subprogram
PORTB=0b11100000;
delay_ms(200);
} Penutup fungsi subprogram
int main(void)
{ Pembuka fungsi program utama
……………
Isi program utama
…………..
while(1) Program Utama
{ Pembuka fungsi while
Subprogram;
} Penutup fungsi while
} Penutup fungsi program utama
Pada latihan kali ini kita akan coba mempraktekan bagaimana cara mengendalikan
output berupa lampu LED. Agar memudahkan dalam memprogram coba lihat susunan
PORT dibawah ini.
Missal PORTB jadikan output dan kita tuliskan perintah seperti berikut :
…….
PORTB=0b00001111;
……..
PORTB=0b00001111;
Hasilnya LED0 s/d LED3 akan mati/off sedangkan LED4 s/d LED7 akan menyala/on. Karena
dalam rangkaian output/input sudah terdapat system pull up jadi ketika bernilai 0=menyala
dan ketika bernilai 1=mati.
a. delay_ms(lamanya waktu);
Perintah ini berfungsi untuk menjeda program sesuai dengan waktu yang kita
perintahkan, namun untuk memanggil fungsi ada perintahnya yaitu, kita tuliskan #include
<delay.h> pada awal program/dibawah #include <mega16.h>. contoh :
………….
PORTB=0b00001111;
delay_ms(200);
PORTB=0b11110000;
delay_ms(200);
…………
Artinya, lampu pada portb (LED0 s/d LED3) akan mati dan yang lainnya menyala selama
200ms lalu berganti (LED4 s/d LED7) yang akan mati dan yang lainnya menya.
#include <mega16.h>
#include <delay.h>
// Declare your global variables here
void main(void)
{
PORTB=0xFF;
DDRB=0xFF;
while (1)
{
// Place your code here
PORTB=0xFF;
delay_ms(300);
PORTB=0x00;
delay_ms(300);
}
}
Setelah sama seperti pada list program diatas maka sekarang download program dari PC to
Mikrokontroller :
1. Pilih Project Configure After Build Program the chip OK
a. b.
3. Klik Program the chip maka program otomatis langsung ditransfer dari PC to
Mikrokontroller
1. Running Led
a. Buatlah program dengan nama file “latihan_rl1”.Yang dimana aktifkan PORTA sebagai
output, kemudian program agar LED0 s/d LED7 bisa menyala bergantian dengan jeda waktu
400ms. Program mengulang.
b. Buatlah program dengan nama file “latihan_rl2”. Yang dimana aktifkan PORTB sebagai
output, kemudian program agar LED0 menyala bergantian menuju LED3 diikuti LED7 menyala
bergantian menuju LED4 dengan jeda waktu 500ms. Program mengulang.
2. Traffict Light
a. Buatlah program traffic light 2 arah. Dengan kondisi :
3. Light Control
a. Buat program agar lampu pada PORTD.0 dan PORTD.1 menyala bergantian namun
sebelum pergantian masing – masing lampu menyala sebanyak 3 kali kedipan dengan
jeda waktu 0,3sec.(LOOPING). Simpan dengan nama file “Latihan_lc1”.
b. Buat program agar lampu pada PORTD.0 berkedip dengan jeda 300ms, ketika kedipan ke 3
maka PORTD.1 menyala, kedipan ke 6 maka PORTD.2 ikut menyala, kedipan ke 9 maka
PORTD.3 ikut menyala. Ketika kedipan ke 12 maka semua lampu mati dan program kembali ke
awal (LOOPING). Simpan dengan nama file “Latihan_lc2”.
Pada bab ini kita akan mempelajari system dari input berupa push button atau sensor
tekan yang akan mengendalikan lampu. Pada system I/O ini terdiri dari 8 PB yaitu mulai dari
PB0 s/d PB7 (lihat gambar dibawah ini).
Untuk mengendalikan PB kita cukup setting pada salah satu port menjadi output dan
yang satunya lagi sebagai input, output untuk tampilan kendali LED dan input untuk kendali
PB. Contoh soal PB berada pada PINA dan LED pada PORTB.
Maka susunan pemrogramannya akan tampak seperti pada list program dibawah ini.
void main(void)
{
PORTA=0xFF;
DDRA=0x00;
PORTB=0xFF;
DDRB=0xFF;
while (1)
{
// Place your code here
if(PINA.0==0) { PORTB.0=0; }
else if(PINA.1==0) { PORTB.1=0; }
else if(PINA.2==0) { PORTB.2=0; }
else { PORTB=0xFF; }
}
}
Setelah sama seperti pada list program diatas maka sekarang download program dari PC to
Mikrokontroller :
1. Pilih Project Configure After Build Program the chip OK
a. b.
3. Klik Program the chip maka program otomatis langsung ditransfer dari PC to
Mikrokontroller
b. Buat program dengan nama file “Latihan_sp2”. Ketika PB0 ditekan maka LED akan
menyala bergantian dari LED0 s/d LED7 terus menerus, ketika PB7 ditekan maka LED0
dan LED7 akan menyala bergantian terus menerus, dengan jeda waktu 400ms.
Gunakan PORTD sebagai output dan PINA sebagai input.
a. Buatlah program dengan nama file “Latihan_logic1”. Setting PORTD sebagai output,
PORTA sebagai input. Ketika PB0 dan PB7 ditekan maka LED4 dan LED3 akan
menyala, namun ketika dalam kondisi salah satu dari PB1 & PB2 tertekan atau
keuanya terlepas maka LED tidak ada yang menyala.
b. Buatlah program dengan nama file “Latihan_logic2”. Setting PORT sama seperti pada
tugas 1, namun LED4 dan LED3 akan menyala ketika salah satu dari PB0 dan PB7 ada
yang tertekan atau keduanya tertekan.
c. Buatlah program dengan nama file “Latihan_logic3”. Setting PORT sama seperti pada
tugas 1, namun LED4 dan LED3 akan menyala jika salah satu PB0 dan PB7 ada yang
tertekan.
d. Buatlah program dengan nama file “latihan_logic4”. Setting PORT sama seperti pada
tugas 1, namun disini LED akan menyala dan mati dengan dikendalikan oleh nilai/data
yang masuk. Jika nilai=0 maka LED0 yang menyala dan nilai=1 maka LED1 yang akan
menyala seterusnya sampai nilai=7 maka LED7 yang akan menyala. Untuk
penjumlahan digunakan PB0 dan pengurangan digunakan PB7.
LCD yang digunakan adalah tipe M1632, LCD ini memiliki 2 baris dimana masing-
masing baris memuat 16 karakter. Selain sangat mudah untuk dioperasikan , kebutuhan daya
pada LCD ini juga sangat rendah sehingga dapat menghemat penggunaan catu daya. Untuk
karakteristik dari LCD tersebut bisa dilhat pada table konfigurasi pin dibawah ini.
No PIN Fungsi
1 Vss 0V (Gnd)
2 Vcc 5V
3 Vlc LCD Contrash Voltage
4 RS Register Select; H: Data input; L: Instruction Input
5 RD H: Read; L: Write;
6 EN Eneble Signal
7 D0
8 D1
9 D2
10 D3 Data Bus
11 D4
12 D5
13 D6
14 D7
15 V+BL Positif Backlight Voltage (4-4,2V; 50-200mA)
16 V-BL Negatif Backlight Voltage (0V; Gnd)
ch=lcd_read_byte(0x10);
lcd_clear();
e. void lcd_putchar(char c)
Instruksi untuk menampilkan karakter c pada posisi kursor saat itu. Contoh :
d. void lcd_puts(char*str)
untuk menampilkan string yang sebelumnya sudah tersimpan pada SRAM. Jadi
sebelummengguakan instruksi ini string sebaiknya disimpan dulu pada SRAM yang mana
memerlukan pustaka stdio.hex. contoh :
#include <mega8535.h>
// Alphanumeric LCD Module functions
#include <alcd.h> //pustaka LCD sudah terpanggil
#include<stdio.h> //pustaka stdio.
Untuk menampilkan karakter khusus pada LCd cukup menggunakan Instruksi seperti
berikut :
sprintf(buf,”angka %d \xf4”,50);
Save dengan nama file “contoh_soal3” sebanyak 3 kali dengan nama yang sama. Maka
susunan pemrograman akan tampak seperti pada listing pemrograman dibawah ini :
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#include <alcd.h>
void main(void)
{
PORTA=0xFF;
DDRA=0x00;
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0x00;
lcd_init(16);
Setelah sama seperti pada list program diatas maka sekarang download program dari PC to
Mikrokontroller :
a. b.
c.
3. Klik Program the chip maka program otomatis langsung ditransfer dari PC to
Mikrokontroller
Setelah selesai memprogram, sekarang kita lihat apa yang tampil pada LCD? Sesuai dengan
listprogram diatas maka akan tampil “my_name” pada LCD selama 500ms setelah itu clear
dan berganti nama “Arif_Sy” pada LCD selama 500ms kemuadian LCD bersih kembali selama
500ms dan program akan kembali ke awal.
a. Buatlah program dengan nama file “Latihan_rt1”. Tampilkan huruf A disudut kiri atas
selama 400ms, kemudian berganti ke sudut kanan bawah selama 300ms. Program
mengulang.
b. Buatlah program dengan nama file “Latihan_rt2”. Tampilkan nama kamu disudut kiri
atas, setelah itu buat tampilan tersebut bisa bergerak kearah kanan dengan jeda
waktu 400ms. Program mengulang.
c. Buatlah program dengan nama file “Latihan_rt3”. Seperti pada tugas 2, namun ketika
sudah sampai disudut kanan atas maka diteruskan bergerak kearah kiri. Program
mengulang.
a. Buatlah Program dengan nama file “Latihan_pbl1”. Pertama setting PORTB sebgai
input, tampilkan nama kamu disudut kiri atas, kemudian program agar bisa bergeser
ke kanan dan kekiri serta kolom atas dan bawah LCD menggunakan PB0=geser kanan,
PB7=geser kiri, PB1=geser bawah, PB6=geser atas.