You are on page 1of 29

Copyright by HIMANIKA 2010

Page 1

BAGIAN I PENGENALAN DASAR MIKROKONTROLER ATmega 16


Apa itu mikrokontroler ? Mikrokontroler adalah suatu alat elektronika digital yang mempunyai masukan dan keluaran serta kendali dengan program yang bisa ditulis dan dihapus dengan cara khusus, cara kerja mikrokontroler sebenarnya membaca dan menulis data. Mikrokontroler merupakan komputer didalam chip yang digunakan untuk mengontrol peralatan elektronik, yang menekankan efisiensi dan efektifitas biaya. Secara harfiahnya bisa disebut "pengendali kecil" dimana sebuah sistem elektronik yang sebelumnya banyak memerlukan komponenkomponen pendukung seperti IC TTL dan CMOS dapat direduksi/diperkecil dan akhirnya terpusat serta dikendalikan oleh mikrokontroler ini. Dengan penggunaan mikrokontroler ini maka :

Sistem elektronik akan menjadi lebih ringkas Rancang bangun sistem elektronik akan lebih cepat karena sebagian besar dari sistem adalah perangkat lunak yang mudah dimodifikasi

Pencarian gangguan lebih mudah ditelusuri karena sistemnya yang kompak

Namun demikian tidak sepenuhnya mikrokontroler bisa mereduksi komponen IC TTL dan CMOS yang seringkali masih diperlukan untuk aplikasi kecepatan tinggi atau sekedar menambah jumlah saluran masukan dan keluaran (I/O). Dengan kata lain, mikrokontroler adalah versi mini atau mikro dari sebuah komputer karena mikrokontroler sudah mengandung beberapa periferal yang langsung bisa dimanfaatkan, misalnya port paralel, port serial, komparator, konversi digital ke analog (DAC), konversi analog ke digital dan sebagainya hanya menggunakan sistem minimum yang tidak rumit atau kompleks.

Mikrokontrol keluarga type AVR AVR adalah mikrokontroler RISC (Reduce Insruction Set Compute) 8 bit berdasarkan arsitektur Havard, yang dibuat oleh atmel pada tahun 1996. AVR memiliki keunggulan dibanding dengan mikrokontroler lain seperti kecepatan eksekusi program yang lebih cepat yang lebih cepat dibanding dengan mikrokontroler MCS51 yang memiliki arsitektur CISC (complex Intruktion Set Compute). Fitur AVR memiliki fitur lengkap (ADC internal,

EEPROM Internal, Timer/Counter, Watchdog Timer, PWM, Port I/O, komunikasi serial dll). Secara umum mikrokontroler AVR dapat dikelompokkan menjadi 3 kelompok, yaitu
Copyright by HIMANIKA 2010 Page 2

keluarga AT90xx, ATMega, dan ATtiny. Type dari mikrokontroler AVR seperti ATMega 16, ATMega 8, ATMega 32, ATMega 2313, ATMega 8535, ATMega 128, ATMega 64. Pemrograman AVR dapat menggunakan low level language (assembly) dan high level language (C, Basic, Pascal, Java) tergantung compiler yang digunakan. Untuk kedepannya kita akan menggunakan pmrograman bahasa C dengan software kompilernya menggunakan Code Vision AVR dan menggunakan ATMega 16 sebagai perangkat kerasnya.

Mikrokontroler ATMega 16 Fitur yang dimiliki adalah sebagai berikut 1. Mikrokontroler AVR 8 bit yang memiliki kemampuan tinggi, dengan daya rendah 2. Arsitektur RISC dengan Troughput mencapai 16 MIPS pada frekuensi 16MHz. 3. Memilikikapasitas flash memori 16 Kbyte, EEPROM 512 Byte dan SRAM 1 Kbyte. 4. Saluran I/O sebanyak 32 buah, yaitu Port A, Port B, Port C, dan Port D. 5. CPU yang terdiri atas 32 buah register. 6. Unit interupsi internal dan ekternal 7. Port USART untuk komunikasi serial 8. Fitur peripheral Tiga buah Timer/Counter dengan kemampuan perbandingan 2 buah Timer/Counter 8 bit dengann prescaler terpisah dan mode compare 1 buah Timer/Counter 16 bit dengan prescaler terpisah, mode compare, dan mode capture Real time counter dengan osilator sendiri 4 channel PWM 8 channel, 10-bit ADC 8 single-ended channel 7 differential channel hanya pada kemasan TQFP 2 differential channel dengan programmable gain 1x, 10x, atau 100x

Byte-oriented two wire serial interface Programmable serial USART Antarmuka SPI Watchdog timer dengan oscillator internal On-chip analog comparator

Copyright by HIMANIKA 2010

Page 3

Konfigurasi pin AVR ATMega 16

Gambar 1.1 Konfigurasi kaki (pin) ATMega 16

Konfigurasi pin ATMega 16 dengan kemasan 40 pin DIP (Dual in line Package) dapat dijelaskan sebagai berikut: 1. VCC merupakan pin yang berfungsi sebagai masukan catu daya. Sebaiknya menggunakan catu daya 5 V dengan regulator tegangan. 2. GND merupakan pin Ground 3. Port A(PA0..PA7) merupakan pin input/output dua arah dan pin masukan ADC. 4. Port B(PB0..PB7) merupakan pin input/output dua arah dan pin fungsi khusus, seperti dapat dilihat pada table di bawah ini.

Pin PB7 PB6 PB5 PB4 SCK (SPI Bus Serial Clock)

Fungsi khusus

MISO (SPI Bus Master Input/lave Output) MOSI (SPI Bus Master Output?Slave Input) SS (SPI Slave Select Input)
Page 4

Copyright by HIMANIKA 2010

PB3

AIN1 (Analog Comparator Negatif Input) OC0 (Timer/Counter0 Output Compare Match Output)

PB2

AIN0 (Analog Comparator Positive Input) INT2 (External Interrupt 2 input)

PB1 PB0

T1 (Timer/Counter1 External Counter Input) T0 T1 (Timer/Counter0 External Counter Input) XCX (USART External Clock Input/Output)

5. Port C(PC0..PC7) merupakan pin input/output dua arah dan pin fungsi khusus, seperti dapat dilihat pada table di bawah

Pin PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 TOSC2 (Timer Oscillator Pin2) TOSC1 (Timer Oscillator Pin1) TDI (JTAG Test Data In) TDO (JTAG Test Data Out) TMS (JTAG Test Mode Select) TCK (JTAG Test Clock)

Fungsi khusus

SDA (Two-wire Serial Bus Data Input/Outpur Line) SCL (Two-Wire Serial Bus Clock Line)

6. Pirt D(PD0..PD7) merupakan pin input/output dua arah dan pin fungsi khusus, seperti dilihat pada table dibawah. Pin PD7 PD6 PD5 PD4 PD3 PD2 PD1 PD0 Fungsi khusus OC2 (Timer/Counter2 Output Compare Macth Output) ICP (Timer/Counter1 Input Capture Pin) OC1A (Timer/Counter1 Output Compare A Macth Output) OC1B (Timer/Counter1 Output Compare B Macth Output) INT1 (External Interruft 1 input) INT0 (External Interruft 0 input) TXD (USART Output Pin) RXD (USART Input Pin)

Copyright by HIMANIKA 2010

Page 5

7. RESET merupakan pin yang digunakan untuk mereset mikrokontroler 8. XTAL1 dan XTAL2 merupakan pin masukan clock ekstenal 9. AVCC merupakan pin masukan tegangan untuk ADC 10. AREF merupakan pin masukan tegangan referensi ADC

Copyright by HIMANIKA 2010

Page 6

BAGIAN II DOWNLOADER LPT


Downloader LPT (ISP Programmer) merupakan sebuah perangkat downloader yang minimum dan sederhana karena hanya menggunakan port LPT (Parallel port) dan resistor sebagai pengaman. Konfigurasi pin LPT dan AVR sebagai berikut: PIN Mikrokontroller MOSI (6) MISO (7) SCK (8) RESET (9) GND (11) PIN LPT INIT (16) ACK (10) SLCT-IN (17) AUTOLF (14) GND (25)

Pengaturan Programmer Codevision AVR : 1. Jalankan Aplikasi Codevision AVR.

Copyright by HIMANIKA 2010

Page 7

2. Klik tombol Programmer Settings atau Settings-Programmer dan atur seperti gambar. nb : Pengaturan ini hanya sekali saja.

3. Klik tombol Terminals Settings atau Settings-Terminal dan atur seperti pada
gambar. nb : Pengaturan ini hanya sekali saja

Copyright by HIMANIKA 2010

Page 8

BAGIAN III DOWNLOADER USB


USBasp merupakan in-circuit programmer untuk mikrokontroler Atmel AVR. Rangkaiannya menggunakan ATMega48 atau ATMega8 dan beberapa komponen pasif lainnya. Programmer atau downloader ini menggunakan sebuah penggerak USB hanyafirmware (firmware-only USB driver), tidak memerlukan pengontrol USB khusus.

Fitur-fitur
Bisa digunakan untuk berbagai macam platform, sudah diuji untuk Linux, Mac OS dan Windows; Tidakmemerlukan pengontrol atau komponen smd khusus; Kecepatan pemrograman bisa mencapai 5kByte/detik; Opsi SCK untuk mendukung mikrokontroler target yang berkecepatan rendah (< 1.5 MHz);

Gambar Rangkaian USB Downloader :

Copyright by HIMANIKA 2010

Page 9

USB Downloader hanya membutuhkan driver USB ASP dan software USB downloader semisal AVR Dude, Khazama AVR Programmer, dan eXtreme-Burner AVR. Burner Gambar Schematic board PCB dengan menggunakan PCB Express :

SlowSCK

GND RESET SCK MISO MOSI OSC SELF PROGRAMMING RESET ISP Downloader to Computer

MOSI, MISO, SCK, OSC, dan GND(USB Downloader) ke MOSI, MISO, SCK, GND RESET, dan GND (AVR/Sistem Minimum) /Sistem Minimum

Copyright by HIMANIKA 2010

Page 10

BAGIAN IV SISTEM MINIMUM ATmega 16


Sistem minimum disini adalah rangkaian utama di dalam robot Line Follower, rangkaian ini memiliki fungsi sebagai pemberi catu daya, tombol navigasi, port downloader ISP , driver motor, dan Port LCD. Tanpa rangkaian sistem minimum ini maka mikrokontroller tidak akan bisa bekerja. Berikut ini gambar rangkaian minimum sistem ATMega 16 :

Keterangan : 1. PINA berfungsi sebagai PIN ADC (Analog to Digital Converter) yang terhubung ke sensor photo diode. 2. PINB berfungsi sebagai pengontrol LCD. 3. PORTD.0 5 berfungsi sebagai kendali driver motor (L298). 4. PIND6-7 dan PIND0-1 sebagai tombol navigasi.

Copyright by HIMANIKA 2010

Page 11

Copyright by HIMANIKA 2010

Page 12

BAGIAN V ROBOTIC LINE FOLLOWER BASIC


Line Follower Robot adalah robot autonomus yang bergerak mengikuti garis secara
otomatis. Robot Follower biasanya menggunakan sensor photo diode atau LDR (Light

Dependent Resistor) sebagai penerima dan LED sebagai pemancar sinar. Untuk
penggeraknya robot Line Follower biasanya mengunakan roda(Wheeled), tetapi di dalam aplikasi lain menggunakan panggerak berupa kaki (Legged) . Robot Line Follower mempunyai beberapa bagian utama di dalam hardware dan

software ,yaitu :
1. Sistem minimum mikrokontroller. Sistem minimum berfungsi sebagai rangkaian utama dari Robot Line

Follower. Di dalam sistem minimum ini terdapat mikrokontroller (ATMega 16 ) yang


berfungsi sebagai rangkaian pengendali utama yang mengatur kecepatan, arah gerak robot, sistem kendali, dan menu program. 2. Driver Motor. Driver motor bekerja dengan mendapat perintah dari mikrokontroller, driver motor bekerja untuk mengendalika arah gerak maju, mundur dan pengereman dari motor di dalam Robot Line Follower.

Copyright by HIMANIKA 2010

Page 13

3. Sensor Proximity. Sensor berfungsi sebagai pengindra(perasa) dari sebuah Robot Line Follower, sensor yang sering digunakan antara lain adalah Photo Diode. Photo dioda bekerja dengan menerima sinar/ cahaya baik cahaya yang tampak maupun yang tidak tampak oleh mata manusia (Infrared). Prinsip kerjanya sederhana, hanya memanfaatkan sifat cahaya yang akan dipantulkan jika mengenai benda berwarna terang dan akan diserap jika mengenai benda berwarna gelap. Sebagai sumber cahaya kita gunakan LED (Light Emiting Diode) yang akan memancarkan cahaya merah. Dan untuk menangkap pantulan cahaya LED, kita gunakan photodiode. Jika sensor berada diatas garis hitam maka photodioda akan menerima sedikit sekali cahaya pantulan. Tetapi jika sensor berada diatas garis putih maka photodioda akan menerima banyak cahaya pantulan. Berikut adalah ilustrasinya :

Sifat dari photodioda adalah jika semakin banyak cahaya yang diterima, maka nilai resistansi diodanya semakin kecil. Dengan melakukan sedikit modifikasi, maka besaran resistansi tersebut dapat diubah menjadi tegangan. Sehingga jika sensor berada diatas garis hitam, maka tegangan keluaran sensor akan besar, demikian pula sebaliknya. Berikut adalah gambar rangkaian sensor proximity yang sering digunakan pada robot Line Follower : a. Sensor Dengan Komparator. Agar dapat dibaca oleh mikrokontroler, maka tegangan sensor harus disesuaikan dengan level tegangan TTL yaitu 0 1 volt untuk logika 0 dan 3 5 volt untuk logika 1. Hal ini bisa dilakukan dengan memasang operational amplifier yang difungsikan sebagai komparator. Output dari photodiode yang masuk ke input inverting op-amp akan dibandingkan dengan tegangan tertentu

Copyright by HIMANIKA 2010

Page 14

dari variable resistor VR. Tegangan dari VR inilah yang kita atur agar sensor proximity dapat menyesuaikan dengan kondisi cahaya ruangan.

b. Sensor dengan ADC (Analog to Digital Converter). Sensor ADC merupakan perangkat sensor yang sangat sederhan. Perangkat sensor ini hanya terdiri dari sebuah Resistor dan sensor phototransistor/photodeoda/LDR yang mengunakan prinsip pembagi tegangan sebagai parameternya. Sensor ADC member inputan ke mikrocontroler berupa tegangan variasi yang diterjemahkan oleh mikro sebagai bilangan 00000000(0) sampai 11111111(255). Jadi dengan ini kita tidak memerlukan komparator sebagai indicator 1/0, tapi memerlukan pemograman mikrocontroler yang lebih sulit, yaitu dengan mengatur parameter variasi tegangan input yang diterjemah mikro sebagai logic 0/1. Misal : Jika out sensor 3,5-5V diterjemahkan sebagai logic 1. Jika out sensor kurang dari 3,5 V diterjemahkan 0.

4. LCD(Liquid Crystal Display). LCD berfungsi untuk menampilkan tampilan menu dari program Robot Line

Follower. LCD yang biasa digunakan disini adalah LCD yang berukuran 16x2
karakter sehingga cukup untuk menampilkan pengaturan program seperti kecepatan motor, kepekaan sensor, kendali PID, dan delay.

Copyright by HIMANIKA 2010

Page 15

Gbr. 4. Rangkaian LCD 16x2 (LMB 162)

Gbr. 5. Tampilan LCD 16x2 Karakter 5. GearBox (Mekanik). GearBox berfungsi untuk mengatur torsi dari motor supaya dapat menggerakkan roda dari Robot Line Follower dan juga sebagai tempat roda dan motor. Gearbox biasanya digunakan untuk memperbesar Torsi dari motor (motor DVD), ini dikarenakan motor DVD mempunyai torsi yang kecil tetapi mempunyai kecepatan putaran(rpm) yang cepat. Oleh karena itu diperlukan sebuah gearbox untuk memperbesar torsinya sehingga dapat menggerakkan roda dari robot. Motor yang biasanya dipakai untuk Robot Line Follower adalah motor DVD, ini karena motor DVD mudah dikendalikan, kecepatan motor yang tinggi, dan harganya yang murah.

Copyright by HIMANIKA 2010

Page 16

Copyright by HIMANIKA 2010

Page 17

BAGIAN VI ALGORITMA PEMROGRAMAN C/C++


CONTOH ALGORITMA PADA PEMROGRAMAN MIKROKONTROLLER DENGAN BAHASA C/C++

1. PENDAHULUAN Bahasa C/C++ adalah bahasa pemrograman yang sangat digemari karena bahasa C/C++ adalah bahasa yang sangat kompatibel untuk pemrograman computer berbasis Windows ataupun nix, bahkan bisa untuk pemrograman mikrokontroler dari Atmel, PIC, dsb. Bahasa C/C++ adalah suatu singkatan yaitu C yang berarti Case sensitive, artinya dalam pemrograman bahasa C ini antara huruf besar dan huruf kecil adalah berbeda ( A a ). Maka dalam membuat progam dengan bahasa C/C++ ini harus berhati-hati dalam menuliskan perintah, konstanta, dsb. Mengapa menggunakan bahasa C/C++???? Bahasa C/C++ adalah salah satu bahasa pemrograman yang mendekati bahasa mesin (low level programming), sehingga hasil kompilasinya lebih kecil dibanding bahasa high level programming, selain itu orang yang sudah menguasai bahasa C/C++ lebih mudah dan cepat untuk mempelajari bahasa high level programming dikarenakan cara berpikir orang tersebut lebih terstruktur dan sistematis atau bisa dikatakan orang tersebut sudah memahami cara kerja suatu CPU (Central Processing Unit). Secara umum struktur pemrograman bahasa C/C++ terdiri dari beberapa bagian yaitu A. Header B. Definisi/define C. Variabel dan konstanta D. Fungsi tambahan E. Fungsi utama/void main (program akan dimulai dari fungsi ini) Pada dasarnya pemrograman mikrokontroler ini adalah fungsi I/O, yaitu pengolahan nilai-nilai input yang diproses untuk menghasilkan nilai-nilai output yang dikehendaki. Nilai-nilai input atau output biasanya berbentuk bilangan biner atau hexadecimal. 2. HEADER Dalam bahasa pemrograman C/C++ dikenal perintah yaitu INCLUDE, yaitu sebuah perintah yang digunakan untuk memasukkan sebuah file *.h, yang berisi perintah-perintah atau konstanta yang digunakan dalam membuat program. Sebagai contohnya #include <stdio.h>

Copyright by HIMANIKA 2010

Page 18

Maka semua perintah dan konstanta yang ada dalam file stdio.h dapat diakses dalam project yg dibuat.

3. DEFINE Perintah ini digunakan untuk mendefinisikan nilai, alamat, atau sejenisnya. Secara umum struktur define adalah sebagai berikut #define <nama> Sebagai contohnya #define phi 3,14 <alamat/nilai>

Dari baris berintah diatas, dapat ditarik kesimpulan bahwa nilai phi = 3,14.

4. VARIABLE, KONSTANTA, JENISA DATA, DAN PENULISAN BILANGAN a. VARIABEL Dalam pemrograman C/C++ penulisan variable dapat ditulis sebagai berikut

<jenis data> <nama variable>


Sebagai contoh int indeks, dari contoh tersebut nama variable yang bernama indeks mempunyai jenis data yaitu integer.

b. KONSTANTA Konstanta atau yang disebut nilai tetap/constant dalam pemrograman C/C++ dapat dituliskan

<jenis data> <nama konstanta> = <nilai>


Hampir mirip dengan penulisan varibel, hanya saja ditambahkan besar nilainya. Misalnya saja, int kecepatan_motor = 200. Sehingga konstanta yang bernama kecepatan_motor akan bernilai 200.

c. JENIS DATA

Copyright by HIMANIKA 2010

Page 19

Tipe

Ukuran (bit) 1 8 8 8 16 16 16 16 32 32 32 32 32

Range

bit char unsigned char signed char int short int unsigned int signed int long int unsigned long int Signed long int float double

0 dan 1 -128 to 127 0 to 255 -128 to 127 -32768 to 32767 -32768 to 32767 0 to 65535 -32768 to 32767 -2147483648 to 2147483647 0 to 4294967295 -2147483648 to 2147483647 1.175e-38 to 3.402e38 1.175e-38 to 3.402e38

Dalam membuat sebuah program sangatlah penting menggunakan jenis data sesuai dengan kebutuhan. Misalnya, jika akan membuat program mikrokontroller 8 bit yang didalamnya akan ada inisialisasi sebuah port pada suatu variable. Maka jenis data yang digunakan pada variable tersebut harus menggunakan jenis data bertipe 8 unsigned char. Hal itu dikarenakan port mikrokontroller 8 bit ( yang berarti 2 ) mempunyai nilai minimum 0 dan maksimum 255. Atau jika ingin membuat program untuk menghitung volume suatu bangun ruang, maka jenis data yang digunakan haruslah float atau double. Hal tersebut dikarenakan nilai volume suatu bangun ruang tidak selalu bilangan bulat (mengandung koma).

d. PENULISAN BILANGAN Dalam C++ dalam dunia mikrokontroller dikenal beberapa cara penulisan jenis bilangan, berikut adalah beberapa cara penulisannya

Copyright by HIMANIKA 2010

Page 20

Nama Bilangan Desimal Bit Hexadecimal

Cara Penulisan 123 0b1011 0x1F

Keterangan Ditulis biasa Harus diawali dengan 0b Harus diawali dengan 0x

5. COMMENT ATAU KOMENTAR Komentar dalam bahasa C/C++ harus diawali dengan karakter // (tanpa tanda petik) atau bisa juga ditulis dengan diawali /*(tanpa tanda petik) dan diakhiri dengan */(tanpa tanda petik). Sebagai contoh // ini hanya komentar/catatan ga usah dipedulikan /*ini bukan perintah alias tidak penting*/ ///*ngemeng epeh*/ 6. OPERATOR Dalam bahasa C/C++ ada beberapa operator yaitu Bentuk Operator == != < <= > >= = * / + *= Contoh A == A A != a A<B A <= B C>B C >= B X = 10 A*B A/B A+B AB A *= B Arti A Sama dengan A ( A bernilai sama dg A ) A Tidak sama dengan a ( A berbeda dengan ) A Lebih kecil B A Lebih kecil atau sama dengan B C Lebih besar B C Lebih besar atau sama dengan B Memasukkan nilai ( X diberi nilai 10 ) A dikali dengan B A dibagi dengan B A ditambah dengan B A dikurangi dengan B A=A*B

Copyright by HIMANIKA 2010

Page 21

/= += -=

A /= B A += B A -= B

A=A/B A=A+B A=AB

7. IF ELSE . Perintah if else dalam bahasa C/C++ fungsinya pada dasarnya adalah untuk memilih tindakan antara 2 keadaan. Misalnya if ( ada_garis == 1) { maju(); } //memanggil fungsi yang bernama maju, jika nilai ada_garis = 1 else { mundur(); } //memanggil fungsi yang bernama mundur, jika nilai garis selain 1 8. FUNGSI Fungsi dalam bahasa pemrograman C/C++ secara umum dapat dituliskan void <nama fungsi>() contohnya void jalan_lurus() { Motor_1 = 1; Motor_2 = 1; } Cara memanggil fungsi diatas hanyalah menuliskan jalan_lurus();. Maka secara langsung nilai Motor_1 akan diberi nilai 1 dan Motor_2 akan diberi nilai 1. jika menghendaki fungsi dengan parameter maka dapat ditulis void <nama fungsi>(<jenis data parameter> <nama parameter>) contohnya void belok(bit kekanankah) { if (kekanankah == 1) { Motor_1 = 1; Motor_2 = 0; } else { Motor_1 = 0; Motor_2 = 1; } }

//apakah belok kekanan

Jika contoh fungsi diatas dipanggil dengan perintah


Copyright by HIMANIKA 2010 Page 22

belok(1); maka Motor_1 akan diberi nilai 1 dan Motor_2 akan diberi nilai 0. Berbeda jika fungsi tersebut dipanggil perintah belok(0); maka nilai Motor_1 akan diberi nilai 0 dan Motor_2 akan diberi nilai 1. 9. SWITCH CASE . BREAK Perintah switch case pada dasarnya sama seperti perintah if else , hanya saja switch case break lebih efisien untuk memilih tindakan dari banyak keadaan. Contohnya switch (sensor) { case 0b00111111: belok_kiri(); break; case 0b11100111: maju(); break; case 0b11111100: belok_kanan(); break; } Jika nilai sensor bernilai 0b11100111 maka akan menjalankan fungsi yang bernama maju selanjutnya akan keluar dari perintah switch case . Namun jika nilai sensor 0b11111111 atau bisa dikatakan tidak ada dalam daftar case, maka perintah switch tidak akan menjalankan perintah/fungsi apapun. 10. WHILE while adalah suatu perintah perulangan. Secara umum perintah while dituliskan sebagai berikut while(keadaan) contohnya int jumlah_perulangan = 10; while (jumlah_perulangan != 0) { jumlah_perulangan = jumlah_perulangan -1; } dari contoh di atas tadi, dapat ditarik kesimpulan bahwa nilai jumlah_perulangan akan dikurangi dengan 1 selama 10 kali. 11. FOR

Copyright by HIMANIKA 2010

Page 23

Perintah for prinsipnya sama dengan while yaitu mengulang, namun lamanya perulangan bisa diatur mulai awal hingga akhir. Berikut cara penulisannya for (<nilai awal>; <nilai akhir>; <metode>) contohnya for (i=1; i<=10; i++) { beban = beban + 10;} dari contoh diatas mempunyai arti bahwa operasi penjumlahan beban = beban + 10; akan diulang selama 10 kali (dari nilai i=1 sampai i=10). 12. PEMROGRAMAN MIKROKONTROLER UNTUK LINE FOLLOWER a. ALGORITMA MEMBACA GARIS Sebelum membuat program, maka kita mendefinisikan seluruh kemungkinan pembacaan sensor dahulu. Dengan demikian kita dapat menentukan pergerakan robot yang tujuannya adalah menjaga agar robot selalu berada tepat diatas garis. Sebagai contoh jika konfigurasi tata letak sensor dari robot adalah sebagai berikut

* * * * * * * 0 1 2 3 4 5 6 * 7 maka dapat dibuat daftar dari kemungkinan terbesar sensor-sensor tersebut membaca garis adalah sebagai berikut Kiri tajam Kiri Lurus Kanan Kanan tajam 01111110 11111110 01111100 11111100 01111101 11111101 01111001 11111001 01111011 11111011 01110011 11110011 01110111 11110111 01111111 01100111 11100111 01101111 11101111 01001111 11001111 01011111 11011111 00011111 10011111 00111111 10111111

Dari daftar-daftar nilai tersebut lalu dapat dibuat program mikrokontroler untuk menggerakkan/menjalankan robot agar berjalan mengikuti garis yang
Copyright by HIMANIKA 2010 Page 24

ditentukan menggunakan perintah switch ... case ... break, sehingga programnya menjadi seperti dibawah ini switch(sensor) { case 0b01111110: case 0b11111110: kiri_tajam(); break; case 0b01111001: case 0b11111001: belok_kiri(); break; case 0b01110111: case 0b11110111: maju(); break;} b. PWM (Pulse Width Modulation) Pulse Width Modulation atau yang bisa disebut PWM ini berfungsi sebagai pengatur tegangan output. Fungsi PWM ini dapat di bentuk/dibuat dengan metode ISR (Interrupt Service Routine) dengan memanfaatkan fitur Timer yang ada pada AVR pada saat timer tersebut terjadi overflow/melimpah. Berikut ini adalah contoh dari PWM interrupt [TIM0_OVF] void timer0_ovf_isr(void) { count++; if (count<=pwm) output=1; else output=0; TCNT0=0xFF; } Fungsi interrupt diatas akan dijalankan saat timer 0 mengalami overflow atau nilai TCNT0 melebihi 0xFF. Misalnya saja jika nilai variabel pwm diatas diberi nilai 200 maka nilai variabel output akan bernilai 1 selama 200 kali overflow. Semakin lama output bernilai 1 maka semakin besar tegangan yang dikeluarkan oleh output, begitu sebaliknya.

Copyright by HIMANIKA 2010

Page 25

BAGIAN VII SOFTWARE PENDUKUNG CodeVision AVR


Membuat Source Code Dengan Codevision AVR Source code secara lengkap dapat dilihat pada Lampiran A. Source code dibuat dengan menggunakan software CodeVisionAVR dengan langkah-langkah sebagai berikut : 1. Jalankan CodeVisionAVR, kemudian klik File -> New, Pilih Project.

2. Do you want to use the CodeWizardAVR? Klik Yes 3. Pilih Chip yang digunakan, chip : ATmega8535L, clock : 11.059200 MHz

4. Lakukan setting sebagai berikut : Port : Port C sebagai Output dan Port D sebagai Input Pullup Timers : Timer 0 dengan Clock Value 10,800 KHz, aktifkan Overflow Interrupt

Copyright by HIMANIKA 2010

Page 26

5. Klik File -> Generate, Save and Exit 6. Buatlah source code. 7. Setelah selesai membuat source code, klik Setting -> Programmer 8. Pilih AVR Chip Programmer Type : Kanda System STK200+/300 dan pilih Printer Port pada LPT1 : 378h

Copyright by HIMANIKA 2010

Page 27

9. Klik Project -> Configure, kemudian pilih menu After Make dan aktifkan Program the Chip. Klik OK jika sudah. PERHATIAN ! Jangan mengubah setting apapun pada menu ini. Jika salah memilih, chip Anda tidak bisa digunakan lagi !!

10. Untuk meng-compile project, klik Project -> Make 11. Jika tidak ada error maka file siap didownload ke chip. Pastikan koneksi kabel downloader dan chip sudah terpasang dengan benar. 12. Nyalakan power supply dan klik Program. Tunggu hingga proses download selesai.

Copyright by HIMANIKA 2010

Page 28

Daftar Pustaka

1. Edtronics, Mikrokontroller AVR 128 http://edtronics.wordpress.com/2008/12/05/mikrokontroler-avr-atmega128-64/ 2. ToPaysTronics, Memulai Codevision AVR. http://payztronics.blogspot.com/2009/06/memulai-coviavr-codevisionavr.html 3. Agfiyanto, Pemograman Mikrokontroller AVR melalui USB. http://agfi.staff.ugm.ac.id/blog/index.php/2009/07/pemrogram-mikrokontroler-avrmelalui-usb/ 4. Truck-Bus, 2009, Gearbox and Sensor Pictures. http://truckbus.blogspot.com/2009/09/gear-box-and-sensor-pictures.html

Copyright by HIMANIKA 2010

Page 29

You might also like