Modul Pelatihan
Robot
Line
Follower
Berbasis
Mikrokontroler
LSO
–
Robotika
Fakultas Teknik
i
Preface
Judul Asli : Modul Robot Line Follower Berbasis Mikrokontroler
Penulis : Novendra Setyawan
Pengawas : Khusnul Hidayat, S.T.
Penata Grafis & Editor : Aulia Arif Wardana
Copyright © LSO – Robotika
Fakultas Teknik
Universitas Muhammadiyah Malang
2012
Modul ini dibuat sebagai salah satu program dan tujuan LSO – Robotika dalam
hal Bakti Pendidikan. Hak cipta dilindungi undang - undang. Barang siapa
memperbanyak atau menjiplak modul ini, harus seizin LSO – Robotika FT UMM.
Modul ini bersifat bebas untuk dipergunakan atau diperbanyak, tapi tidak untuk
diperjual belikan oleh umum.
Website : lso-robotika.umm.ac.id
Email : wsrobotika@umm.ac.id
Diterbitkan sendiri oleh : LSO - Robotika FT UMM, 2012
Tingkatan : Dasar – Menengah
Terimakasih,
ii
Pendahuluan
Bismillahirrahmanirrahim,
Puji syukur kita panjatkan kehadirat Allah Yang Maha Esa atas segala
rahmat dan karunia-Nya sehingga Modul Pelatihan Robot Line Follower Berbasis
Mikrokontroler dapat diwujudkan. Modul ini dikemas sebagai pegangan bagi
peserta didik dalam pelatihan robot yang di selenggarakan oleh LSO-Robotika FT
UMM. Modul ini memiliki peran strategis dalam perkembangan belajar dan
mengajar pada satu pelatihan, serta merupakan petunjuk praktis agar peserta
didik lebih mandiri dalam belajar.
Modul ini adalah bukti komitmen kami dalam hal Bakti pada Pendidikan,
melalui pengalaman kami di bidang robotika kami turut andil untuk membagi ilmu
dan mengajarkan ilmu yang kami dapat kepada peserta didik / peserta
pelatihan. Akhirnya dengan ini kami mengharapkan Modul Pelatihan ini dapat
dijadikan petunjuk dan dipergunakan dengan sebaik-baiknya.
Salam Robotika,
iii
Daftar Isi
Preface ... i
Pendahuluan ... ii
Daftar Isi ... iii
Pengenalan Bahasa C ... 1
I/O (Input dan Output) ... 11
LCD ... 22
ADC (Analog Digital Converter) ... 29
Robotics Team
University of Muhammadiyah Malang
1
Pengenalan Bahasa C
Bahasa C tidak mengenal penulisan dalam kolom, yang ia kenal hanya
penulisan di tiap barisnya. Namun demikian, untuk mempermudah pembacaan
program dan untuk keperluan dokumentasi, sebaiknya penulisan bahasa C diatur
sedemikian rupa sehingga mudah dan enak dibaca.
Berikut contoh penulisan Program Bahasa C:
#include <mega8535.h>
Pengarah Praprosesor
Contoh pengarahan praprosesor dalam penulisan diatas adalah
#include<...>. Pengarah praprosesor ini dipakai untuk membaca file yang
dipakai sebagai header atau library. Contohnya adalah #include
<mega8535.h>, mega8535.h adalah penunjuk praprosesor yang mengarahkan menuju file header atau library pada AT Mega 8535. File-file ini mempunyai ciri
yaitu namanya diakhiri dengan ekstensi .h .
Fungsi Penulisan
Dalam penulisan bahasa C selalu berbentuk sebuah Fungsi contohnya adalah
main ( )
{
………;
2
Contoh diatas adalah fungsi utama pada program bahasa C. Tanda ( { )
adalah tanda untuk mengawali bagan atau tubuh program, sedangkan tanda ( }
) adalah tanda akhir dari tubuh program .
Tanda ( ) pada Main ( ) merupakan tanda yang berisikan sebuah argument
atau sebuah variabel nilai yang disertakan dalam tubuh program. Dalam
penulisan pernyatan dalam bahasa C harus diahiri dengan tanda ( ; ).
Tipe Data
Tipe data merupakan bagian program yang paling penting karena tipe data
mempengaruhi setiap instruksi yang akan dilaksanakan oleh computer. Misalnya
saja 5 dibagi 2 bisa saja menghasilkan hasil yang berbeda tergantung tipe
datanya. Jika 5 dan 2 bertipe integer maka akan menghasilkan nilai 2, namun jika
keduanya bertipe float maka akan menghasilkan nilai 2.5000000. Pemilihan tipe
3
Deklarasi
Deklarasi Variabel
Variabel adalah suatu pengenal (identifier) yang digunakan untuk mewakili
suatu nilai tertentu di dalam proses program. Bentuk umum pendeklarasian
suatu variable adalah : Nama_tipe nama_variabel;
Contoh :
int x; // Deklarasi x bertipe integer
Dengan demikian x merupakan sebuah variabel dengan tipe data integer.
Jadi jangkauan nilai x dari -32768 s/d 32767.
Deklarasi Konstanta
Konstanta merupakan suatu nilai yang tidak dapat diubah selama proses
program berlangsung. Dalam bahasa C konstanta dideklarasikan
menggunakan preprocessor #define.
Contohnya :
#define PHI 3.14
(atau)
#define nim “0111500382”
Deklarasi Fungsi
Fungsi merupakan bagian yang terpisah dari program dan dapat diaktifkan
atau dipanggil di manapun di dalam program. Fungsi dalam bahasa C ada yang
sudah disediakan sebagai fungsi pustaka seperti printf(), scanf(), getch()
dan untuk menggunakannya tidak perlu dideklarasikan.
Fungsi yang perlu dideklarasikan terlebih dahulu adalah fungsi yang dibuat
oleh programmer. Bentuk umum deklarasi sebuah fungsi adalah :
4
Contohnya :
float luas_lingkaran(int jari);
void tampil();
int tambah(int x, int y);
Operator
Operator merupakan suatu symbol atau tanda yang digunakan sebagai
perintah dalam eksekusi program.
No Operator Arti Contoh
Operator Bitwise (MANIPULASI PER BIT)
Operator bitwise digunakan untuk memanipulasi bit-bit dari nilai data yang ada
5
• << : Pergeseran bit ke kiri
Contoh:
Datanya = 0x03 << 2 ; // 0x03 digeser kekiri 2 bit hasilnya ditampung di Datanya
Atau
A << = 1 // Isi variabel A digeser ke kiri 1 bit hasilnya
// kembali disimpan di A
• >> : Pergeseran bit ke kanan
Contoh:
Datanya = 0x03 >> 2 ; // 0x03 digeser kekanan 2 bit hasilnya ditampung di
datanya
Atau
A >> = 1 // Isi variabel A digeser ke kanan 1 bit hasilnya
// kembali disimpan di A
• & : Bitwise AND
Contoh:
Hasil = 0x03 & 0x31;
Operasinya
0x03 = 00000011
0x31 = 00110001
________________________________________________
0x01 = 00000001
0x31 = 00110001
6
Hasil 0x01 = 00110001
• ^ : Bitwise XOR (exclusive OR)
Contoh:
Hasil = 0x02 ^ 0xFA;
Operasinya
0x02 = 00000010
0xFA= 11111010
0x31 = 00110001
Hasil=~0x31 = 11001110 atau Hasil = 11001110
Struktur Kondisi
IfStruktur if dibentuk dari pernyataan if dan sering digunakan untuk menyeleksi
suatu kondisi tunggal. Bila proses yang diseleksi terpenuhi atau bernilai benar,
maka pernyataan yang ada di dalam blok if akan diproses dan dikerjakan.
Bentuk umum struktur kondisi if adalah :
if(kondisi){
pernyataan};
Contoh:
if(X<0){ //jika kondisi X<0 terpenuhi
A=B+C}; //maka aritmatika A=B+C akan di eksekusi
7
Dalam struktur kondisi if...else minimal terdapat dua pernyataan. Jika kondisi
yang diperiksa bernilai benar atau terpenuhi maka pernyataan pertama yang
dilaksanakan dan jika kondisi yang diperiksa bernilai salah maka pernyataan
yang kedua yang dilaksanakan. Bentuk umumnya adalah sebagai berikut :
if(kondisi){
pernyataan-1};
else{
pernyataan-2};
Contoh:
if(X<0){ //jika kondisi X<0 terpenuhi
A=B+C}; //maka aritmatika A=B+C akan di eksekusi
else{ //jika kondisi X<0 tidak terpenuhi maka aritmatika
A=B-C yang akan
A=B-C}; //dieksekusi
Switch Case Default
Struktur kondisi switch....case....default digunakan untuk penyeleksian kondisi
dengan kemungkinan yang terjadi cukup banyak. Struktur ini akan
melaksanakan salah satu dari beberapa pernyataan „case‟ tergantung nilai
kondisi yang ada di dalam switch.
Selanjutnya proses diteruskan hingga ditemukan pernyataan „break‟. Jika tidak ada nilai pada case yang sesuai dengan nilai kondisi, maka proses akan
diteruskan kepada pernyataan yang ada di bawah „default‟.
Bentuk umum dari struktur kondisi ini adalah :
switch(kondisi){
case 1 : pernyataan-1;break;
case 2 : pernyataan-2;break;
8
case n : pernyataan-n;break;
default : pernyataan-m;}
Contoh:
switch(A)
{
case 0: X=X+1;break; //Jika A=0 maka X=X+1 Dieksekusi dan
mengecek kondisi lagi
case 1: X=X+2;break; //Jika A=1 maka X=X+2 Dieksekusi dan
mengecek kondisi lagi
case 2: X=X+3;break; //Jika A=2 maka X=X+3 Dieksekusi dan
mengecek kondisi lagi
case 3: X=X+4;break; //Jika A=3 maka X=X+4 Dieksekusi dan
mengecek kondisi lagi
case 4: X=X+5;break; //Jika A=4 maka X=X+5 Dieksekusi dan
mengecek kondisi lagi
case 5: X=X+6;break; //Jika A=5 maka X=X+6 Dieksekusi dan
mengecek kondisi lagi
default: X=X+0;break; //Jika A tidak sama dengan 0,1,2,3,4,5
maka X=X+0
} //Dieksekusi dan mengecek kondisi lagi
While
Perulangan WHILE banyak digunakan pada program yang terstruktur.
Perulangan ini banyak digunakan bila jumlah perulangannya belum diketahui.
Proses perulangan akan terus berlanjut selama kondisinya bernilai benar (true)
dan akan berhenti bila kondisinya bernilai salah.
Bentuk umum dari struktur kondisi ini adalah:
While (ekspresi)
{
Pernyataan_1
Pernyataan_2
9
Contoh :
While(A<0){ //ketika A<0 maka akan melakukan instruksi
dibawahnya berulang
X++;
B=C+X;}
Do While
Pada dasarnya struktur perulangan do....while sama saja dengan struktur
while, hanya saja pada proses perulangan dengan while, seleksi berada di
while yang letaknya di atas sementara pada perulangan do....while, seleksi
while berada di bawah batas perulangan. Jadi dengan menggunakan struktur do…while sekurang-kurangnya akan terjadi satu kali perulangan.
Bentuk umum dari struktur kondisi ini adalah:
Do
While(A<0) //ketika A<0 maka akan melakukan instruksi
diatasnya berulang
For
Struktur perulangan for biasa digunakan untuk mengulang suatu proses yang
10
perulangan for tampaknya lebih efisien karena susunannya lebih simpel dan
sederhana.
Bentuk umum perulangan for adalah sebagai berikut :
for(inisialisasi; syarat; penambahan){
pernyataan;}
Contoh:
for(A=10;A>=0;A--){ // nilai A=10 dan akan dikurangi 1 hingga A>=0
11
I/O (Input/Output)
Pada bab ini akan membahas tentang fungsi mikrokontroler sebagai input
maupun output. Pada ic mikrokontroler terdapat beberpa kaki ic (pin/port pada
ic) yang dapat digunakan sebagai inputan maupun outputan. Contohnya pada
mikrokontroler berjenis AVR pada tipe AT-Mega 8 mempunyai 23 port sebagai I/O.
Berikut adalah gambar konfigurasi pin pada ic AT-Mega 8
Dari gambar diatas 23 pin I/O adalah PC0-PC5, PB0-PB7,dan PD0-PD7. Pada
penggunanya sebagai I/O terdapat suatu istilah dalam configurasi atau settingan
yang harus di ketahui khususnya dalam pemrogram menggunakan Code Vision
AVR. Istilah itu adalah PORTX.N dan DDRX.N. Maksud dari PORTX.N adalah X
menandakan Abjad dan N adalah menandakan pin. Misalkan PORTB.7 maka itu
12
DDRX.N adalah suatu konfigurasi yang menyatakan apakah suatu PORTX.Nsebagai inputan atau outputan. Jika dalam pengaplikasianya DDRB.0 = 1 maka
PB0 disetting sebagai outputan, sebaliknya jika DDRB.0 = 0 maka PB0 disetting
sebagai inputan. Jika menggunakan CVAVR penyettingan ini juga bisa disetting
langsung pada dialog box berikut:
dari gambar tersebut kita dapat mensetting PORTA dari bit ke 0 sampai bit ke 7
pada tanda panah diatas. Gambar diatas menunjukan sebuah setingan dimana
PORTA bit 0- bit 7 diseting sebagai inputan.
Pada I/O , PORTX.N digunakan sebagai pernyataan apakah sebuah pin dalam
ic berlogikan 0 (mengeluarkan 0 volt) atau berlogika 1 (mengeluarkan 3-5volt).
Misalkan PORTA.1=1; maka pada pin PA1 akan mengeluarkan tegangan 3-5 volt.
Sebaliknya jika PORTA.1=0; maka PA1 akan berlogika 0 dan mengeluarkan
13
Latihan 1
Pada latihan 1 kita akan menyalakan led secara bergantian.
Langkah-langkah yang harus kita jalankan adalah:
Setelah membuka program CVAVR pada PC click File kemudian New.
Pada kotak dialog berikut klik project lalu OK dan OK kembali pada printah
selanjutnya.
Setelah itu kita setting jenis mikro yang kita gunakan pada kotak dialog
14
Setelah itu kita setting pin yang digunakas sebagai Output pada kotak
15
Setting PORTB Sebagai output semua.
Setelah itu kita klik Program, generate program and save, dan kita ketik
nama file (project) pada kotak dialog.
Berikut adalah contoh listing program penyalaan led
#include <mega8.h>
#include <delay.h>
void main(void)
{
int a;
PORTB=0x00;
DDRB=0xFF;
while (1)
{
for(a=0;a<256;a++){
PORTB=a;
delay_ms(10);
}
}
}
16
Cara kerja program :
Pada progam ini kita akan menyalakan led secara bergantian. Untuk itu
diperlukan pendeklarasian register untuk mikrokontroler AT-Mega 8 <mega8.h>
dan delay <delay.h> . Setelah itu langsung kepada main program. Padamain
program terdapan inisialisasi dimana sebuah variabel a diinisialisasikan dengan
tipe data integer yang berarti bernilai antara -32768 s/d 32767.
Setelah itu ada inisialisasi selanjutnya yaitu PORTB=0x00; yang berarti pada saat
awal program berjalan semua pin yang ada pada PORTB berlogika 0. Setelah
menginisialisasi nilai awal PORTB, kemudian kita inisialisasi PORTB sebagai outputan
dengan memberikan nilai pada DDRB=0xFF; yang berarti semua pin pada PORTB
adalah outputan.
Pada program ini terdapat suatu fungsi perulangan dalam while (1) yang berarti
melakukan suatu pernyataan yang terus berulang tanpa ada sarat untuk
berhenti. Selanjutnya adalah fungsi dalam for(a=0;a<256;a++) adalah untuk
menghitung variabel a mulai dari 0 hingga 255, yaitu dengan adanya sebuah
inisialisasi yang menyatakan bahwa variabel a dimulai dengan nilai 0 (a=0)
,kemudian memberikan syarat bahwa variabel a berakhir pada 255(a<256), dan
setelah itu memberikan penambahan secara terus menerus hingga syarat yang
ditentukan dengan penambahan 1 (a++). Setelah memberikan suatu perulangan
nilai pada variabel a, maka nilai tersebut kita masukkan pada PORTB yang akan
17
Program itu dapat kita simulasikan pada aplikasi program Proteus dengan
gambar sebagai berikut.
(Buka pada folder Rangkaian ISIS dengan nama Latihan 1)
Latihan 2
Pada latihan 2 kita akan menyalakan beberapa led dengan sebuah inputan
berupa push button, dengan langkah langkah sebagai berikut.
Setelah membuka program CVAVR pada PC, click File kemudian New.
Pada kotak dialog berikut klik project lalu OK dan OK kembali pada printah
18
Setelah itu kita setting jenis mikro yang kita gunakan pada kotak dialog
19
Setelah itu kita setting pin yang digunakas sebagai Output pada kotak
dialog Ports
Setting PORTB Sebagai output semua.
Setting PINC.0 dan PINC.1 Sebagai input.
Setelah itu kita klik Program, generate program and save, dan kita ketik
nama file (project) pada kotak dialog.
Berikut adalah contoh listing program
#include <mega8.h>
20
#define tombol_1 PINC.0#define tombol_2 PINC.1
void main(void)
(Buka pada folder Contoh Program dengan nama Latihan 2)
Cara kerja program:
Pada latihan 2 ini led akan menyala jika sebuah tombol ditekan.
Pada mulanya di deklarasikan register AT Mega8 dan delay. Selain itu PINC.0
dan PINC.1 dideklarasikan sebagai tombol_1 dan tombol_2 Dalam main
program kita setting PORTB sebagai outputan dengan logic 1 pada DDRB dan
21
Pada perulangan While(1) terdapat fungsi if else dimana pada fungsi
if yang pertama jika kita tekan tombol_1 maka akan menghasilkan logic 0 pada
PINC.0 dan jika kondisi itu terpenuhi maka terdapan pernyataan yang akan di
eksekusi yaitu PORTB=0xFF; yang berarti akan memberi outputan 1 kepada
semua pin pada PORTB. Kemudia pada fungsi if yang ke dua terdapat sebuah
kondisi dimana jika tombol_2 ditekan maka akan memberikan logic 0 pada
PINC.1 dan jika itu terpenuhi maka akan meng eksekusi pernyataan yang sama
pada latihan 1. Jika semua kondisi itu tidak terpenuhi maka akan mengeksekusi
pernyataan PORTB=0, yang akan mematikan semua led.
Program itu dapat disimulasikan pada aplikasi program Proteus dengan
gambar sebagai berikut.
22
LCD
Pada bab ini akan dibahas tentang bagaimana menggunakan LCD dan
konfigurasi untuk menggunakanya. LCD yang biasa digunakan pada
mikrokontroler adalah LCD modul type M1632. Modul tersebut memiliki berdimensi
16x2 yang berarti 16 baris karakter dan memiliki 2 kolom, jadi dapat menampilkan .
Dalam penggunaanya LCD modul M1632 memiliki konfigurasi sebagai berikut.
Pin 1 (Vss)
Vss merupakan pin sambungan untuk satu daya 0 volt.
Pin 2 (Vdd)
Vdd meupakan sambungan catudaya 5 volt
Pin 3 (Vee)
Merupakan pin kontrol Vcc yang digunakan untuk mengatur kontras display.
Pin 4 (RS)
Merupakan register select (RS), masukan yang pertama dari tiga command
control input. Dengan membuat RS menjadi high, data karakter dapat
ditransfer dari dan menuju modulnya.
Pin 5 (R/W)
Read/Write (R/W). Untuk memfungsikan sebagai perintah Write maka R/W
23
Pin 6 (Enable)
Enable (E), input ini digunakan untuk transfer aktual dari perintahperintah
atau karakter antara modul dengan hubungan data.
Pin 7 – Pin 14 (Data)
Pin 7 sampai 14 adalah delapan jalur data (D0 – D7) dimana data dapat
ditransfer ke dan dari display.
Pin 15 dan Pin 16
Pin 15 atau A (+) mempunyai level DC +5 V berfungsi sebagai LED backlight +
sedangkan pin 16 yaitu K (-) memiliki level 0 V
Rangkaian interface antara LCD dan mikrokontroler adalah sebagai berikut.
Pemrograman LCD
Dalam pemrograman LCD menggunakan CVAVR terdapat beberapa istilah
yang harus diketahui yaitu
lcd_gotoxy (x,y)
Berfungsi memberikan letak kordinat untuk menuliskan suatu karakter.
Misalkan lcd_gotoxy(0,1) maka suatu karakter akan ditulis mulai baris ke 0
24
lcd_putsf (“karakter yang ingin ditulis”)
Perintah ini digunakan untuk menuliskan pada lcd. Contoh penggunanya
adalah
lcd_gotoxy(0,0); //karakter dimulai pada baris ke 0 dan
kolom ke 0
lcd_putsf(“WS robotika UMM”) //menuliskan karakter tersebut
pada LCD
lcd_sprintf (lcd_buffer,”%i”,nilai variabel yang ingin di tampilkan)
Perintah ini digunakan untuk menampilkan suatu variabel yang berubah
ubah. Contohnya adalah sebagai berikut
lcd_gotoxy(0,0); //karakter dimulai pada baris ke 0 dan
kolom ke 0
sprintf(lcd_buffer,"%6i",kecepatan_ki); //variabel disimpan
dalam array lcd_buffer
lcd_puts(lcd_buffer); //menampilkan isi karakter dalam
lcd_buffer
ftoa(nilai variabel yang ingin di tampilkan,berapa ditampilkan,lcd_buffer)
ftoa adalah salah satu fungsi dalam menampilkan suatu variabel yang
bernilai desimal dengan type data float. Dalam fungsi ini dapat
menampilkan suatu variabel dengan nilai bebrapa digit dibelakang
koma. Contoh penggunaan ftoa :
lcd_gotoxy(0,1); //karakter dimulai pada baris ke 0 dan
kolom ke 1
ftoa(jarak_bawah,1,lcd_buffer); // menyimpan variabel dalam
array
lcd_puts(lcd_buffer); //menampilkan isi karakter dalam
25
Latihan 3
Pada latihan ini kita akan menampilkan suatu karakter atau kalimat dalam lcd
dengan langkah langkah sebagai berikut :
Setelah membuka program CVAVR pada PC, click File kemudian New.
Pada kotak dialog berikut klik project lalu OK dan OK kembali pada printah
26
Setelah itu kita setting jenis mikro yang kita gunakan pada kotak dialog
berikut dengan AT-Mega 8
Pada kotak dialog Alphanumeric LCD kita setting konfigurasi untuk lcd
Pada kotak dialog Alphanumeric LCD kita check list untuk Enable
Alphanumeric LCD support
Pada characters/line kita ganti dengan 16 (karena modul lcd 16x2)
27
Setelah itu kita klik Program, generate program and save, dan kita ketik
nama file (project) pada kotak dialog.
Berikut adalah contoh listing program
#include <mega8.h>
#include <alcd.h> // file header untuk lcd
void main(void)
{
// Alphanumeric LCD initialization
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD
menu:
// RS - PORTD Bit 0
// RD - PORTD Bit 1
// EN - PORTD Bit 2
// D4 - PORTD Bit 4
// D5 - PORTD Bit 5
// D6 - PORTD Bit 6
// D7 - PORTD Bit 7
// Characters/line: 16
28
lcd_gotoxy(4,0); // karakter dimulai pada baris ke 4 dankolom ke 0
lcd_putsf("Novendra") ; // menuliskan karakter pada lcd
lcd_gotoxy(0,1); //karakter dimulai pada baris ke 0 dan
kolom ke 1
lcd_putsf("Teknik Elektro") ; // menuliskan karakter pada
lcd
}
(Buka pada folder contoh program dengan nama Latihan 3)
Program itu dapat disimulasikan pada aplikasi program Proteus dengan
gambar sebagai berikut
29
ADC (Analog Digital Converter)
ADC atau Analog Digital Converter adalah salah satu fitur mikrokontroler untuk
mengkonversikan besaran fisis khususnya tegangan dalam bentuk digital berupa
nilai biner. Dalam penerapanya ADC sering digunakan untuk interface terhadap
sensor sensor yang memberi outputan berupa nilai tegangan.
ADC AT Mega 8
Pada AT Mega 8 terdapat 6 pin untuk ADC yang memiliki fidelitas 10 bit yang
dapat digunakan dalam fidelitas 8 bit. Dalam mode penggunaanya hal hal
yang perlu diperhatikan adalah tegangan reffrensi yang digunakan, prescaler
(jumlah pencacah), dan mode operasi.
Untuk menggunakan ADC terdapat beberapa register yang harus dipelajari
diantaranya.
ADMUX (ADC Multiplexer Selection Register)
Konfigurasi register ADMUX adalah sebagai berikut
REFS1 REFS0 ADLAR – MUX3 MUX2 MUX1 MUX0
1. REFS1 – REFS0
Merupakan bit pengatur tegangan referensi ADC ATMega8535. Memeiliki
Nilai Awal 00 sehingga referensi tegangan berasal dari pin AREF. Detail nilai
yang lain dapat dilihat pada tabel berikut
REFS1 REFS0 Mode tegangan Refrensi
0 0 Tegangan dari AREF
0 1 Tegangan dari AVCC
1 0 Tidak digunakan
30
2. ADLAR
Merupakan bit pemilih mode data keluaran ADC. Bernilai awal 0, sehingga
2 bit tertinggi data hasil konversinya berada di register ADCH dan 8 bit
sisanya berada di register ADCL, seperti dalam tabel 9.3. Apabila bernilai 1,
maka hasilnya pada tabel berikut
ADLAR=0
- - - ADC9 ADC8
ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0
ADLAR=1
ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2
ADC1 ADC0 - - - -
3. MUX3 – MUX0
Merupakan bit pemilih saluran pembacaan ADC. Bernilai awal 00000. Untuk
mode single ended input, MUX[4..0] bernilai dari 00000 hingga 00111,
31
ADCSRA
Merupakan register 8 bit yang berfungsi melakukan manajemen sinyal kontrol
dan status dari ADC yang memiliki susunan dalam tabel berikut
ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0
4. ADEN merupakan bit pengatur aktivasi ADC. Bernilai awal 0. Jika bernilai 1,
maka ADC aktif.
5. ADSC merupakan bit penanda mulainya konversi ADC. Bernilai awal 0
selama konversi ADC akan bernilai 1, sedangkan jika konversi selesai, akan
bernilai 0.
6. ADATE merupakan bit pengatur aktivasi picu otomatis operasi ADC. Bernilai
awal 0, jika bernilai1 maka konversi ADC akan dimulai pada saat transisi
positif dari sinyal picu yang diplih. Pemiliha sinyal picu menggunakan bit
ADTS pada register SFIOR.
7. ADIF merupakan bit penanda akhir suatu konversi ADC. Bernilai awal 0. Jika
bernilai 1, maka konversi ADC pada saluran telah selesai dan data siap
diakses.
8. ADIE merupakan bit pengatur aktivasi interupsi yang berhubungan dengan
akhir konversi ADC. Bernilai awal 0. Jika berniali 1 dan jika konversi ADC telah
selesai, sebuah interupsi akan dieksekusi.
9. ADPS[2..0] merupakan bit pengatur clock ADC. Bernilai awal 000. Detail nilai
bit dalam tabel berikut
ADPS2 ADPS1 ADPS0 Prescaler
32
1 1 1 128
Latihan 4
Menampilkan ADC yang didapat dari tegangan pada VR (potensio meter) pada
LCD. Untuk dapat melakukanya diperlukan langkah langkah sebagai berikut
Setelah membuka program CVAVR pada PC, click File kemudian New.
Kemudian pilih Project dan click OK. Setelah itu click yes dan OK kembali.
Setting LCD 16x2 pada PORTD bit 0 – bit 7.
Setelah itu kita setting pada kotak dialog ADC
Enable-kan ADC dengan menchecklist pada ADC Enable
Lalu checklist pada Use 8 bit untuk menggunakanya dengan fidelitas 8 bit.
Gunakan AREF pin sebagai tegangan refrensi ADC.
33
Setelah itu kita klik Program, generate program and save, dan kita ketik
nama file (project) pada kotak dialog.
Berikut adalah contoh listing program
#include <mega8.h>
#include <stdio.h>
#include <delay.h>
#include <alcd.h>
#define ADC_VREF_TYPE 0x20
unsigned char read_adc(unsigned char adc_input) //fungsi
pembacan ADC
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);// Delay needed for the stabilization of the
ADC input voltage
ADCSRA|=0x40;// Start the AD conversion
while ((ADCSRA & 0x10)==0);// Wait for the AD conversion to
34
// ADC initialization// ADC Clock frequency: 31,250 kHz
// ADC Voltage Reference: AREF pin
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff; //register ADMUX
ADCSRA=0x87; //register ADCSRA
lcd_init(16);
while (1)
{
potensio=read_adc(0); //membaca tegangan potensio pada
pin ADC 0
lcd_gotoxy(0,0); // kordinat ADC pada baris 0 dan
kolom 0
sprintf(lcd_buffer,"ADC=%3i",potensio); // menyimpan
variabel ke array
lcd_puts(lcd_buffer); //menuliskan array lcd_buffer
pada LCD
}
}
(Buka pada folder Contoh Program dengan nama Latihan 4)
Cara kerja Program :
Pada listing program fungsi read_adc ( ) adalah fungsi yang sudah terbentuk
pada CVAVR pada saat kita mengenablekan ADC. Dari itu kita hanya
memanggil fungsi tersebut dan menggunakan variabel potensio dengan type
data unsigned char sebagai variabel yang akan ditampilkan pada LCD
35
Listing program tersebut dapat disimulasikan pada rangkaian berikut
(Buka pada folder Rangkaian ISIS dengan nama Latihan 4)
Pada rangkaian ini kita harus menghubungkan tegangan yang sama dengan
tegangan pada inputan ADC dengan AREF dan AVCC yang memiliki tegangan
36
PWM (Pulse Width Modulation)
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.
Pada penggunaanya terdapat beberapa register yang harus dipahami, yaitu
diantaranya :
1. Timer/Counter Control Register (TCCR), untuk menentukan mode PWM.
2. Timer/Counter Register (TCNT), digunakan untuk menentukan modulasi
frekuensinya.
3. Output Compare Register (OCR), untuk menentukan nilai siklus kerjanya.
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.
Dalam menggunakan PWM untuk mengendalikan motor DC, maka diperlukan
sebuah driver motor sebagai pendukung modulasi. Pada kali ini dalam
pengaturannya menggunakan driver motor dual h-bridge yang sudah terintegrasi
37
Pada konfigurasi L298 yang harus diperhatikan adalah sebagai berikut :
1. In 1- In 2 dan In3- In4 control pengendali arah putar Out 1 - Out 2 dan Out 3 -
Out 4 (CW/CCW).
In 1 In 2 Arah putar Motor
0 0 Stop
0 1 CW (clock wise)
1 0 CCW(conter clock
wise)
1 1 Stop
2. ENA dan ENB merupakan pin pengendali kecepatan dengan PWM .ENA
untuk OUT 1-OUT2 dan ENB untuk OUT 3-OUT 4. Kedu pin tersebut
dihubungkan pada OC1A dan OC1B yang merupakan pin keluaran PWM
dari AT-Mega 8.
Latihan 5
Pada latihan 5 kita akan mengontrol motor DC dengan menggunakan potensio
yang dimasukan dalam PIN ADC.Untuk menggunakan PWM dalam AT-Mega 8
dengan menggunakan CVAVR diperlukan langkah langkah sebagai berikut
Setelah membuka program CVAVR pada PC, click File kemudian New.
38
Setting PORTB sebagai Output Semua
Setelah itu kita setting pada kotak dialog ADC
Enable-kan ADC dengan menchecklist pada ADC Enable
Lalu checklist pada Use 8 bit untuk menggunakanya dengan fidelitas 8 bit.
Gunakan AREF pin sebagai tegangan refrensi ADC.
39
Lalu kita setting PWM pada kotak dialog Timers
Pilih clock source dengan system clock dan menggunakan clock dengan
freq menengah
Pilih Mode dengan Mode Fast PWM top=0x00FF yang berarti 8 bit PWM.
Untuk mengeluarkat PWM pada OUTA pilih Non-Inv (non inverting PWM)
PWM dengan glombang non pembalik. Jika ingin mengeluarkan 2 PWM
sekaligus maka lakukan hal yang sama pada OUTB
Checklist pada Timer1 Overflow untuk mendapatkan nilai PWM yang baik.
Setelah itu kita klik Program, generate program and save, dan kita ketik
40
Berikut adalah contoh listing program
#include <mega8.h>
#include <stdio.h>
#include <delay.h>
unsigned char PWM;
#define ADC_VREF_TYPE 0x00
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void baca_PWM(){
if(PWM>=0 && PWM<=127)
41
}}
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
baca_PWM();
OCR1A=PWM; //Pemberian Nilai PWM yang akan dikeluarkan
pada pin OC1A
TCCR1A=0x81; //register untuk pengaturan PWM
TCCR1B=0x0B; //register untuk pengaturan PWM
TCNT1H=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x87;
#asm("sei")
while (1)
42
PWM=read_adc(0); //Pembacaan adc sebagai inputpengaturan kecepatan motor
}
}
Cara Kerja Program :
Pada contoh program diatas motor diatur dengan inputan berupa sebuah
potensio (VR) dimana jika potensio berputar kekanan maka motor maju dan
jika potensio berputar kekiri motor mundur. Pemberian PWM dilakukan pada
interupt agar update nilai PWM lebih baik.
Pada awal mula program adalah membaca ADC pada looping While(1) yang
diwakili dengan Variabel PWM. Setelah itu diolah nilai ADC, untuk nilai antara
0-127 motor berputar kearah maju dengan kecepatan PWM yang sama dengan
dua kali lipat nilai ADC. Begitu pula sebaliknya, pada nilai 128-255 motor
berputar mundur dengan nilai PWM yang memiliki persaman sebagai berikut :
PWM=PWM-128;
PWM=PWM*2;
Pada persamaan tersebut jika nilai ADC full 255 maka nilai PWM akan sama
dengan PWM=(255-128)x 2= 254 dan saat ADC /Potensio di tengah maka nilai