Anda di halaman 1dari 36

MODUL PRAKTIKUM

MIKROKONTROLER
MS3201/ MEKATRONIKA II
SEMESTER I 2013-2014

DEPATERMEN TEKNIK MESIN


FAKULTAS TEKNIK MESIN DAN DIRGANTARA
INSTITUT TEKNOLOGI BANDUNG
2013

Dasar Pemrograman Mikrokontroller - 1


BAB I
PENGENALAN HARDWARE DAN APLIKASI BANTU

1. Mikrokontroller ATMega8535/16/32

ATMega8535 merupakan salah satu mikrokontroler 8 bit buatan Atmel untuk


keluarga AVR yang diproduksi secara masal pada tahun 2006. Karena merupakan keluarga
AVR, maka ATMega8535 juga menggunakan arsitektur RISC. Reduced Instruction Set
Computing (RISC) atau "Komputasi set instruksi yang disederhanakan" pertama kali digagas
oleh John Cocke, peneliti dari IBM di Yorktown, New York pada tahun 1974 saat ia
membuktikan bahwa sekitar 20% instruksi pada sebuah prosesor ternyata menangani sekitar
80% dari keseluruhan kerjanya. Komputer pertama yang menggunakan konsep RISC ini
adalah IBM PC/XT pada era 1980-an. Istilah RISC sendiri pertama kali dipopulerkan oleh
David Patterson, pengajar pada University of California di Berkely.

1.1. Konfigurasi Pin

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.

Dasar Pemrograman Mikrokontroller - 2


1.2. Kemampuan ATMega16

Adapun Kemampuan dari ATMega16 :


a. Sistem mikrokontroler 8 bit berbasis RISC dengan kecepatan maksimal 16 MHz.
b. Memiliki memori flash 8 KB, SRAM sebesar 512 byte dan EEPROM (Electrically
Erasable Programmable Read Only Memory) sebesar 512 byte.
c. Memiliki ADC (Pengubah analog-ke-digital) internal dengan ketelitian 10 bit sebanyak
8 saluran.
d. Memiliki PWM (Pulse Wide Modulation) internal sebanyak 4 saluran.
e. Portal komunikasi serial (USART) dengan kecepatan maksimal 2,5 Mbps.
f. Enam pilihan mode sleep, untuk menghemat penggunaan daya listrik.

1.3. System Minimun ATMega8535/16/32

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

Dasar Pemrograman Mikrokontroller - 3


Pada memory data bahwa alamat $0000-$001F ditempati oleh register file. I/O register
menempati alamat dari $0020-$005F. Sedangkan sisanya sebagai internal SRAM sebesar 512
byte ($0060-$025F).

Sistem Minimum ATMega8535/16/32

Dasar Pemrograman Mikrokontroller - 4


Blok Diagram ATMega 8535

2. Program Bantu Aplikasi CodeVision AVR

Ada banyak program untuk menuliskan bahasa C diantaranya CodevisionAVR, AVR


Studio, Bascom AVR dll. CodevisionAVR dipilih karena program ini dirasa lebih mudah
digunakan untuk pemula dikarenakan adanya setiing konfiigurasi mikrokontroller melalui
wizard. Penggunaan aplikasi ini dapat dilakukan dengan tahapan sebagai berikut :

1. Jalankan aplikasi code vision AVR pada komputer anda

Dasar Pemrograman Mikrokontroller - 5


2. Pilih file – new, kemudian muncul box dialog, pilih project.

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.

Dasar Pemrograman Mikrokontroller - 6


5. Buka tab Ports. Pada bagian ini, kita diberi kesempatan untuk mengatur ports-ports
yang akan digunakan. Pilih PortC sebagai output.

6. Jika sudah, klik file-generate,save and Exit


Proses menyimpan file dilakukan sebanyak 3 kali, masing-masing menghasilkan
ekstensi *.C , *.prj, dan *.cwp. Simpan dengan nama file ledblink.

1.

2.

Dasar Pemrograman Mikrokontroller - 7


3.

7. Setelah proses meyimpan file selesai, mucul seperti dibawah ini. Disinilah kita akan
menuliskan program.

8. Dasar Input dan Output


Output
PORTX=data; //mengirim data secara byte ke portX(A,B,C,D)
Input
Data_in=PINX; //mengambil data byte dari pinX(A,B,C,D) to Var

Sebelum memulai pemrograman dasar I/O dengan bahasa C perlu diketahui


bahwa mikrokontroller ATmega8535 perlu disetting DDR dan PORT agar bisa
digunakan sebagaimana mestinya.

DDR bit=1 DDR bit=0


PORT bit=1 Output; hight Input; R pull-up
PORT bit=0 Output; low Input; Floating
Dasar Pemrograman Mikrokontroller - 8
Contoh :
…..
PORTA=0xCC;
DDRA=0x0F;
…..
Dari DDR terlihat bahwa port A0-3=Output, port A4-7=Input. Sedangkan dari PORT
terlihat bahwa PA0-1=low, PA2-3=Hight, PA4-5 tanpa Rpull-up (Floating) dan PA6-7
dengan Rpull-up.pengaturan I/O port bisa dilakukan untuk tiap bit dengan fungsi yang
berbeda. Port I/O hanya memiliki arus 20mA.

Dasar Pemrograman Mikrokontroller - 9


BAB II
INSTRUKSI PEMROGRAMAN BAHASA C

1. Header dan Komentar

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 :

#include <mega8535.h> //program include dengan file header 8535


/*yang dimana terdapat informasi dan fungsi untuk kontroller chip atmel AT 8535*/
#include <delay.h> //program include dengan pustaka tunda

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.

Tabel macam-macam tipe data


Tipe Data Size Range
(bits)
bit 1 0,1
char 8 -128 to 127
unsigned char 8 0 to 255
Signed char 8 -128 to 127
int 16 -32768 to 32767
short int 16 -32768 to 32767
unsigned int 16 0 to 65535
signed int 16 -32768 to 32767
long int 32 -2147483648 to 2147483647
unsigned long int 32 0 to 4294967295
signed long int 32 -2147483648 to 2147483647
Float 32 ±1.175e-38 to ±3.402e38
Double 32 ±1.175e-38 to ±3.402e38

Dasar Pemrograman Mikrokontroller - 10


Khusus untuk tipe data bit hanya dapat dideklarasikan sebagai variable global. Adapun
cara penulisan konstanta :
1. int atau long int, format desimal (1234), biner (0b101001), heksadesimal (0xff), oktal
(0777).
2. unsigned int (10000U).
3. Long int (99L).
4. unsigned long int (99UL).
5. Floating point (1.234F).
Karakter konstanta harus diikuti dengan tanda kutip (‘a’) sedangkan konstanta string
(“saya arif”). Contoh penulisan program :

#include <mega8535> //program include dengan file header 8535


#include <delay.h> //Program include dengan pustaka delay
unsigned char a, b; //dklarasi variable global
char buf[33];
/*deklarasi fungsi atau prosedur*/
unsigned char lampu(unsigned char bitn)
{
PORTB=bitn & 0x3C;
}

void main (void); //Program utama


char data; //deklarasi variable lokal
PORTB=0x00;
DDRA=0xF0;
while(1)
{..};
}

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);

while(PORTB.1=0) //pengulangan jika portb bit 1 bernilai 0


{ PORTC=0x00 //pernyataan pengulangan portc=0 selama portb
}; //bernilai 0

Dasar Pemrograman Mikrokontroller - 11


4. Pustaka Tunda
Merupakan suatu perintah untuk menjeda alur program. Ada dua instruksi perintah
pada pustaka tunda yaitu :
delay_us(500); //jeda dengan waktu 500 mikro detik
delay_ms(500); //jeda dengan waktu 500 mili detik
Adapun cara untuk memanggi pustaka tunda, mudah saja cukup dengan menambahkan
perintah include,seperti contoh dibawah ini :

#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);}:

5. Larik atau Array


Array adalah variable yang berisi sekumpulan data yang mempunyai tipe data yang
sama berbentuk matrik tunggal atau matrik multidimensional.
Contoh penulisan
Array satu dimensi :
Tipe_Variabel Nama_array[banyaknya_elemen]={isi aray};
Array dua dimensi
Tipe_variabel Nama_Array[Banyaknya_element1] [Banyaknya_element2]={ isi aray};

6. Perulangan “do – while”


Merupakan suatu perulangan yang dimana pernyataan di eksekusi atau dilakukan
terlebih dahulu dan setelah pernyataan terakhir baru program di uji kondisinya. Contoh :

#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

Dasar Pemrograman Mikrokontroller - 12


7. Perulangan “for”
Merupakan suatu perulangan yang akan melakukan beberapa kali sesuai yang
diinginkan. Contoh :

#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.

8.1. Operator Aritmatika


Binary Operator Keterangan Contohnya
+ Penambahan Z=c+a
- Pengurangan Z=c-a
* Perkalian Z=c*a
/ Pembagian Z=c/a
% Modulo Z=c%a

Unary Operator Keterangan Contohnya


++ Penambahan nilai dengan Z++
nilai 1 (increment)
-- Pengurangan nilai dengan Z--
nilai 1 (decrement)

8.2. Operator Penugasan


Penugasan Penjelasan Contoh Keterangan
= Pemberian nilai G=2 -
+= Penambahan nilai G+=2 G=G+2
-= Pengurangan nilai G-=2 G=G-2
*= Perkalian nilai G*=2 G=G*2
/= Pembagian nilai G/=2 G=G/2
%= Modulo nilai G%=2 G=G%2
<<= Pergeseran nilai ke kiri G<<=2 G=G<<2
>>= Pergeseran nilai ke kanan G>>=2 G=G>>2

Dasar Pemrograman Mikrokontroller - 13


8.3. Operastor Relasional
Untuk menguji benar atau tidaknya variable terhadap nilai yang akan diuji, operator ini
biasanya digunakan pada perintah yang terdapat kondisinya.
Operator Kondisi Contoh
== Sama dengan if(A==5) //jika nilai A sama dengan 5
!= Tidak sama dengan if(A!=5) //jika nilai A tidak sama dengan 5
> Lebih besar if(A>5) //jika nilai A lebih besar dari 5
< Lebih kecil if(A<5) //jika nilai A lebih kecil dari 5
>= Lebih besar sama dengan if(A>=5) //jika nilai A lebih besar sama
dengan 5
<= Lebih kecil sama dengan if(A<=5) //jika nilai A lebih kecil sama
dengan 5

8.4. Operator Bit


Berfungsi untuk mengoperasikan nilai didalam variable
Operator Operation
& Perintah kogika and
| Perintah logika or
^ Perintah lohika ex-or
~ Perintah logika not
>> Perintah untuk menggeser tiap bit ke kanan
<< Perintah untuk menggeser tiap bit ke kiri

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)

F=0x6E //pemberian nilai ke variable F (0x6E)


G=0xF3 //pemberian nilai ke variable G (0xF3)
A=F&G; //0x6E and 0xF3 hasil 0x62 (0b01100010)

//Operator or
A=F|G; //0x6E or 0xF3 hasil 0xFF (0b11111111)

//Operator ex-or
A=F^G; //0x6E xor 0xF3 hasil ox9D (0b10011101)

//Operator geser bit ke kanan


A=F>>2; //0x6E = 0b01101110 >>2 hasil 0b00011011

//Operator geser bit ke kiri


A=F<<2; //0x6E = 0b01101110 <<2 hasil 0b10111000
}

Dasar Pemrograman Mikrokontroller - 14


8.5. Operator Logika
Pemeriksaan suatu kondisi dengan dua buah data untuk menentukan benar atau
salahnya nilai kondisi tersebut. Biasanya operator ini digunakan pada control aliran
program bersyarat kondisi nilai.
Operator Operation
&& Operator untuk memeriksa dua data yang nilai keduanya
harus benar (and) baru kondisi tersebut dinyatakan
benar
|| Operator untuk memeriksa dua data yang salah satu nilai
harus benar (or) baru kondisi tersebut dinyatakan benar
! Operator ini untuk pemeriksaan nilai yang salah dianggap
benar (kebalikannya /not)

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;}
……..

9. Fungsi atau Subprogram(prosedur)


Suatu program yang dimana dapat menampung semua instruksi untuk suatu keperluan
tertentu yang sering dijalankan. Langkah ini akan dapat menghemat memory dibanding bila
instruksi – instruksi tersebut ditulis berulang – ulang. Cara penulisannya :
………..
void nama_prosedur (parameter) //fungsi tanpa tipe nilai variabel
{ pernyataan – pernyataan}
…….
void nama_prosedur(unsign char data;) //fungsi dengan nilai variabel
{pernyataan – pernyataan}
……..

10. Pernyataan Kendali (break, continue, Goto – Label)


“break” digunakan untuk keluar dari looping atau keluar dari salah satu operation dalam
keadaan ada perintah maupun tidak dalam operation tersebut. Contoh :
…….
switch(data)
{case 10 : data++; break;
case 20 : data--; break;
}

Dasar Pemrograman Mikrokontroller - 15


“continue” digunakan untukmelewati satu pernyataan (operation) jika dalam kondisi
tersebut tidak melakukan kondisi apapun. Contoh :
…………….
if(a==15) //memeriksa kondisi a jika nilainya 15
{continue;} //jika nilainya benar tidak ada perintah apapun
else //perintah jika nilainya tidak sama
……………. //kode program jika nilainya tidak sama

“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)

11. Pengendali “if”


Untuk memeriksa satu kondisi untuk satu operasi jawaban
terakhir jika benar. Contoh :
……..
if(data==2) //uji kondisi data harus bernilai 2
{PORTB=0xFF;} //PORTB=0xFF jika data bernilai 2
………

12. Pengendali “if,else”


Untuk memeriksa satu kondisi dengan dua operation
jawaban jika benar dan salah . contoh :
……….
if(data==2) //uji kondisi jika data bernilai 2
{PORTB=0xFF;} //PORTB=0xFF jika data bernilai 2
else
{PORTB=0x00;} //PORTB=0x00 jika data tidak ada yang
benar
………..

Dasar Pemrograman Mikrokontroller - 16


13. Pengendalian “if-else,if-else,…..,else”(beberapa kondisi)
Digunakan untuk menguji beberapa kondisi untuk
beberapa operation jawaban. Contoh :
………….
if(data==2)
{PORTC=0xFF;}
else if(data==3)
{PORTB=0xFF;}
else if(data==4)
{PORTA=0xFF;}
else
{PORTC=0x00;
PORTB=0x00;
PORTA=0x00;}
…………….

14. Pengendalian “switch case”


Digunakan untuk memeriksa nilai variable dengan beberapa kemungkinan jawaban
yang didapat hal ini hamper sama dengan penggunaan pengendalian if else namun pada
switch case penulisannya lebih ringkas.

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;
}
……………

Dasar Pemrograman Mikrokontroller - 17


BAB III
PEMROGRAMAN APLIKASI OUTPUT

1. Pengenalan Struktur Pemrograman

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;
……..

Dasar Pemrograman Mikrokontroller - 18


Dengan kata lain kalian akan mengendalikan lampu :

PORTB=0b00001111;

LED7 LED6 LED5 LED4 LED3 LED2 LED1 LED0

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.

Contoh soal pemrograman (output) :


1. Buka CVAVR  File  new
2. Creat New File  Project  OK  Confirm  Yes
seperti pada gambar dibawah ini :

Dasar Pemrograman Mikrokontroller - 19


3. Pilih ATmega, seperti pada gambar dibawah ini :

4. Setting (Chip & Clock)  Setting Port B menjadi Output


Seperti pada gambar dibawah ini

5. Pilih Generate Program, save & exit.

Dasar Pemrograman Mikrokontroller - 20


Save sebanyak 3 kali dengan nama yang sama.
Maka susunan pemrogramannya akan tampak seperti pada list program dibawah ini.

#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.

Dasar Pemrograman Mikrokontroller - 21


c.

2. Build All project

3. Klik Program the chip maka program otomatis langsung ditransfer dari PC to
Mikrokontroller

Dasar Pemrograman Mikrokontroller - 22


Setelah selesai mendownload sekarang perhatikan pada output mikrokontroller (LED), maka
lampu akan menyala semua selama 300ms kemudian akan mati selama 300ms dan program
kembali terus mengulang, dengan kata lain program memanipulasi seperti gerakan lampu
disko atau flip-flop.

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.

* Pokok Bahasan : Library Penjedaan/delay, for (pengulangan tidak bersyarat), go to


(pengulangan/jump).

2. Traffict Light
a. Buatlah program traffic light 2 arah. Dengan kondisi :

simpan dengan nama file “Latihan_tl1”, Gunakan PORTB sebagai Output


 lampu merah 1 menyala diikuti dengan lampu hijau 2 selama 600ms
 lampu merah 1 menyala diikuti dengan lampu kuning 2 selama 300ms
 lampu merah 1 menyala diikuti dengan lampu merah 2 selama 200ms
 lampu kuning 1 menyala diikuti dengan lampu merah 2 selama 300ms
 lampu hijau 1 menyala diikuti dengan lampu merah 2 selama 600ms
 lampu kuning 1 menyala diikuti dengan lampu merah 2 selama 300ms
 lampu merah 1 menyala diikuti dengan lampu merah 2 selama 200ms
 lampu merah 1 menyala diikuti dengan lampu kuning 2 selama 300ms

*Pokok Bahasan : Library Penjedaan/delay, while(pengulangan tidak bersyarat),


Bolean/tabel kebenaran.

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”.

*Pokok Bahasan : Library Penjedaan/delay, for (pengulangan bersyarat), while


(superloop). If-else (pengecekan), Variable.

Dasar Pemrograman Mikrokontroller - 23


BAB IV
PEMROGRAMAN APLIKASI INPUT & OUTPUT

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).

PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0

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.

Contoh soal pemrograman (input&output) :


1. Buka CVAVR  File  new
2. Creat New File  Project  OK  Confirm  Yes
seperti pada gambar dibawah ini :

3. Pilih ATmega, seperti pada gambar dibawah ini :

Dasar Pemrograman Mikrokontroller - 24


4. Setting (Chip & Clock)  Setting Port B menjadi Output
Seperti pada gambar dibawah ini

 

5. Pilih Generat File , save & exit

Save dengan nama file “contoh_soal2” sebanyak 3 kali.

Maka susunan pemrogramannya akan tampak seperti pada list program dibawah ini.

Dasar Pemrograman Mikrokontroller - 25


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

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.

Dasar Pemrograman Mikrokontroller - 26


c.
2. Build All project

3. Klik Program the chip maka program otomatis langsung ditransfer dari PC to
Mikrokontroller

Dasar Pemrograman Mikrokontroller - 27


Maksud list program diatas merupakan suatu system pengidentifikasian input (PINA0
s/d PINA2) dan (PORTB0 s/d PORTB2). Jika PINA.0 bernilai 0 (tertekan) maka LED0 atau
PORTB.0 akan bernilai 0 (menyala). Jika PINA.1 bernilai 0 (tertekan) atau PORTB.1 akan
bernilai 0 (menyala). Jika PINA.2 bernilai 0 (tertekan) atau PORTB.2 akan bernilai 0
(menyala). Dan jika tidak ada yang tertekan maka PORTB akan bernilai 0xFF (semua lampu
mati).

1. Scanning Push Button


a. Buatlah program dengan nama file “Latihan_sp1”. Ketika PB0 ditekan maka LED0
akan menyala dan PB1 ditekan maka LED1 akan menyala dan seterusnya sampai PB7
ditekan maka LED7 akan menyala. Untuk output gunakan PORTB dan Input gunakan
PINA.

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.

*Pokok Bahasan : Library Penjedaan/delay, while (pengulangan bersyarat), while


(superloop), if-else(pengecekan).

2. AND, OR, XOR Circuit Program

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.

*Pokok Bahasan : while(superloop), if-else(pengecekan), Variable global


(pemindahan data secara global), While(bersyarat), Switch Case.

Dasar Pemrograman Mikrokontroller - 28


BAB V
PEMROGRAMAN APLIKASI DISPLAY LCD

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.

Konfigurasi Pin LCD M1632

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)

1. Instruksi-instruksi Pustaka LCD


Instruksi pustaka LCD sudah disediakan oleh library lcd.h, instruksinya seperti berikut :

a. unsigned char lcd_init(unsigned char lcd_columns);


Berfungsi untuk inisialisasi lcd yang kemudian dilanjutkan dengan penghapusan serta
penempatan kursor pada lcd dengan posisi 0,0. Serta menentukan berapa banyak
karakter lcd yang digunakan atau sesuai dengan tipe lcd yang akan dipakai. Misalnya :

lcd_init(16); //inisialisasi dengan LCD tipe 16 karakter

b. unsigned char lcd_read_byte(unsigned char addr);


Instruksi ini membaca karakter dari RAM LCD, contoh :

ch=lcd_read_byte(0x10);

Dasar Pemrograman Mikrokontroller - 29


c. void lcd_clear(void)
Instruksi untuk menghapus tampilan di LCD dan menempatkan kembali kursor pada posisi
0, baris 0. Contoh :

lcd_clear();

d. void lcd_gotoxy(unsigned char x, unsigned char y)


Instruksi yang berfungsi untuk menyeting posisi kursor pada kolom x dan baris y. contoh :

lcd_gotoxy(4,1); //menempatkan kursor pada kolom 4 baris 1

e. void lcd_putchar(char c)
Instruksi untuk menampilkan karakter c pada posisi kursor saat itu. Contoh :

lcd_gotoxy(5,0); //menempatkan kursor pada kolom 5 baris 0


lcd_putchar(0x41); //menampilkan karakter A (lihat table LCD)

c. void lcd_putsf(char flash*str)


Untuk menampilkan string pada posisi kursor saat itu. Contoh :

lcd_gotoxy(0,1); //menempatkan kursor pada kolom 0 baris 1


lcd_putsf(“saya arif”); //menampilkan string saya arif

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.

// Declare your global variables here


char buf[33]; //deklarasi var buf untuk menyimpan string yang //akan ditampilkan
ke LCD di RAM
……..
//lcd module inisialisasi
lcd_init(16);
while(1)
{
lcd_gotoxy(0,0);
lcd_putsf(“Arif Sy”);
lcd_gotoxy(0,1);
sprint(buf,”angka %x”,14); //menyimpan string ke SRAM
lcd_puts(buf); //menampilkan ke lcd
}

Dasar Pemrograman Mikrokontroller - 30


2. Karakter Khusus LCD

Untuk menampilkan karakter khusus pada LCd cukup menggunakan Instruksi seperti
berikut :

sprintf(buf,”angka %d \xf4”,50);

Instruksi diatas akanmenyimpan angka 50 Ω ke memori LCD dan selanjutnya akan


ditampilkan. Untuk lebih jelasnya lagi sekarang kita coba lihat pada table karakter khusus
LCD 16 bit M1632.

Dasar Pemrograman Mikrokontroller - 31


Contoh soal pemrograman (Display LCD) :
1. Buka CVAVR  File  new
2. Creat New File  Project  OK  Confirm  Yes
seperti pada gambar dibawah ini :

3. Pilih ATmega, seperti pada gambar dibawah ini :

4. Setting (Chip & Clock)  Setting Port B menjadi Output


Seperti pada gambar dibawah ini

Dasar Pemrograman Mikrokontroller - 32


5. Pilih Generate File, save & exit

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);

Dasar Pemrograman Mikrokontroller - 33


while (1)
{
// Place your code here
lcd_putsf("A");
delay_ms(500);
lcd_clear();
}
}

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.

c.

Dasar Pemrograman Mikrokontroller - 34


2. Build All project

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.

Dasar Pemrograman Mikrokontroller - 35


Running Teks

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.

*Pokok Bahasan : Library Penjedaan/delay, library LCD, for (pengulangan bersyarat),


while(superloop), Variable.

Push Button & LCD

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.

*Pokok Bahasan : library LCD, Library delay, while(superloop), Variable, if-else


(pengecekan).

Dasar Pemrograman Mikrokontroller - 36

Anda mungkin juga menyukai