Anda di halaman 1dari 70

KEGIATAN BELAJAR 1

MIKROKONTROLER ATmega 8535

Lembar informasi Mikrokontroller adalah rangkaian terintregrasi (Integrated Circuit-IC) yang telah mengandung secara lengkap berbagai komponen pembentuk sebuah

komputer.Artinya bahwa didalam sebuah IC Mikrokontroler sebetulnya sudah terdapat kebutuhan minimal agar Mikrokontroler dapat berkerja, yaitu berupa mikroprosesor,ROM,RAM,I/O, dan clock seperti halnya yang dimiliki oleh sebuah komputer. Mikrokontroler AVR memiliki arsitektur RISC 8 bit, dimana semua instruksi dikemas dalam kode 16-bit (16-bits word) dan sebagian besar instruksi dieksekusi dalam 1 (satu) siklus clock , berbeda dengan instruksi MCS51 yang membutuhkan 12 Siklus clock.tentu saja itu terjadi karena kedua jenis mikrokontroler tersebut memiliki arsitektur yang berbeda.AVR Menggunakan RISC(reduced instruction set computing), sedangkan MCS51 berteknologi CISC(complex instruction set computing). 1.1 Macam-macam Mikrokontroler Ada banyak jenis mikrokontroler yang masing-masing memiliki seri sendiri sendiri, diantaranya: 1) Keluarga MCS-51 (Intel) 2) Keluarga AT89 (Atmel, arsitektur Intel 8051) 3) Keluarga AT90, ATtiny, ATMega ( Atmel, arsitektur AVR ) 4) Keluarga MC68HC11 ( Motorola ) 5) Keluarga PIC 8 ( Microchip ) 6) Keluarga Z80 ( Zilog ) Yang membedakan kemungkinan hanya dalam hal kemasana fisik misalnya jumlah pin dan fitur-fiturnya seperti ukuran kapasitas memori program dan memori data, jumlah timer, jumlah interupsi, dan lain-lain.

1.2 Mikrokontroler Keluarga AVR Secara histories mikrokontroller seri AVR pertama kali diperkenalkan ke pasaran sekitar tahun 1997 oleh perusahaan Atmel, yaitu sebuah perusahaan yang sangat terkenal dengan produk microcontroller seri AT89S51/52-nya yang sampai sekarang masih banyak digunakan di lapangan. Tidak seperti mikrokontroller seri AT89S51/52 yang masih mempertahankan arsitektur dan set instruksi dasar mikrokontroller 8031 dari perusahaan INTEL. Berdasarkan arsitekturnya, AVR merupakan mikrokontroller RISC (Reduce Instruction Set Computer) dengan lebar bus data 8 bit. Berbeda dengan sistem AT89S51/52 yang memiliki frekuensi kerja seperduabelas kali frekuensi oscilator, frekuensi kerja mikrokontroller AVR ini pada dasarnya sama dengan frekuensi oscilator, sehingga hal tersebut menyebabkan kecepatan kerja AVR untuk frekuensi oscilator yang sama, akan dua belas kali lebih cepat dibandingkan dengan mikrokontroller keluarga AT89S51/52. Pada modul ini akan di bahas tentang Mikrokontroler ATMega 8535.

1.3 Karakteristik ATMega 8535 Prosesor yang digunakan sebagai pengendali utama robot adalah 8 bit mikrokontroler dari keluarga AVR, yaitu ATmega8535. Alasan penggunaan

mikrokontroler ini adalah karena harga yang relatif murah, mudah diperoleh, kemudahan dalam pemrograman, dan fitur-fitur menarik yang dimilikinya. Beberapa karakteristik dan fitur yang dimiliki mikrokontroler ATMega8535 antara lain: 1) Resolusi data 8 bit. 2) RISC arsitektur. 3) 8 K byte In System Programmable Flash. 4) 512 Bytes EEPROM. 5) 512 Bytes SRAM internal. 6) 8 channel, 10 bit resolusi ADC. 7) 4 channel PWM. 8) 2 timer/counter 8 bit. 9) 1 timer/counter 16 bit.

10) Osilator internal yang dikalibrasi. 11) Internal dan eksternal sumber interrupt. 12) 6 mode sleep. ATMega8535 memiliki bagian struktur bagian sebagai berikut : 1) Saluran I/O 32 buah, yaitu Port A, Port B, Port C, dan Port D. 2) Tiga buah Timer/Counter dengan kemampuan perbandingan. 3) CPU yang terdiri atas 32 buah register. 4) Memori Flash sebesar 8 kb dengan kemampuan Read While Write. 5) Unit interupsi internal dan eksternal. 6) Port antarmuka SPI 7) EEPROM sebesar 512 byte yang dapat diprogram saat operasi. 8) Antarmuka komparator analog. 9) Port Usart untuk komunikasi serial 1.4 Organisasi Memori Mikrokontroler ATMega8535 memiliki 3 jenis memori yaitu Memori Program, Memori Data dan Memori EEPROM.

1.4.1

Memori Program

ATMega8535 memiliki kapasitas memori program sebesar 8 Kbyte kapasitas memori flash yang dimiliki bervariasi dari 1K sampai 128 KB. Secara teknis, memori jenis ini dapat diprogram melalui saluran antarmuka yang dikenal dengan nama Serial Peripheral Interface (SPI) yang terdapat pada setiap seri AVR tersebut. Dengan menggunakan perangkat lunak programmer (downloader) yang tepat, pengisian memori Flash dengan menggunakan saluran SPI ini dapat dilakukan bahkan ketika chip AVR telah terpasang pada sistem akhir (end system), sehingga dengan demikian pemrogramannya sangat fleksibel dan tidak merepotkan pengguna (Secara praktis metoda ini dikenal dengan istilah ISP-In System Programming sedangkan perangkat lunaknya dinamakan In System Programmer).

Gambar 1.1

1.4.2

Memori Data

Gambar 1.2 SRAM (Static Random Access memory).

AVR ATmega 8535 memiliki memori data yang terbagi menjadi 3 bagian, yaitu 3 register umum, 64 buah register I/O, dan 512 SRAM internal.re

1.4.3

RAM

RAM dalam hal ini berperan untuk menyimpan data yang sifatnya sementara, yang biasanya diperlukan pada saat proses manimpulasi data ( penjumlahan, pengurangan, perkalian, pembagian, dan transfer data ).

1.4.4

SRAM

SRAM digunakan untuk menyimpan data variabel yang dimungkinkan berubah setiap saatnya. 1.4.5 ATMega8535 memiliki kapasitas memori data sebesar 608 Byte yang terbagi menjadi 3 bagian yaitu : Serba guna (32 byte), untuk register serba guna R0 R31 Register I/O (64 byte), untuk mengatur fasilitas seperti timer/counter,

interupsi, ADC, USART,SPI,EEPROM dan port I/O seperti Port A, Port B, Port C dan Port D SRAM (512 ), untuk memori SRAM

1.4.6

Memori EEPROM

EEPROM umumnya digunakan untuk menyimpan data-data program yang bersifat permanen. ATMega8535 memiliki EEPROM sebesar 512 Byte. Memori EEPROM ini hanya dapat di akses dengan menggunakan register-register I/O yaitu register EEPROM address (EEARH-EEARL), register EEPROM Data (EEDR) dan register EEPROM Control (EECR).

Gambar 1.3 EEPROM (Electrically Erasable Programmable Read Only Memory)

1.4.7

Perbandingan Jumlah Memori

Microcontroller AVR Jenis Paket TinyAVR AVR (classi MegaAVR 832 C (AVR)2044 3264 IC pin pin Flash EE ( Kb ) (K 1 2K 1 8K

Memori (byte) EPROM ( (Kb ) b 0 128 0 512 4K 512 SRAM (Byte ) 128 1K 4K

64 128

pin 8 1 128 K 512

1.4.8 Sistem Minimum ATMega8535

Gambar 1.4 Sistem Minimum ATMega8535

1.4.9 Deskripsi Pin

Gambar 1.5 Deskripsi Pin ATMega8535

PIN

KETERANGAN
Port B, merupakan Port I/O 8-bit dua arah (bi-directional) dengan resistor pull-up internal, selain sebagai Port I/O 8-bit Port B juga dapat difungsikan secara individu sebagai berikut : PB7 : SCK ( SPI Bus Serial Clock ) PB6 : MISO (SPI Bus Master Input/Slave Output) PB5 : MOSI ( SPI Bus Master Output/Slave Input ) PB4 : SS ( SPI slave Select Input ) PB3 : AIN 1 ( Analog Comparator Negatif Input ) OC0 ( Output Compare Timer/Counter 0 ) PB2 : AIN 0 ( Analog Comparator Positif Input ) INT2 ( External Interupt 2 Input ) PB1 : T1 ( timer / Counter 1 External Counter Input ) PB0 : To ( Timer/Counter 0 External Counter Input ) XCK ( USART External Clock Input/Output )

1-8

9 10 11 12 13

RESET, merupakan pin reset yang akan bekerja bila pulsa rendah (aktif low ) selama minimal 1,5 us VCC, Catu daya digital GND, Ground untuk catu daya digital XTAL2, merupakan output dari penguat osilator pembalik XTAL1, merupakan input ke penguat osilator pembalik dan

input ke internal clock Port D, merupakan port I/O 8-bit dua arah ( bi-directional ) dengan resistor pull-up internal, selain sebagai Port I/O 8-bit Port D juga dapat difungsikan secara individu sebagai berikut : PD7 : OC2 ( Output Compare Timer/Counter 2 ) PD6 : ICP ( Timer/Counter 1 Input Capture ) PD5 : OC1A ( Output Compare A Timer/Compare A Timer/Counter 1 ) PD4 : OC1B ( Output Compare B Timer/Compare A Timer/Counter 1 ) PD3 : INT1 ( External Interupt 1 Input ) PD2 : INT0 ( External Interupt 0 Input ) PD1 : TXD( USART transmit ) PD0 : RXD ( USART receive )

14-21

Port C, merupakan port I/O 8-bit dua arah ( bi-directional )dengan resistor pull-up internal, selain sebagai Port I/O 8-bit Port C juga dapat difungsikan secara individu sebagai berikut :

22-29

PC7 : TOSC2 ( Timer Oscilator 2 ) PC6 : TOSC1 ( Timer Oscialtor 1 ) PC1 : SDA ( Serial Data Input/Output, PC ) PC0 : SCL ( Serial Clock, PC ) merupakan catu daya yang digunakan untuk

30 31 32 33 40

AVCC,

memasukan analog ADC yang terhubung ke Port A GND, Ground untuk catu daya analog AREF, merupakan tegangan referensi analog untuk ADC Port A, merupakan port I/O 8-bit dua arah dengan resistor pull-up internal, selain sebagai Port I/O 8-bit Port B juga dapat berfungsi sebagai masukan 8 channel ADC

KEGIATAN BELAJAR 2

DASAR PEMROGRAMAN BAHASA C

2.1 Sejarah Bahasa C B ahasa C m erupakan perkembangan dari bahasa B CPL yang

dikembangkan oleh M artin R ichards pada tahun 1967. S elanjutnya bahasa ini mem berikan ide kepada Ken Thompson B yang kem udian

mengembangkan bahasa yang disebut bahasa

pada tahun 1970.

Perkembangan selanjutnya dari bahasa B adalah bahasa C oleh Dennis Ricthie sekitar tahun 1970-an di B ell Telephone Laboratories pertama PD P-11 Inc. kali yang

(sekarang adalah AT& T B ell Laboratories). B ahasa C digunakan di computer Digital Equipment UNIX. Corporation saat ini

menggunakan

system operasi

Hingga

penggunaa n

bahasa C telah merata di seluruh dunia. Hampir semua perguruan tinggi di dunia menjadikan bahasa C sebagai salah satu mata

kuliah wajib. Selain

itu, banyak bahasa pem rogram an populer seperti

PHP dan Java menggunakan sintaks dasar yang mirip bahasa C . O leh karena itu, kita juga sangat perlu mem pelajarinya.

2.2 Kekurangan dan Kelebihan Bahasa C Kelebihan Bahasa C 1) B ahasa C tersedia ham pir di semua jenis com puter. 2) Kode bahasa C sifatnya portable dan fleksibel untuk semua jenis PC. 3) B ahasa C hanya menyediakan 32 kata kunci. 4) Proses executable program bahasa C lebih cepat. 5) Dukungan pustaka yang banyak. 6) C adalah bahasa yang terstruktur. 7) B ahasa C term asuk bahasa tingkat menengah

Kekurangan Bahasa C 1) B anyaknya O perator serta fleksibilitas penulisan program kadang-kadang m embingungkan pem akai. 2) B agi pemula pada umumnya akan kesulitan menggunakan pointer.

2.3 P en gena l P engenal (identifier) m erupakan nam a yang didefinisikan oleh program untuk m enunjukan identitas dari sebuah konstanta,variabel,fungsi dan label atau tipe data khusus.pem berian nam a sebuah pengenal dapat ditentukan bebas sesuai yang diinginkan program tetapi harus m em enuhi aturan berikut : Karakter pertama tidak boleh menggunakan angka. Karakter kedua dapat berupa huruf,angka,atau garis bawah. Tidak boleh menggunakan spasi. Bersifat case sensitif yaitu huruf kecil dan huruf besar dianggap berbeda.

Contoh penamaan yang diperbolehkan : Contoh penamaan yang tidak diperbolehkan : -

2.4 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 data yang tepat akan membuat proses operasi data menjadi lebih efisien dan efektif.

10

Dalam bahasa C terdapat lima tipe data dasar, yaitu :

2.5 Konstanta Dan Variabel a. Konstanta Konstanta merupakan suatu nilai yang tidak dapat diubah selama proses program berlangsung. Konstanta nilainya selalu tetap. Konstanta harus didefinisikan terlebih dahulu di awal program. Konstanta dapat bernilai integer, pecahan, karakter dan string.

b. Variable Variabel adalah suatu pengenal (identifier) yang digunakan untuk mewakili suatu nilai tertentu di dalam proses program. Berbeda dengan konstanta yang nilainya selalu tetap, nilai dari suatu variable bisa diubah-ubah sesuai kebutuhan. Nama dari suatu variable dapat ditentukan sendiri

b.1 Variabel Global Dan Variabel Local Variabel global adalah variable yang dapat dikenali oleh semua fungsi yang ada dalam program sadangkan variable local adalah variable yang hanya dikenali oleh fungsi tertentu saja. Variable local hanya akan dibentuk/dialokasikan dalam memori untuk variable tersebut akan dibebaskan sehingga penggunaan variable tersebut akan dibebaskan sehingga penggunaan variable local lebih

mengguntungkan dari sisi pemakaian memori.

Contoh deklarasi variable global (dideklarasikan diluar fungsi)

11

2.6 Komentar Program Komentar program hanya diperlukan untuk memudahkan pembacaan dan pemahaman suatu program (untuk keperluan dokumentasi program). Dengan kata lain, komentar program hanya merupakan keterangan atau penjelasan program. Untuk memberikan komentar atau penjelasan dalam bahasa C digunakan pembatas /* dan */ atau menggunakan tanda // untuk komentar yang hanya terdiri dari satu baris. Komentar program tidak akan ikut diproses dalam program (akan diabaikan). Contoh :

2.7 Pengarah Prosesor Pengarah prosesor digunakan untuk mendefinisikan prosesor yang digunakan, dalam hal ini adalah untuk mendefinisikan jenis mikrokontroler yang

digunakan.dengan pengarahan prosesor ini maka pendeklarasian registerregister dan penamaannya dilakukan pada file lain yang disisipkan dalam program utama dengan sintaks sebagai berikut.

2.8 Pernyataan Pernyataan adalah satu buah intruksi lengkap yang berdiri sendiri. Berikut adalah contoh sebuah pernyataan :

Pernyataan diatas merupakan sebuah interuksi untuk mengeluarkan data 0x0F ke Port C.

12

2.9 Operator Aritmatika Bahasa C menyediakan lima operator aritmatika, yaitu : Operator * / + % keterangan Operator untuk operasi penjumlahan Operator untuk operasi pembagian Operator untuk operasi penambahan Operator untuk operasi pengurangan Operator untuk operasi sisa pembagian

Catatan : operator % digunakan untuk mencari sisa pembagian antara dua bilangan.Misalnya :

2.10 Operator Pembanding Operator Hubungan digunakan untuk membandingkan hubungan antara dua buah operand (sebuah nilai atau variable. Operator hubungan dalam bahasa C

2.11 Operator Logika Jika operator hubungan membandingkan hubungan antara dua buah operand, maka operator logika digunakan untuk membandingkan logika hasil dari operator-operator hubungan. Operator logika ada tiga macam, yaitu :

Operator && || ! Contoh.

keterangan Operator untuk logika AND Operator untuk logika OR Operator untuk logika NOT

13

Pernyataan diatas terdiri dari dua kondisi yaitu a==b dan c!=d yang keduanya dihubungkan dengan logika &&(AND). Jika logika yang dihasilkan benar maka perintah PORTC = 0xFF akan dikerjakan dan jika salah maka tidak dikerjakan.

2.12 Operator Bitwise Operator bitwise adalah operasi logiika yang berkerja pada level bit.hal ini berbeda dengan operator logika diatas dimana pada operator logika menghasilkan benar atau salah (Boolean) sedangkan operator bit menghasilkan data biner. Operator >> & ^ | ~ 2.13 keterangan Pergeseran bit kekanan Bitwise AND Bitwise XOR (exclusive OR) Bitwise OR Bitwise NOT

Operator Penugasan

Operator Penugasan (Assignment operator) dalam bahasa C berupa tanda sama dengan (=). Contoh : nilai = 80; A = x * y; Artinya : variable nilai diisi dengan 80 dan variable A diisi dengan hasil perkalian antara x dan y.

2.14 Operator Aritmatika Bahasa C menyediakan lima operator aritmatika, yaitu : Operator * / % + keterangan Untuk perkalian Untuk Pembagian Untuk sisa pembagian (modulus) Untuk pertambahan Untuk pengurangan

Catatan : operator % digunakan untuk mencari sisa pembagian antara dua bilangan. Misalnya : 9%2=1 9%3=0

14

2.15 Operator Unary Operator Unary merupakan operator yang hanya membutuhkan satu operand saja. Dalam bahasa C terdapat beberapa operator unary, yaitu :

Catatan Penting ! : Operator peningkatan ++ dan penurunan -- jika diletakkan sebelum atau sesudah operand terdapat perbedaan

2.16 Fungsi pustaka Bahasa C mempunyai fungsi pustaka yang berada pada file-file tertentu dan sengaja disediakan untuk menangani berbagai hal dengan cara memanggil fungsi-fungsi yang telah dideklarasikan didalam file tersebut. Dalam banyak hal, pustaka,pustaka yang tersedia tidak berbentuk kode sumber melainkan dalam bentuk yang telah dikompilasi. Pada saat proses lingking,ditulis oleh pemrogram. Sintaks untuk menggunakan fungsi pustaka ini adalah sebagai berikut :

Contoh :

Beberapa fungsi yang telah disediakan oleh codevisian AVR antara lain adalah : Fungsi tipe karakter (ctype.h) Fungsi standar I/O (stdio.h) Fungsi matematika (math.h) Fungsi string (string.h) Fungsi konversi BCD (bcd.h) Fungsi konversi akses memori (mem.h)

15

Fungsi tunda (delay.h) Fungsi LCD (lcd.h) Fungsi I2C (I2C.H) Fungsi SPI (spi.h) Fungsi real time clock (RTC) (ds1302.h,ds1307.h) Fungsi sensor suhu LM75,DS1621 dll. (lm75.h, ds1621.h)

2.17 Struktur kondisi if. Struktur 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 :

Pernyataan if diatas akan mengecek apakah data yang terbaca pada port A (PINA) nilainya lebih besar dari 0x80 atau tidak, jika ya maka variable dataku diisi dengan nilai PINA dan data 0xFF dikeluarkan ke port C. Apabila dalam blok pernyataan hanya terdapat satu pernyataan saja maka tanda { dan } dapat dihilangkan seperti contoh berikut :

2.18 struktur kondisi if......else. 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)

16

pernyataan-1 else pernyataan-2 Contoh Program :

Pernyataan if ..else akan mengecek apakah data yang terbaca pada Port A (PINA) nilainya lebih dari 0x80 atau tidak, jika ya maka variabel dataku diisi dengan nilai PINA dan data 0xFF dikeluarkan ke port C tetapi jika tidak variabel dataku diisi dengan nilai komplemen dari PINA (~PINA) dan data 0x00 dikeluarkan ke port C.

2.19 Pernyataan If Bersarang Pernyataan if bersarang (nested if) adalah pernyataan if maupun if...else dimana didalam blok pernyataan yang akan dikerjakan terdapat pernyataan if atau if else lagi.contoh bentuk pernyataan if bersarang 2 tingkat adalah sebagai berikut : If (kondisi_1) { If (kondisi_2) { // blok pernyataan_1 yang akan dikerjakan // jika kondisi_1 dan kondisi_2 terpenuhi }

17

} Else { If (kondisi_3) { // blok pernyataan_2 yang akan dikerjakan // jika kondisi_1 dan kondisi_3 terpenuhi }} 2.20 Pernyataan Switch Pernyatan switch digunakan untuk melakukan pengambilan keputusan terhadap banyak kemungkinan. Bentuk pernyataan switch adalah sebagai berikut :

Pada pernyataan switch, masing-masing pernyataan (pernyataan_1 sampai dengan pernyataan_default)dapat berupa satu atau beberapa perintah dan tidak perlu berupa blok pernyataan.pernyataan_1 akan dikerjakan jika eksperesi bernilai sama dengan nilai_1. pernyataan_2 akan dikerjakan jika eksperesi bernilai sama dengan nilai_2. pernyataan_3 akan dikerjakan jika eksperesi bernilai sama dengan nilai_3 dan seterusnya. Default bersifat opsional artinya boleh ada boleh tidak. Contoh :

Pernyataan diatas berarti membaca port A,kemudian datanya (PINA) akan dicocokan dengan nilai case. Jika PINA bernilai 0xFE Maka data 0x00 akan dikeluarkan ke PORTC kemudian program keluar dari blok pernyataan switch tetapi jika PINA bernilai 0xFD Maka data 0xFF Akan dikeluarkan ke port C kemudian program keluar dari pernyataan switch.

18

2.21 Pernyataan While Pernyataan while digunakan untuk pengulangan sebuah pernyataan atau blok pernyataan secara terus menerus selama kondisi tertentu masih terpenuhi. Bentuk pernyataan while adalah sebagai berikut : while (kondisi) { //sebuah pernyataan atau blok pernyataan } Jika pernyataan yang akan diulang hanya berupa sebuah pernyataan saja maka tanda { dan } bisa dihilangkan. Contoh :

Pernyataan diatas akan mengeluarkan data a ke port C secara berulang- ulang. Setiap pengulangan nilai a mencapai 10 maka pengulangan selesai.

2.22. Pernyataan For pernyataan for digunakan untuk melakukan pengulangan sebuah pernyataan atau blok pernyataan, tetapi berapa kali jumlah pengulangan dapat ditentukan secara lebih spesifik. Bentuk pernyataan for adalah sebagai berikut : for (nilai_awal ; kondisi ; perubahan) { //sebuah blok pernyataan atau blok pernyataan } Nilai_awal adalah nilai inisialisasi awal sebuah variable yang didefinisikan terlebih dahulu pengulangan. Kondisi merupakan pernyataan pengetesan untuk mengontrol pengulangan, jika pernyataan kondisi terpenuhi (benar) maka blok pernyataan akan diulang terus sampai pernyataan kondisi tidak terpenuhi (salah). untuk menentukan niali variable pertama kali sebelum

19

Perubahan adalah pernyataan yang digunakan untuk melekukan perubahan nilai variable baik naik maupun turun setiap kali pengulangan dilakukan. Contoh :

Pertama kali nilai a adalah 1, kemudian data a dikeluarkan ke port C. selanjutnya data a dinaikan (a++) jika kondisi a<10 masih terpenuhi maka data a akan terus dikeluarkan ke PORTC.

2.23 Bentuk Dasar Program C Sebuah program dalam bahasa C seharusnya memiliki sebuah fungsi. Fungsi dasar ini disebut dengan fungsi utama (fungsi main) dan memiliki kerangka program sebagai berikut :

Jika kita memiliki beberapa fungsi yang lain maka fungsi utama inilah yang memiliki kedudukan paling tinggi dibandingkan fungsi-fungsi yang lain sehingga setiap kali program dijalankan akan selalu dimulai dengan memanggil fungsi utama terlebih dahulu.fungsi-fungsi yang lain dapat dipanggil setelah fungsi utama dijalankan melalui pernyataan-pernyataan yang berada didalam fungsi utama.

Contoh :

20

21

KEGIATAN BELAJAR 3

TOOL PENDUKUNG

Lembar informasi
Bab ini akan membahas tentang tool_tool yang diperlukan /digunakan dalam proses merancang sistem mikrokontroler,khususnya yang berupa software yaitu software kompiler dan software downloader/programer. Sebenarnya penggunaan software kompiler dan downloader ini terdapat banyak macam dan variasinya sehingga tidak mutlak harus sama dengan yang ada dalam modul ini,namun untuk memudahkan anda dalam belajar dan memahami pembahasan-

pembahasan dalam buku ini maka penulis mnyarankan agar anda menggunakan tool yang sama seperti yang penulis gunakan.

3.1 Code Vision AVR Code V ision A V R m erupakan salah satu software kom piler yang khusus digunaan untuk m ikrokontroler keluarga A V R. Salah satu kelebihan dari software Code V ision AVR adalah tersedianya fasilitas untuk

m endownload program ke m ikrokontroler yang telah terintegrasi sehingga dengan dem ikian Code V ision A V R software kom piler juga ini selain dapat berfungsi sebagai sebagai software

dapat

berfungsi

program er/downloader. Adapun menu-menu dalam Code Vision AVR adalah sebagai berikut:

3.11 Menu File

Gambar 3.1 Menu File

22

a. N ew , untuk m emulai program baru b. O pen, untuk m engambil atau membuka program c. S ave, untuk m enyimpan file/program d. S ave as, untuk menyim pan file/program e. S ave all, untuk menyimpan seluruh file/program yang berada dalam project sekaligus f. C lose, untuk m enutup program

g. C lose P roject, untuk m enutup prject beserta seluruh file-filre program di dalam nya h. C onvert to library, m engkonversi file program (*.c) m enjadi sebuah file pustaka/library (*.lib) i. j. P rint, untuk m encetak program P age S etup, untuk m engatur settinga halam an dan printer

k. E xit, untuk keluar dari Code V ision A V R

3.2 Menu Edit

Gambar 3.2 Menu Edit

1. U ndo, untuk m em batalkan pengeditan terakhir 2. R edo, untuk kembali ke pengeditan terakhir yang telah di undo 3. C ut, untuk m emotong bagian tertentu dari program

23

4. C opy , untuk m enduplikasi bagian program 5. P aste, m enam pilkan file yang telah di copy 6. D elete, untuk m enghapus bagian tertentu dari program 7. S e le c t A ll , d ig u na ka n u n tu k m e m ilih s e m ua te ks 8. P rin t S e le c t io n , d ig u na k a n u ntu k m e n g a tu r prin t e r 9. In d e n t B l o c k , d ig u na ka n u ntu k m e m b ua t s a tu b lo k te ks g e s er ke ka n a n (m a s u k ke d a la m ) 10. U n in d e n t B lo c k , d ig u na k a n u n tu k m e m b u a t s a tu b lo k te ks g e s e r ke k iri 11. F in d , F in d N e x t d a n F in d In F ile s , m e ru p a ka n fa silitas u ntu k m e n ca ri k a ta a tau f ile 12. R e p la c e , d ig u na ka n u ntu k m e n u ka r s e b ua h ka ta d e n g a n ka ta la in

3.3 Menu Project

Gambar 3.3 Menu Project

1. C heck S yntax, digunakan untuk m elakukan pengecekan ada tidaknya kesalahan program 2. C om pile, digunaan untuk m engkom pile program. Proses kom pile ini hanya m enghasilkan file asem bler saja (*.asm ) 3. M ake, digunakan untuk m engkom pile sekaligus m enghasilkan kode m esin program . Proses m ake ini m enghasilkan beberapa file antara lain file *.asm , *.list, *.obj, *.hex, *.rom dan *.eep. 4. S top C om pilation, digunakan untuk m enghentikan proses kom pile 5. N otes, digunakan untuk m em berikan catatan pada project 6. C onfigures, digunakan untuk m engatur project Files, untuk m enam bahkan file-file program ke dalam project atau m enghapus file-file program dari project

24

C C om pile r, digunakan untuk m engatur kom piler 7. C ode dan G eneration, fitur yang digunakan untuk m enentukan spesifikasi

dim iliki

oleh m ikrokontroler

8. M essages, digunakan untuk m engatur tam pil tidaknya beberapa pesan peringatan 9. G lobally #define , digunakan untuk m endeklarasikan pengenal global 10. P aths, digunakan untuk m enentukan direktori-direktori file program (*.c), file header (*.h) dan file pustaka (*.lib) yang dibutukan dalam project 11. A fter M ake , digunakan untuk m engatur proses yang akan dilakukan setelah m ake

3.4 Menu Tools

Gambar 3.4 Menu Tools

1. C ode W izard A V R , digunakan untuk m em bangkitkan kode program secara otom atis 2. D ebbu ge r , digunakan untuk pengecekan listing program dalam assem bler. Program ini hanya bisa dijalankan m endefinisikan terlebih dahulu program jika kita sudah

debbuger

beserta letak

direktorinya m elalui m enu setting

debbuger

3. C hip P rogram er, digunakan untuk m endownload program yang telah dikom pile ke dalam m ikrokontroler dengan m enggunakan

hardware tertentu yang telah didefinisikan oleh Cde V ision A V R 4. Term inal, digunakan untuk m em buka term inal kom unikasi serial USART

5. C onfigure,
program

digunakan aplikasi lain

untuk

m enam bahkan m enu tools.

atau

m enghapus Anda

kedalam

Contoh

25

m enam bahkan m enu notpad dengan cara : tools configure add [direktori notpad]

3.5 Menu Setting

Gambar 3.5 Menu Setting

1. G eneral, digunakan untuk pengaturan secara um um. M elalui m enu ini Anda dapat m em ilih tam pil atau tidaknya toolbar, navigator, pesan dan inform asi 2. E ditor, digunakan untuk pengaturan editor program . K ita dapat m enentukan warna-warna text yang berbeda untuk m em bantu

m em perm udah dalam m engecek kesalahan penulisan program 3. A sse m ble r, digunakan untuk m enentukan apakah file *.asm atau *.lst yang akan terbuka secara otomatis pada saat terjadi error pada saat kompile 4. D ebbu ger, untuk m engecek kesalahan-kesalahan program dalam assem bler dengan m enggunakan software kom piler lain seperti

m isalnya A V RStudio 5. P rogram m er, digunakan untuk m enentukan jenis hardware

yang digunakan apabila proses download program ke m ikrokontroler dilakukan oleh C V A V R 6. Term inal, digunakan untuk m engstur m ode form at data term inal kom unikasi serail UART pada C V A V R antara lain port yang

digunakan, lebar data, bit stop, paritas dan lain-lain.

26

3.6 Codevision AVR Chip Programer Salah satu kelebihan dari codevision AVR adalah tersedianya fasilitas untuk mendownload program ke mikrokontroler yang telah terintegrasi sehingga dengan demikian codevision AVR ini selain dapat berfungsi sebagai software kompiler juga dapat berfungsi sebagai software programer / downloader. Jadi kita dapat melakukan proses download program yang telah di kompile dengan menggunakan software code vision AVR juga.

Gambar 3.6 rangkaian kompatibel STK200

Agar fasilitas CodeVision AVR chip programer dengan menggunakan modul hardware seperti gambar 4.6 diatas dapat berkerja maka pada setting programernya harus dipilih modul STK200. caranya adalah setting |programer kemudian pilih AVR chip programer type : kanda system STK200+/300.

Gambar 3.7 programer setting

27

KEGIATAN BELAJAR 4

KONVERSI BILANGAN

Lembar informasi Dalam kehidupan sehari-hari kita telah terbiasa menggunakan sistem bilangan desimal,suatu bilangan berbasis 10 (terdiri dari 10 simbol),yaitu 0,1,2,3,4........9. akan tetapi dalam suatu aplikasi tidak selamanya kita menggunakan sistem desimal ini. Jadi kita dituntut untuk mengerti jenis bilangan yang lain.seperti biner,heksa, dan oktal. Ada baiknya anda mempelajari 3 jenis bilangan, yaitu desimal, biner dan heksa. Bilangan oktal mungkin tidak perlu kita pelajari dahulu karena bilangan ini jarang sekali digunakan dalam pemrograman ini.

4.1 Bentuk bilangan


Sebelum kita mengkonversi suatu bilangan. Kita harus mengenal terlebih dahulu masing-masing bilangan : Bilangan desimal Bilangan ini terdiri dari 10 bentuk, yaitu 0,1,2,3,4,5,6,7,8,9. Bilangan Biner Bilangan ini terdiri dari 2 bentuk, yaitu 0 dan 1 saja. Bilangan heksa Bilangan ini terdiri dari 16 bentuk, yaitu 0,1,2,3,4,5,6,7,8,9,A,B, C,D,E,F.

Sistem Desimal Dan Biner


Dalam sistem bilangan desimal, nilai yang terdapat pada kolom ketiga pada Tabel 1, yaitu A, disebut satuan, kolom kedua yaitu B disebut puluhan, C disebut ratusan, dan seterusnya. Kolom A, B, C menunjukkan kenaikan pada eksponen dengan basis 10 yaitu 100 = 1, 101 = 10, 102 = 100. Dengan cara yang sama, setiap kolom pada sistem bilangan biner, yaitu sistem bilangan dengan basis, menunjukkan eksponen dengan basis 2, yaitu 20 = 1, 21 = 2, 22 = 4, dan seterusnya.

28

Tabel 4.1. Nilai Bilangan Desimal dan Biner Kolom desimal C 102 = 100 (ratusan) B 101 = 10 (puluhan) A 100 = 1 (satuan) C 22 = 4 (empatan) Kolom biner B 21 = 2 (duaan) A 20 = 1 (satuan)

Setiap digit biner disebut bit; bit paling kanan disebut least significant bit (LSB), dan bit paling kiri disebut most significant bit (MSB).

Untuk membedakan bilangan pada sistem yang berbeda digunakan subskrip. Sebagai contoh 910 menyatakan bilangan sembilan pada sistem bilangan desimal, dan 011012 menunjukkan bilangan biner 01101. Subskrip tersebut sering diabaikan jika sistem bilangan yang dipakai sudah jelas. Tabel 4.2 . Contoh Pengubahan Bilangan Biner menjadi Desimal

Biner 1110 1011 11001 10111 110010

32 1

16 1 1 1

Kolom biner 8 4 1 1 1 0 1 0 0 1 0 0

Desimal 2 1 1 0 1 1 1 0 1 1 1 0 8 + 4 + 2 = 14 8 + 2 + 1 = 11 16 + 8 + 1 = 25 16 + 4 + 2 + 1 = 23 32 + 16 + 2 = 50

Konversi Desimal ke Biner Cara untuk mengubah bilangan desimal ke biner adalah dengan pembagian. Bilangan desimal yang akan diubah secara berturut-turut dibagi 2, dengan memperhatikan sisa pembagiannya. Sisa pembagian akan bernilai 0 atau 1, yang akan membentuk bilangan biner dengan sisa yang terakhir menunjukkan MSBnya. Sebagai contoh, untuk mengubah 5210 menjadi bilangan biner, diperlukan langkah-langkah berikut : 52/2 = 26 sisa 0, LSB 26/2 = 13 sisa 0 13/2 = 6/2 3/2 = = = 6 sisa 1 3 sisa 0 1 sisa 1 0 sisa 1, MSB

29

Sehingga bilangan desimal 5210 akan diubah menjadi bilangan biner 110100. Cara di atas juga bisa digunakan untuk mengubah sistem bilangan yang lain, yaitu oktal atau heksadesimal.

4.3 Bilangan Hexsadesimal


Bilangan heksadesimal, sering disingkat dengan hex, adalah bilangan dengan basis 1610, dan mempunyai 16 simbol yang berbeda, yaitu 0 sampai dengan 15. Bilangan yang lebih besar dari 1510 memerlukan lebih dari satu digit hex. Kolom heksadesimal menunjukkan eksponen dengan basis 16, yaitu 160 = 1, 161 = 16, 162 = 256, dan seterusnya. Sebagai contoh : 152B16 = (1 x 163) + (5 x 162) + (2 x 161) + (11 x 160) = 1 x 4096 + 5 x 256 + 2 x 16 + 11 x 1 = 4096 + 1280 + 32 + 11 = 541910 Sebaliknya, untuk mengubah bilangan desimal menjadi bilangan heksadesimal, dapat dilakukan dengan cara membagi bilangan desimal tersebut dengan 16. Sebagai contoh, untuk mengubah bilangan 340810 menjadi bilangan

heksadesimal, dilakukan dengan langkah-langkah sebagai berikut : 3409/16 = 213, sisa 110 = 116, LSB 213/16 = 13/16 = 13, sisa 510 = 516 0, sisa 1310 = D16, MSB

Sehingga, 340910 = D5116. Bilangan Hexsadesimal dan Biner Setiap digit pada bilangan heksadesimal dapat disajikan dengan empat buah bit. Untuk mengubah bilangan heksadesimal menjadi bilangan biner, setiap digit dari bilangan heksadesimal diubah secara terpisah ke dalam empat bit bilangan biner. Sebagai contoh, 2A5C16 dapat diubah ke bilangan biner sebagai berikut. 216 = 0010, MSB A16 = 1010 516 = 0101 C16 = 1100, LSB

30

Sehingga, bilangan heksadesimal 2A5C akan diubah menjaid bilngan biner 0010 1010 0101 1100. Sebaliknya, bilangan biner dapat diubah menjadi bilangan heksadesimal dengan cara mengelompokkan setiap empat digit dari bilangan biner tersebut dimulai dari sigit paling kanan. Sebagai contoh, 01001111010111002 dapat dikelompokkan menjadi 0100 1111 0101 1110. Sehingga: 01002 = 416, MSB 11112 = F16 01012 = 516 11102 = E16, LSB Dengan demikian, bilangan 01001111010111002 = 4F5E16.

Bilangan Biner Pecahan


Dalam sistem bilangan desimal, bilangan pecahan disajikan dengan menggunakan titik desimal. Digit-digit yang berada di sebelah kiri titik desimal mempunyai nilai eksponen yang semakin besar, dan digit-digit yang berada di sebelah kanan titik desimal mempunyai nilai eksponen yang semakin kecil. Sehingga 0.110 0.2 = 10-1 = 1/10 = 1/100 = 2 x 10-1, dan seterusnya. 0.1010 = 10-2= 2 x 0.1

Cara yang sama juga bisa digunakan untuk menyajikan bilangan biner pecahan. Sehingga, 0.12 = 2-1
-2-

= , dan = 2 =

0.012 = 2 Sebagai contoh, 0.1112

= + + 1/8 = 0.5 + 0.25 + 0.125 = 0.87510

101.1012 = 4 + 0 + 1+ + 0 + 1/8 = 5 + 0.625 = 5.62510 Pengubahan bilangan pecahan dari desimal ke biner dapat dilakukan dengan cara mengalihkan bagian pecahan dari bilangan desimal tersebut dengan 2,

31

bagian bulat dari hasil perkalian merupakan pecahan dalam bit biner. Proses perkalian diteruskan pada sisa sebelumnya sampai hasil perkalian sama dengan 1 atau sampai ketelitian yang diinginkan. Bit biner pertama yang diperoleh merupakan MSB dari bilangan biner pecahan. Sebagai contoh, untuk mengubah 0.62510 menjadi bilangan biner dapat dilaksanakan dengan 0.625 x 2 0.25 x 2 0.5 x 2 Sehingga, 0.62510 = 0.1012 = 1.25, bagian bulat = 1 (MSB), sisa = 0.25 = 0.5, = 1.0, bagian bulat = 0, sisa = 0.5 bagian bulat = 1 (LSB), tanpa sisa

32

KEGIATAN BELAJAR 5 PROJEK PERTAMA

Lembar informasi Pembahasan pada bab ini bertujuan untuk memberikan gambaran tentang bagaimana proses mendownload dengan menggunakan mikrokontroler ATmega 8535 mulai dari menuliskan program aplikasi ,proses mendownload program aplikasi hingga sampai mengamati hasilnya.

5.1 Dasar Input Dan Output Perintah dasar OUTPUT PORTX=data; Yaitu untuk mengirim data secara byte ke portX (X= A,B,C,D).perintah ini sama dengan out dalam bahasa assembly ATmega 8535. INPUT data_in=PINX; yaitu mengambil data Byte dari PINX(X= A,B,C,D).yang kemudian disimpan ke variabel data_in. Perintah ini sama dengan in dalam bahasa assembly ATmega 8535. Sebelum memulai program dasar I/O dengan bahasa C perlu diketahui bahwa mikrokontroller ATmega 8535 perlu disetting DDR dan PORT agar bisa digunakan sebagai mana mestinya.

DDR bit = 1 PORT bit = 1 PORT bit = 0 Output ; High Output ; low

DDR = 0 Input ; R pull-up Input ; Floating

Tabel 5.1 setting DDR dan PORT

Port I/O untuk output hanya memberikan arus sebesar 20mA. Jadi jika diperlukan untuk menggerakan piranti yang lebih besar (konsumsi arus/tegangan) harus ditambahkan rangkaian driver untuk piranti tersebut. Untuk lebih

jelasnya.langsung saja kita coba input dan output.

33

OUTPUT
Misalkan rangkaian LED kita hubungkan ke PORTB (rangkaian input nanti dulu, OK) Buatlah program dengan langkah seperti pada gambar dibawah ini dengan menggunakan Code Vision AVR.

Gambar 5.1 setting chip dan clock


Pilih ATmega 8535 untuk chipnya dan setting cloknya 11.059200 (sesuai dengan X-tall yang digunakan)

Gambar 5.2 PORTB sebagai output

34

Untuk bagian PORT, pilih PORT B. 1. 2. 3. 4. Port B disetting sebagai output dan value low (lihat gambar) Klik File>Generate,Save and Exit Ikuti petunjuk penyimpanan file. Bila perlu ganti folder penyimpanannya. Simpan dengan nama output1.c, output1.prj dan output1.cwp. Selanjutnya akan tampak gambar seperti berikut :

Gambar 5.3 file hasil code wizard project.

Coba perhatikan baris berikut :

......... Setting I/O untuk PORT B adalah sebagai output dengan kondisi low.

35

PROSES MENDOWNLOAD Untuk proses mendownload bisa langsung kita lakukan dengan memilih menu project make atau dengan mengklik icon namun sebelum itu kita harus configure

menyettingnya terlebih dahulu dengan memilih menu project aftermake kemudian klik program the chip Maka akan muncul tampilan seperti berikut: OK.

Gambar 5.4 proses mendownload

INPUT OUTPUT Saat mempelajari input sudah seharusnya dilanjutkan dengan output sehingga bisa langsung mengetahui hasilnya. Hubungkan rangkaian output ke PORTB dan rangkaian input ke PORTA. Kembali kita buat proyek baru. Setting chip dan clock kemudian setting PORT seperti gambar dibawah ini :

PORTA

PORTB

Gambar 5.5 setting port untuk PORTB Output dan PORTA input

36

Generate,Save and Exit. Simpan dengan nama file project_pertama. Buat deklarasi variabel data dibagian berikut ini:

............ { ..........
Tambahkan interuksi sehingga nampak seperti berikut :

............

Kompilasi,download dan perhatikan hasilnya (sambil tekan tombol).

Contoh program menggunakan LED : Setting PORTB sebagai output simpan dengan nama proyek_led.c, proyek_led.prj proyek_led.cwp. Tambahkan kode program sehingga listingnya seperti berikut : LED 1 (Megontrol nyala led dengan bilangan heksa) ............

Kompilasi,download dan perhatikan hasilnya, apakah LED kelap-kelip...? LED 2 (Mengontrol nyala LED dengan bilangan Biner)

37

Kompilasi,download dan perhatikan hasilnya, apakah LED bergeser ke kanan.?

LED 4 (Mengontrol nyala LED dengan operator BITWISE)

Kompilasi,download dan perhatikan hasilnya, apakah LED bergeser ke kanan.?

38

Sekarang coba gunakan logika anda untuk mengatur nyala LED.......serukan..!! 5.2 KONTROL I/O per bit. Perintah input dan output pada AT mega 8535 juga bisa dilakukan per bit dengan cara : Output PORTX.bitn=data; Yaitu untuk mengirim data bit (0 atau 1) ke portX (X=A,B,C,D) Bit ke n. Perintah ini setara dengan sbi dalam bahasa assembly. Contoh .......... ......... Artinya adalah bit 3 PORTB diberi nilai 1.

Input
data_in=PINX.bitn; Yaitu mengambil data bit dari PINX(X=A,B,C,D) bit ke n yang kemudian disimpan ke variable data_in. Perintah ini setara dengan cbi dalam bahasa assembly. Contoh ............ ............ Artinya adalah ATmega 8535 mengambil data bit ke 3. Nilai dari perintah ini hanya 0 atau 1.

Contoh program LED menggunakan tombol : Tambahkan kode program sehingga listingnya seperti berikut : I/O LED 1 (Mengatur nyala led per bit) Setting PORTB sebagai output dan PORTA sebagai input. ...........

39

Kompilasi,download dan perhatikan hasilnya, apakah LED 1,2 dan 3 berubah.?

5.3 Tunda Tunda atau delay akan sering kita gunakan. contoh saat memutar motor stepper,pemberian bit ke motor stepper harus di tunda karena bila tidak diberi waktu tunda maka motor tidak akan dapat berputar. Ada dua cara memberikan penundaan, yaitu tunda yang kita buat sendiri dan penundaan yang disediakan oleh code vision AVR. namun untuk memudahkan dalam pembelajaran hanya pustaka tunda yang dipelajari dalam modul ini.

Membuat tunda dengan pustaka tunda Untuk membuat tunda sangat mudah, Ok, sekarang buat fungsi tunda berikut ini : Pertama, buat proyek baru lagi. Set PORTB sebagai output kemudian simpan dengan nama delay.c, delay.prj, delay.cwp. Tambahkan pustaka tunda dibagian header:

.................. Tambahkan interuksi berikut :

{ ..........

Bagaimana blink-blink kan....................!!

40

Instruksi-Instruksi Dipustaka delay. Instruksi tunda bisa dijelaskan sebagai berikut : (unsigned int n) menghasilkan tundaan selama n mikrodetik, n harus merupakan suatu konstanta. (unsigned int n) menghasilkan tundaan selama milidetik. Fungsi ini secara otomatis akan mereset kondisi timer wachdog setiap 1 mili second dengan membangkitkan instruksi wdr. Catatan penting : Ada dua instruksi tambahan yang harus disertakan pada saat memanggil fungsi tunda, yaitu :

Instruksi pertama berfungsi untuk menonaktifkan semua interupsi dan interuksi kedua untuk mengaktifkan semua interupsi. Jika hal ini tidak dilakukan maka penundaan akan menjadi lebih lama dari yang diharapkan.

5.4 Penampilan LCD LCD adalah suatu display dari bahan cairan kristal yang pengoprasiannya menggunakan dot matriks.LCD banyak digunakan sebagai display dari alat-alat elektronika seperti kalkulator,multitester digital,jam digital dan sebagainya.

Gambar 5.6 LCD 2x16 karakter Dengan menggunakan codewizard AVR kita dapat dengan mudah

mendefinisikan port yang terhubung dengan LCD, langkah-langkahnya yaitu: Buka program codevision AVR melalui menu Star|All Program || Codevision || Code Vision Avr C Compiler atau melalui deskop klik lambang Codevision. Kemudian pillih File |New |pilih File Type project.

41

Kemudian muncul tampilan konfirmasi, dan menanyakan apakah akan menggunakan codewizard, pilih Yes.

Untuk setting IC(Chip yang digunakan) pilih Chip, isi informasi sebagai berikut :

Gambar 5.7 a setting chip ATmega 8535 clock 11.059200 Gambar 5.7 b setting PORTC sebagai output LCD Jika sudah menkonfigurasi project,pilih File | Generate Save and Exit, sehingga akan tampil source code dalam bahasa C. setelah itu, kita tinggal menambahkan instruksi-instruksi tambahan kedalam program yang sudah ada. Perhatikan blok-blok program berikut :

Blok ini harus disertakan (jika dengan cara generate fileakan otomatis dibuatkan).arti dari blok diatas adalah setting LCD di PORTC kemudian akan me_link ke pustaka lcd.h yang didalamnya terdapat instruksi-instruksi untuk akses LCD secara langsung. .

42

Menggunakan PORTC(0x15) untuk LCD (lihat tentang register I/O di datasheet ATmega 8535). Untuk inisialisasi cukup dengan instruksi berikut:

Contoh program LCD : Tambahkan kode program sehingga listingnya seperti berikut :

Kemudian kompilasi, download dan perhatikan hasilnya. Coba dengan string dan posisi baris yang berbeda.

5.5 Aplikasi Antar Muka Dengan Push Button Push button atau tombol tekan adalah penghubung antara pemakai dengan alat pengendali yang dibuat.tombol tekan yang dipakai mempunyai 8 buah tombol yang masing masing dihubungkan dengan port A, tombol-tombol ini dipakai untuk menjalankan berbagai fungsi pengendalian seperti misalnya untuk on/of dan pilihan menu. Push botton to LED

43

Pertama-tama kita akan membuat interfacing keypad ke mikro kontroler dimana hasil penekanan tombol dikeluarkan ke LED (modul dasar I/O).modul LED dihubungkan ke PORTB. Setelah itu buat proyek baru. Jangan lupa setting chip dan clock dan kemudian setting PORT seperti gambar berikut :

Gambar 5.8 A untuk setting push botton di PORTA Gambar 5.8 B untuk setting LED di PORTB Kemudian File | Generate Save and Exit, simpan dengan nama file push_botton.c, push_botton.prj, push_botton.cwp. Kita akan membuat proyek push botton to led dengan perintah :

jika push botton 1 ditekan maka LED brucak-brinong. jika push botton 2 ditekan maka LED plip-plop. jika push botton 4 ditekan maka LED blink-blink. jika push botton 7 ditekan maka LED 2blink.

Tambahkan intruksi sehingga menjadi seperti listing berikut : ............

44

Kompilasi,download dan perhatikan hasilnya, tekan tombol 1,2,4 dan 7......? Bagaimana tambah serukan.!!

5.6 ADC ( Analog To Digital Converter )


Penggunaan ADC sangat banyak,terutama dalam bidang pengukuran. Banyak keluaran sensor yang masih berupa analog yang harus dikonversi kedigital agar dapat diolah ke mikrokontroler.

Fitur dari ADC ATmega 8535 adalah sebagai berikut :

Resolusi 10 Bit, Waktu konversi 65-260 us, 8 ch input, 0-Vcc input ADC, 3 mode pemilihan tegangan referensi.

Untuk mempelajari ADC pada ATmega 8535, kita cukup membuat rangkaian sederhana dari potensio meter.

45

Gambar 5.9 rangkaian pembagi tegangan pada potensio meter.

Dengan rangkaian pembagi tegangan kita dapat memberi tegangan yang bervariasi ke ADC. Vout = R2 R1+R2 Dari gambar rangkaian diatas, keluarannya dihubungkan ke input ADC, yaitu misal ke PORTA.0 (ADC ch.0). untuk melihat hasil ADC, kita dapat memasang rangkaian LED atau LCD, dalam contoh ini langsung kita tampilkan pada LCD. DASAR ADC Register-register yang kita bahas diatas dalam pengelementsialnya akan diset pada saat kita membuat proyek baru dengan wizard code vision. Untuk lebih jelasnya, perhatikan contoh berikut ini. Buat proyek baru. Jangan lupa setting chip dan clock.setelah itu setting bagian ADC seperti gambar berikut ini : x Vcc

46

Gambar 5.10 setting ADC pada codewizard,PORTA output,PORTC LCD

Hubungkan rangkaian pembagi tegangan kesalah satu pin pada PORTA, yang untuk contoh ini dihubungkan ke PINA.0 untuk setting LCD, samakan dengan keypad, yaitu LCD ke PORTC. Generate file, save and exit. Simpan dengan nama file adc.c,adc.prj,adc.cwp. Tambahkan interuksi sehingga menjadi listing program berikut ini :

47

..

Kompilasi download dan perhatikan hasilnya dengan memutar potensiometer.

Perhatikan bagian program berikut ini :

48

Blok-blok diatas adalah inisialisasi dan prosedur baca ADC yang dibentuk oleh codevision. Untuk membaca ADC channel yang lain cukup dengan mengubah instruksi menjadi seperti berikut : data_adc=read_adc(3) ; //membaca ADC dichanel 3

Interupsi adalah suatu kondisi dimana mikrokontroler akan berhenti sementara dari program utama untuk melayani interuksi-intruksi pada interupsi kemudian kembali mengerjakan instruksi program utama setelah instruksi-instruksi pada interupsi selesai dikerjakan. Terdapat 21 interupsi pada ATmega 8535 (lihat data sheet).

Atmega 8535 menyediakan 3 interupsi eksternal, yaitu INT0,INT1 dan INT2. interupsi eksternal bias dilakukan dengan memberikan logika 0 atau perubahan logika (rising edge dan falling edge) pada pin interupsi yang bersangkutan.

Tabel 5.2 hubungan PIN interrupt Jenis interup INT0 INT1 INT2 PIN PORTD.2 PORTD.3 PORTB.2

Kontrol LED dengan interupsi Sebelum mencoba membuat program untuk melayani interupsi,siapkan dulu rangkaian berikut (bisa anda gunakan rangkaian dasar input dengan beberapa modipikasi) :

Gambar 5.11 rangkaian push button untuk pemberian interupsi

49

Pada rangkaian diatas,logika yang kita dapat adalah jika tombol ditekan maka keluaran akan menjadi sisi negative (falling edge) yang selanjutnya menjadi low. Misal program yang kita inginkan adalah sebagai berkut :

Saat program dijalakan maka led akan menyala sehingga berjalan dan kemudian saat terjadi interupsi maka led akan berkedip 10 kali.setelah interuksi pada interupsi selesai dijalankan maka program akan kembali mengerjakan program utama ,yaitu led berjalan. Siapkan proyek baru jangan lupa setting chip dan clock dan kemudian setting PORTB sebagai output dan PORTD untuk tombol interrupt. Hubungkan rangkaian pada gambar ke PORTD.2, yaitu INT.0 :

Gambar 5.12 interup pada codewizard Generate save and exit. Simpan dengan nama file int_1.c, int_1.prj, int_1.cwp, Sesuaikan listing program seperti berikut

50

Kompilasi,download dan perhatikan hasilnya dengan menekan tombolnya bagaimana berubahkan..?

5.8 EEPROM EEPROM (electrically erasable programmable read only memory) adalah memori yang masih dapat menyimpan data walaupun catu daya dimatikan.operasi baca/tulis data ke EEPROM dapat dilakukan saat program berjalan. Untuk mengakses EEPROM dilakukan dengan cara menentukan EEPROM addres register, EEPROM data register , dan EEPROM control register. Akses baca/tulis EEPROM.

51

EEPROM addres register-EEARL dan EEARL

EEPROM data register-EEDR

EEPROM control register-EEDR

Gambar 5.13 EEPROM addres Register

Untuk menulis ke EEPROM tentu saja kita harus menyeting register yang bersangkutan, yaitu register EECR (baca data sheet ATmega 8535) namun demikian sekali lagi, dengan code vision AVR kita bisa langsung mengakss EEPROM dengan mudah. Buat proyek baru berikut ini : Setting chip dan clock ATmega 8535 ,11059200 Generate file,save and exit.simpan dengan nama file eeprom.c, eeprom.prj, eeeprom.cwp. Gunakan LCD di PORTC untuk melihat hasil penulisan dan pembacaan EEPROM. Tambahkan kode program sehingga listingnya seperti berikut :

52

Kompilasi download dan perhatikan LCD. Sesaat setelah dikompilasi bagian bawah LCD menunjukan angka 0. hal ini menunjukan EEPROM (alfa) masih belum terisi nilainya. eeprom int alfa; //pemesanan tempat untuk variabel alfa Kemudian alfa diisi nilai 55h,ditampilkan ditengah bawah LCD. alfa=0x55;//menulis ke variable alfa di EEPROM Bagian kanan bawah LCD menampilkan hasil pembacaan EEPROM yang disimpan divariabel i. Matikan catu daya / direst kemudian nyalakan kembali tampilan LCD. Tampak dikiri bawah LCD sudah menunjukan angka 55h, yaitu hasil penulisan yang dilakukan oleh program saat berjalan.

53

5.9 TIMER DAN COUNTER


Sebelum menggunakan timer/counter. Harap diperhatikan konfigurasi bit ATmega 8535. kesalahan konfigurasi dapat menyebabkan timer atau counter tidak berjalan sebagaimana mestinya.

Timer/counter ATmega 8535 ada 3, yaitu : Timer counter 0 Timer counter 1 Timer counter 2

Setting register tidak kita lakukan saat penulisan program.kita dapat langsung menyesetnya saat melakukannya dengan wizard new project. Jadi untuk register-register yang berkenaan dengan timer/counter tidak kita bahas.agar lebih jelas tentang register pada timer/counter,anda dapat melihat data sheet ATmega 8535. Timer/counter 0 Timer/counter 0 adalah 8 bit timer/counter dengan fitur sebagai berikut : a. 8 bit Timer/Counter 1 kanal. b. Auto reload, yaitu timer akan dinolkan saat match compare. c. Dapat menghasilkan pulsa PWM dengan glich free d. Frequence generator. e. Prescaler 10 bit untuk timer f. Membangkitkan interupsi saat timer overflow dan atau match compare.

Timer/counter 1 Timer/counter 1 adalah 16 bit timer/counter dengan fitur sebagai berikut : a. 16 bit Timer atau counter b. Memiliki 2 compare unit c. Memiliki 2 register pembanding d. Memiliki 1 input capture unit e. Auto reload,timer akan dinolkan saat match compare

54

f.

Dapat menghasilkan pulsa PWM dengan glich free dan periode yang bisa dirubah-ubah

g. Frequence generator h. Memiliki 4 buah sumber interupsi, yaitu TOV1,OCF1A,OCF1B dan ICF1.

Timer/counter 2 Timer/counter 0 adalah 8 bit timer/counter dengan fitur sebagai berikut : 8 bit Timer/Counter 1 kanal. Auto reload, yaitu timer akan dinolkan saat match compare. Dapat menghasilkan pulsa PWM dengan glich free Frequence generator. Prescaler 10 bit untuk timer Membangkitkan interupsi saat timer overflow dan atau match compare.

Cara menggunakan ketiga timer diatas adalah dengan menyetting register dari masing-masing timer/counter yang bersangkutan.namun karena kita

menggunakan codevisian AVR. Setting timer atau counter dilakukan saat pembuatan proyek baru dimulai.

TIMER Berikut ini adalah contoh penggunaan timer. Gunakan kembali rangkaian LED untuk mempermudah pemahaman akan timer.disini kita akan membuat LED blink dengan pewaktuan menggunakan timer.Gunakan kembali rangkaian I/O led dan hubungkan ke PORTB Selanjutnya kita buat proyek baru dengan setting mikro sebagai berikut : Setting clock pada 11.059200,chip ATmega 8535 dan PORTB sebagai output :

55

Gambar 5.13 setting timer pada codewizard Generate file,save and exit.simpan dengan nama file timer.c, timer.prj, timer.cwp. Kemudia tambahkan listing program seperti berikut ini:

Kompilasi,download dan perhatikan LEDnya.

Perhatikan blok interupsi timer 1 overflow :

56

Kita hanya memanfaatkan interupsi timer 1 overflow. Program ini akan menambahkan nilai TCNT timer 1 yang semula kita set dengan nilai D5D0H sehingga mencapai FFFFh kemudian overflow dan menghasilkan interupsi. Pada saat interupsi dijalankan maka nilai TCNT diset kembali menjadi D5DOh. Diblok interupsi ini juga terlihat kondisi dari PORTB, yaitu jika sebelumnya PORTB berlogika 0 maka PORTB akan diset ke logika 1. begitu juga sebaliknya atau dengan kata lain PORTB dalam kondisi toogle. Ubah interuksi berikut : .

Kompilasi,download dan perhatikan LEDnya.bagaimana hasilnya ? COUNTER Untuk memahami

counter,

gunakan

kembali

rangkaian

pada

gambar

5.11..hubungkan rangkaian pada gambar ke PORTB0 ,yaitu sebagai input pulsa T0. hubungkan kembali rangkaian LED ke PORTB. kemudian kita buat proyek baru dengan setting mikro sebagai berikut : Setting clock pada 11.059200 dan chip ATmega 8535

Gambar 5.13 setting TIMER 0 dan PORTB sebagai I/O Generate file,save and exit.simpan dengan nama file counter.c, counter.prj, counter.cwp.

57

Tambahkan interuksi hingga menjadi listing berikut : .

.. Blok interupsi

tomer

akan

dilaksanakan

apabila

nilai

TCNT

melimpah.penambahan/counter naik nilai TCNT dilakukan dengan menberikan trigger/pemicu falling edge ke kaki T0 (PORTB 0). saat nilai TCNT melimpah, nilai TCNT melimpah,nilai TCNT akan diset kembali menjadi FAh, dan kemudian jika PINC sebelumnya berlogika 0 maka PORTC akan diberi logika 1 (LED nyala dan LED
4-7 0-3

padam.ingat active high dan active low). Demikian juga saat

PINC sebelumnya berlogika 1 maka akan diset ke logika 0. Kompilasi,download dan perhatikan nyala LEDnya dengan menekan pushbutton. Berapa kali penekanan agar LED bergantian atau padam ? ya 6 kali, karena counter naik dari Fah hingga FFh kemudian melimpah dan di-set kembali menjadi FAh. Kadang jika terdapat keybouncing pada saklar yang kita gunakan penekanan saklar tidak 6 kali.

5.10 PWM (pulse witdh modulation)


Pulse width modulation menggunakan gelombang kotak dengan duty circle tertentu menghasilkan berbagai nilai rata-rata dari suatu bentuk gelombang. Jika kita menganggap bentuk gelombang kotak f(t) dengan nilai batas bawah ymin,batas atas ymax dan duty circle D,seperti dapat dilihat pada gambar dibawah ini.

TIME Gambar 5.14 gelombang kotak yang memiliki y max,ymin dan D

58

Nilai rata-rata dari bentuk gelombang diatas adalah :

Jika f(t) adalah gelombang kotak, maka nilai ymax adalah dari 0 < t < D.T dan nilai ymin dari D.T < t < T.dari pernyataan diatas didapat :

Persamaan diatas dapat disederhankan dalam berbagai kasus dimana ymin=0 sehingga kita mendapatkan bentuk persamaan akhir y= D. ymax dari persamaan ini jelas bahwa nilai rata-rata dari sinyal (y) secara langsung bergantung pada duty circle D.

Hubungan antara duty circle dengan nilai rata-rata tegangan Duty circle menyatakan presentase keadaan logika high (pulse) dalam satu periode sinyal.satu siklus diawali oleh transisi low to high dari sinyal dan berakhir pada transisi berikutnya. Selama satu siklus, jika waktu sinyal pada keadaan high sama dengan low maka dikatakan sinyal mempunyai dutycircle 50%.

59

Gambar 5.15 duty circle VS Register OCR pada past PWM

Semakin besar nilai data pada register OCR ,maka semakin tinggi juga nilai ratarata tegangan DC, contoh semakin besar dutycircle semakin terang nyala LED. Contoh program pengaturan tegangan LED menggunakan PWM : PORTB sebagai output,PORTA sebagai input,gunakan Timer 0 sebagai pembangkit pulsa PWM.

Gambar 5.16 Lengkapi listing program sehingga seperti berikut :

60

Kompilasi,download dan perhatikan LEDnya.

61

5.11 Komunikasi serial USART Transmisi data seri dibedakan menjadi 2 macam, yaitu komunikasi data seri sinkron dan komunikasi data assinkron, perbedaan ini tergantung pada clock pendukung data.dalam komunikasi data seri sinkron,clock untuk shift register ikut dikirimkan bersama dengan data seri.sebaliknya dalam komunikasi data seri assinkron, clock pendukung data register tidak ikut dikirim, rangkaian penerima data harus dilengkapi dengan rangkaian yang mampu membangkitkan clock yang diperlukan.bagian yang terpenting dari komunikasi seri asinkron adalah upaya agar penerima data bisa membangkitkan clock yang bisa dipakai untuk mendorong shift register penerima. Untuk keperluan tersebut terlebih dahulu ditentukan bahwa saat tidak ada pengiriman data, keadaan saluran adalah 1 saat akan mulai mengirim data 1 byte sluran dibuat menjadi 0 dulu selama 1 periode clock pendorong ,dalam 8 periode clock berikutnya dikirim data bit 0,bit 1 dan seterusnya sampai bit 8, dan pada periode clock yang ke 10 saluran dikembalikan menjadi 1.dengan demikian data 8 bit yang dikirim diawali dengan bit star yang bernilai 0 dan diakhiri dengan bit stop yang bernilai 1 seperti terlihat pada gambar. kemasan data ini dimaksudkan agar rangkaian penerima bisa membangkitkan clock yang frequensinya sama dengan clock pengirim fasanya disinkronkan pada awal penerimaan data 1 byte. dan

Gambar 5.17 kemasan data seri assinkron

Pada computer, biasanya terdapat sebuah port untuk komunikasi serial.bebarapa contoh penerapan komunikasi serial ialah mouse,scanner dan system akuisisi data yang terhubung ke port serial COM1/COM2. bagian yang terpenting dari komunikasi serial adalah konektor DB9 dan RS232. DB9 adalah konektor yang digunakan untuk menghubungkan hadware dengan computer.

62

Kegunaan RS232 adalah sebagai driver, yang akan mengkonversi tegangan dari hardware agar sesuai tegangan dengan computer sehingga data dapat dibaca.

RS 232 o o logic high (1) 15V s/d -3V logic low (0)--+3V s/d +15V

TTL o o logic high (1) +2 s/d +5V logic low (0) 0V s/d +0.8V

Rangkaian interface menerjemahkan level tegangan RS232 ke level tegangan TTL dan sebaliknya.rangkaian interface tersebut menggunakan IC MAX 232

Gambar 5.19 rangkaian IC max 232

Untuk menghubungkan antara 2 PC,atau antara rangkaian mikrokontroler dengan PC biasanya digunakan format null mode, dimana pin TXD dihubungkan dengan pinRXD pasangan,PIN sinyal ground (5) dihubungkan dengan sinyal ground dipasangan. Fungsi pin-pin DB9

Pins 1

Common Name CD

Decription

Signal direction on DCE

Received line signal detector

63

2 3 4 5 6 7 8 9

RXD TXD DTR GND DSR RTS CTS

Received data Transmitted data Data terminal ready Signal ground Data set ready Request to send Clear to send Ring indicator

out In In out In out out

USART (universal synchronous asynchronous receiver/transmitter) USART ATmega memiliki beberapa keuntungan dibandingkan system

UART,yaitu : a. operasi full duplex(mempunyai register receive dan transmit yang terpisah) b. mengandung komunikasi multiprosesor c. mode kecepatan transmisi berorde mbps

inisialisasi USART reister yang perlu ditentukan nilainya,yaitu :

1. UBRR (USART baund rate register) UBRR merupakan register 16 bit, yang berfungsi untuk menentukan

kecepatan transmisi data yang akan digunakan. UBRR dibagi menjadi dua bagian yaitu UBRRH dan UBBRL.UBRR [11..0] merupakan NIT penyimpan konstanta kecepatan komunikasi serial.UBRRH menyimpan 4 bit tertinggi, dan UBRRL menyimpan 8 bit sisanya.data yang dimasukan ke UBRRH dan UBRRL dihitung menggunakan rumus pada table dibawah ini :

64

Table rumus perhitngan UBRR Mode Operasi Rumus Nilai UBRR fosc 16x Baud rate fosc 8x Baud rate UBRR= fosc 2x Baud rate -1 -1 -1

asinkron mode kecepatan normal UBRR= (U2X=0) asinkron mode kecepatan ganda UBRR= (U2X=1) sinkron

Catatan : U2X adalah bit pada register UCSRA, yang berfungsi untuk mengandakan transfer rate menjadi dua kalinya. Hanya belaku untuk mode asinkron,untuk mode sinkron bit ini diset 0.

UCSRA (USART control and status register A )

UCSRA

UCSRB (USART control and status register B )

Penjelasa bit penyusun register UCSRB : a. RXCIE : bit pengatur aktivasi interupsi penerimaan data serial b. TXCIE : bit pengatur aktivasi interupsi pengiriman data serial c. UDRIE : bit pengaur aktivasi interupsi, yang berhubungan dengan kondisi udre dan UCSRA. d. RXEN : bit pengatur aktivasi penerima data serial ATmega 8535 e. TXEN : bit pengatur aktivasi pengirim data serial ATmega 8535 f. UCSZ2 : bersama-sama dengan bit UCSZ1 DAN UCSZ0 diregister

65

g. UCSZ0 menentukan ukuran karakter serial yang dikirimkan Penentuan ukuran karakter UCSZ[20] 000 001 010 011 100-110 111 Ukuran karakter bit 5 6 7 8 Tidak dipergunakan 9

UCSRC (USART control and status register C ) UCSRC merupakan register 8 bit yang digunakan untuk mengatur mode dan kecepatan komunikasi serial yang dilakukan.komposisinya seperti gambar dibawah ini.

a. URSEL b. UMSEL

: Merupakan bit pemilih akses antara UCSRC DAN UBBR : merupakan bit pemilih mode komunikasi serial antara sinkron dan asinkron.

c. c. UPM [1..0] : merupakan bit pengatur paritas d. d. USBS : merupakan bit pemilih ukuran bit stop

e. UCSZ1 dan UCSZ0 : merupakan bit pengatur jumlah karakter serial f. f. UCPOL : merupakan bit pengatur hubungan antara perubahan sinkronisasi. Hanya data keluaran dan data masukan serial dengan clock

berlaku untuk mode sinkron,untuk mode asinkron bit ini diset 0.

66

KIRIM DAN TERIMA DATA SERIAL Untuk memahami cara pengiriman dan terima data secara serial maka buatlah proyek baru. Jangan lupa setting chip dan clock dan kemudian setting port sebagai berikut : Contoh : Setting chip ATmega 8535,clock 11.059200 kemudian ikuti langkah berikut ini :

Gambar 5.20 PORTA sebagai input dan PORTC sebagai output

Gambar 5.20 PORTC sebagai LCD dan tampilan USART

67

Lengkapi listing program sehingga seperti berikut.

68

Kemudian pilih menu setting | teminal sehingga muncul tampilan seperti berikut :

Gambar 5.20 tampilan terminal setting Kemudian pilih icon kemudian ketik sesuatu sesuka anda.

Bagaimana hasilnya apakah anda dapat mengetik di lcd? Tambahkan listing program berikut ini :

kemudian tekan tombol 1 atau 2 pada keyboard, lihat apakan lednya berkedip-kedip?

Program diatas bisa anda kembangkan lebih lanjut misalnya untuk mengontrol actuator melalui keyboard pada computer maupun aplikasi lainnya. Bagaimana serukan praktek mikronya..?

69

DAFTAR PUSTAKA

Wardhana lingga, belajar sendiri mikrokontroler AVR seri ATMega 8535 simulasi,hardware,dan aplikasi,penerbit andi, yogyakarta,2006. Heryanto ary,adi wisnu,Ir, pemrograman bahasa C untuk mikrokontroler ATmega 8535,penerbit andi,yogyakarta,2008. Andrianto heri,pemrograman AVR ATmega 16 menggunakan bahasa C codevision AVR ,informatika,bandung,2008. Bejo agus,Rahasia kemudahan bahasa C dalam mikrokontroler ATmega 8535.graha ilmu,yogyakarta,2007. Joni I made,raharjo budi ,informatika,bandung,2006. ,pemrograman C dan implementasinya

70