You are on page 1of 9

iwan@elektro.ft.undip.ac.

id

TUTORIAL MICROCONTROLLER AVR


Part I (2006)

Iwan Setiawan,ST., MT
iwan@elektro.ft.undip.ac.id

1.1. MICROCONTROLLER VS MICROPROCESSOR


Microcontroller sebagai sebuah “one chip solution” pada dasarnya adalah rangkaian
terintregrasi (Integrated Circuit-IC) yang telah mengandung secara lengkap berbagai
komponen pembentuk sebuah komputer. Berbeda dengan penggunaan microprocessor yang
masih memerlukan komponen luar tambahan seperti RAM, ROM, Timer, dan sebagainya--
untuk sistem microcontroller, tambahan komponen diatas secara praktis hampir tidak
dibutuhkan lagi. Hal ini disebabkan semua komponen penting tersebut telah ditanam bersama
dengan sistem prosesor ke dalam IC tunggal microcontroller bersangkutan. Dengan alasan itu
sistem microcontroller dikenal juga dengan istilah populer the real Computer On a Chip-
komputer utuh dalam keping tunggal, sedangkan sistem microprocessor dikenal dengan
istilah yang lebih terbatas yaitu Computer On a Chip-komputer dalam keping tunggal.
Berdasarkan fungsinya, microcontroller secara umum digunakan untuk menjalankan program
yang bersifat permanen pada sebuah aplikasi yang spesifik (misal aplikasi yang berkaitan
dengan pengontrolan dan monitoring). Sedangkan program aplikasi yang dijalankan pada
sistem microprosesor biasanya bersifat sementara dan berorientasi pada pengolahan data.
Perbedaan fungsi kedua sistem diatas secara praktis mengakibatkan kebutuhan minimal yang
harus dipenuhi juga akan berbeda (misal ditinjau dari kecepatan detak operasi, jumlah RAM,
panjang register, dan lain sebagainya). Hampir tidak dapat disangkal, dewasa ini akan sukar
dijumpai seseorang yang masih menggunakan komputer dengan microprocessor berbasis 8
atau 16 bit (misal microprocessor 8088 dan 8086 produk perusahaan Intel). Mengapa
demikian?, salah satu alasannya— Perangkat lunak komputer yang beredar saat ini umumnya
mensyaratkan kecepatan CPU yang sangat tinggi (dalam orde Mega bahkan GigaHz) serta
memori dengan kapasitas sangat besar (dalam orde MegaByte) yang mana hal tersebut tidak
mungkin dapat dipenuhi oleh sistem microprocessor lama tersebut. Sedangkan untuk sistem
microcontroller, program yang dijalankan biasanya tidak memerlukan sumber daya sebanyak
dan sebesar itu. Untuk aplikasi kontrol sederhana dan tingkat menengah, microcontroller
yang digunakan cukup berbasis 4 sampai 8 bit. Microcontroller dengan ukuran lebih besar
(misal 16 dan 32 bit) umumnya hanya digunakan untuk aplikasi-aplikasi khusus pada bidang
pengolahan citra atau bidang kontrol yang memerlukan kepresisian tinggi.

1.2. PERKEMBANGAN MICROCONTROLLER


Pada awal perkembangannya (yaitu sekitar tahun 1970-an), sumber daya perangkat keras serta
perangkat lunak microcontroller yang beredar masih sangat terbatas. Saat itu, sistem
microcontroller hanya dapat diprogram secara khusus dengan perangkat yang dinamakan
EPROM programmer. Sedangkan perangkat lunak yang digunakan umumnya berbasis bahasa
assembler yang relatif sulit dipelajari.
Seiring dengan perkembangan teknologi solid state dan perangkat lunak komputer secara
umum, saat ini pemrograman sistem microcontroler dirasakan relatif mudah dilakukan,

1
iwan@elektro.ft.undip.ac.id

terutama dengan digunakannya metode pemrograman ISP (In system Programming). Dengan
menggunakan metode ini kita dapat memprogram sistem microcontroller sekaligus
mengujinya pada sistem minimum atau papan pengembang (development board) secara
langsung tanpa perlu lagi perangkat “pembakar“ program atau emulator secara terpisah. Selain
itu, ditinjau dari aspek perangkat lunak pemrogramannya, dewasa ini banyak alternatif bahasa
aras tinggi dari pihak ke-tiga, baik gratis maupun komersil yang dapat digunakan.
Penggunaan bahasa aras tinggi ini (seperti Pascal, C, basic dan sebagainya) selain akan
menghemat waktu pengembangan, kode program yang disusun juga akan bersifat lebih
modular dan terstruktur.
Bagi para pemula yang berminat memperdalam microcontroller baik sekedar untuk tujuan
penyaluran hobi atau kelak untuk tujuan yang lebih profesional, dewasa ini banyak
microcontroller dari berbagai vendor yang dapat dijadikan sarana untuk berlatih (misal
microcontroller PIC produk Microchip, COP-8 produk National, AT89S51/52 dan AVR
produk Atmel, HC11 produk Motorola dan lain sebagainya). Untuk memutuskan
microcontroller mana yang akan dijadikan sarana berlatih dan akan diperdalam secara serius,
ada baiknya hal-hal berikut ini dijadikan bahan pertimbangan :
- Apakah microcontroller tersebut mudah dijumpai dipasaran
- Apakah banyak dukungan pihak ketiga dalam penggunaan microcontroller tersebut,
(misalnya perusahaan-perusahaan pembuat papan pengembang, pemasok compiler
serta debbuger untuk pemrogramannya, dan sebagainya)
- Apakah banyak referensi dan contoh-contoh program untuk panduan anda berlatih
(misalnya dari sumber-sumber internet dan buku)
- Apakah banyak forum-forum diskusi (terutama di Internet) tempat anda dan
programer lain berbagi pengalaman.
Dengan berbagai macam kelebihan yang dimiliki serta hal-hal yang menjadi bahan
pertimbangan diatas, dewasa ini microcontroller AVR 8 bit produk perusahaan Atmel adalah
salah satu microcontroller yang banyak merebut minat kalangan profesional dan juga cocok
dijadikan sarana berlatih bagi para pemula. Hal ini selain karena ragam fitur yang ditawarkan,
juga disebabkan kemudahan untuk memperoleh microcontroller tersebut (berikut papan
pengembangnya) di pasaran dengan harga yang relatif murah. Selain itu berkaitan dengan
rancangan arsitekturnya, microcontroller AVR ini juga cocok diprogram dengan
menggunakan bahasa pemrograman aras tinggi (terutama bahasa C).

1.3 SEKILAS TENTANG MICROCONTROLLER KELUARGA AVR


Secara histories microcontroller 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 microcontroller seri AT89S51/52 yang masih mempertahankan
arsitektur dan set instruksi dasar microcontroller 8031 dari perusahaan INTEL.
Microcontroller AVR ini diklaim memiliki arsitektur dan set instruksi yang benar-benar baru
dan berbeda dengan arsitektur microcontroller sebelumnya yang diproduksi oleh perusahaan
tersebut. Tetapi walaupun demikian, bagi para programmer yang sebelumnya telah terbiasa
dengan microcontroller seri AT89S51/52, dan berencana untuk beralih ke microcontroller
AVR, maka secara teknis tidak akan banyak kesulitan yang berarti, hal ini dikarenakan selain

2
iwan@elektro.ft.undip.ac.id

konsep dan istilah-istilah dasarnya hampir sama, pemrograman level assembler-nya pun
relative tidak jauh berbeda.
Berdasarkan arsitekturnya, AVR merupakan microcontroller 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 microcontroller 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 microcontroller keluarga AT89S51/52.
Dengan instruksi yang sangat variatif (mirip dengan sistem CISC-Complex Instruction Set
Computer) serta jumlah register serbaguna (general Purpose Register) sebanyak 32 buah
yang semuanya terhubung secara langsung ke ALU (Arithmetic Logic Unit), kecepatan
operasi microcontroller AVR ini dapat mencapai 16 MIPS (enam belas juta instruksi per
detik) —sebuah kecepatan yang sangat tinggi untuk ukuran microcontroller 8 bit yang ada di
pasaran sampai saat ini.
Untuk memenuhi kebutuhan dan aplikasi industri yang sangat beragam, microcontroller
keluarga AVR ini muncul di pasaran dengan tiga seri utama: tinyAVR, ClasicAVR (AVR),
megaAVR. Berikut ini beberapa seri yang dapat anda jumpai di pasaran:

-ATtiny13 AT90S2313 ATmega103


-ATtiny22 AT90S2323 ATmega128
-ATtiny22L AT90S2333 ATmega16
-ATtiny2313 AT90S4414 ATmega162
-ATtiny2313V AT90S4433 ATmega168
-ATtiny26 AT90S8515 ATmega8535

Keseluruhan seri AVR ini pada dasarnya memiliki organisasi memori dan set instruksi yang
sama (sehingga dengan demikian jika kita telah mahir menggunakan salah satu seri AVR,
untuk beralih ke seri yang lain akan relative mudah). Perbedaan antara tinyAVR, AVR dan
megaAVR pada kenyataannya hanya merefleksikan tambahan-tambahan fitur yang
ditawarkannya saja (misal adanya tambahan ADC internal pada seri AVR tertentu, jumlah
Port I/O serta memori yang berbeda, dan sebagainya). Diantara ketiganya, megaAVR
umumnya memiliki fitur yang paling lengkap, disusul oleh AVR, dan terakhir tinyAVR.
Untuk memberi gambaran yang lebih jelas, tabel 1.1 berikut memperlihatkan perbedaan ketiga
seri AVR ditinjau dari jumlah memori yang dimilikinya.
Table 1.1. Perbedaan seri AVR berdasarkan jumlah memori
Microcontroller AVR Memori (byte)
Jenis Paket IC Flash EEPROM SRAM
TinyAVR 8–32 pin 1 – 2K 64 – 128 0 – 128
AVR (classic AVR) 20–44 pin 1 – 8K 128 – 512 0–1K
MegaAVR 32–64 pin 8 – 128 K 512 – 4 K 512 – 4 K
Seperti terlihat pada tabel tersebut, Semua jenis AVR ini telah dilengkapi dengan memori
flash sebagai memori program. Tergantung serinya, 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

3
iwan@elektro.ft.undip.ac.id

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

Untuk penyimpanan data, microcontroller AVR menyediakan dua jenis memori yang berbeda:
EEPROM (Electrically Erasable Programmable Read Only Memory) dan SRAM (Static
Random Access memory). EEPROM umumnya digunakan untuk menyimpan data-data
program yang bersifat permanen, sedangkan SRAM digunakan untuk menyimpan data
variabel yang dimungkinkan berubah setiap saatnya. Kapasitas simpan data kedua memori ini
bervariasi tergantung pada jenis AVR-nya (lihat tabel 1). Untuk seri AVR yang tidak memiliki
SRAM, penyimpanan data variabel dapat dilakukan pada register serbaguna yang terdapat
pada CPU microcontroller tersebut.
Selain seri-seri diatas yang sifatnya lebih umum, Perusahaan Atmel juga memproduksi
beberapa jenis microcontroller AVR untuk tujuan yang lebih khusus dan terbatas, seperti seri
AT86RF401 yang khusus digunakan untuk aplikasi wireless remote control dengan
menggunakan gelombang radio (RF), seri AT90SC yang khusus digunakan untuk peralatan
sistem-sistem keamanan kartu SIM GSM, pembayaran via internet, dan lain sebagainya.

1.4 MICROCONTROLLER AVR DAN BAHASA C


Tak dapat disangkal, dewasa ini penggunaan bahasa pemrograman aras tinggi (seperti C,
Basic, Pascal, Forth dan sebagainya) semakin populer dan banyak digunakan untuk
memprogram sistem microcontroller. Berdasarkan sifatnya yang sangat fleksibel dalam hal
keleluasaan pemrogram untuk mengakses perangkat keras, Bahasa C merupakan bahasa
pemrograman yang paling cocok dibandingkan bahasa-bahasa pemrograman aras tinggi
lainnya.
Dikembangkan pertama kali oleh Dennis Ritchie dan Ken Thomson pada tahun 1972, Bahasa
C merupakan salah satu bahasa pemrograman yang paling populer untuk pengembangan
program-program aplikasi yang berjalan pada sistem microprocessor (komputer). Karena
kepopulerannya, vendor-vendor perangkat lunak kemudian mengembangkan compiler C
sehingga menjadi beberapa varian berikut: Turbo C, Borland C, Microsoft C, Power C,
Zortech C dan lain sebagainya. Untuk menjaga portabilitas, compiler-compiler C tersebut
menerapkan ANSI C (ANSI: American National Standards Institute) sebagai standar
bakunya. Perbedaan antara compiler-compiler tersebut umumnya hanya terletak pada
pengembangan fungsi-fungsi library serta fasilitas IDE (Integrated Development
Environment)–nya saja.
Relatif dibandingkan dengan bahasa aras tinggi lain, bahasa C merupakan bahasa
pemrograman yang sangat fleksibel dan tidak terlalu terikat dengan berbagai aturan yang
sifatnya kaku. Satu-satunya hal yang membatasi penggunaan bahasa C dalam sebuah aplikasi
adalah semata-mata kemampuan imaginasi programmer-nya saja. Sebagai ilustrasi, dalam
program C kita dapat saja secara bebas menjumlahkan karakter huruf (misal ‘A’) dengan
sebuah bilangan bulat (misal ‘2’), dimana hal yang sama tidak mungkin dapat dilakukan
dengan menggunakan bahasa aras tinggi lainnya. Karena sifatnya ini, seringkali bahasa C
dikatagorikan sebagai bahasa aras menengah (mid level language).

4
iwan@elektro.ft.undip.ac.id

Dalam kaitannya dengan pemrograman microcontroller, Tak pelak lagi bahasa C saat ini
mulai menggeser penggunaan bahasa aras rendah assembler. Penggunaan bahasa C akan
sangat efisien terutama untuk program microcontroller yang berukuran relatif besar.
Dibandingkan dengan bahasa assembler, penggunaan bahasa C dalam pemrograman memiliki
beberapa kelebihan berikut: Mempercepat waktu pengembangan, bersifat modular dan
terstruktur, sedangkan kelemahannya adalah kode program hasil kompilasi akan relative lebih
besar (dan sebagai konsekuensinya hal ini terkadang akan mengurangi kecepatan eksekusi).
Khusus pada microcontroller AVR, untuk mereduksi konsekuensi negative diatas, Perusahaan
Atmel merancang sedemikian sehingga arsitektur AVR ini efisien dalam mendekode serta
mengeksekusi instruksi-instruksi yang umum dibangkitkan oleh compiler C (Dalam
kenyataannya, pengembangan arsitektur AVR ini tidak dilakukan sendiri oleh perusahaan
Atmel tetapi ada kerja sama dengan salah satu vendor pemasok compiler C untuk
microcontroller tersebut, yaitu IAR C)
Table 1.2. Beberapa Compiler C untuk microcontroller AVR
Compiler C Platform Keterangan
-DOS
IAR C Komersil
-Windows
CodeVisionAVR -Windows Komersil,
-DOS
ImageCraft’s C -Windows Komersil
-Linux
-DOS
AVR-GCC General Public Licence
-Windows
C-AVR -Windows Komersil
Small C for AVR -DOS Komersil
GNU C for AVR -Linux General Public Licence
-Linux,
LCC-AVR Free
-Windows
Dunfields AVR -Windows Komersil
Seperti halnya compiler C untuk sistem microprocessor, di pasaran ada beberapa varian
compiler C untuk memprogram sistem microcontroller AVR yang dapat dijumpai (lihat tabel
1.2).
Dengan beberapa kelebihan yang dimilikinya, saat ini CodeVisionAVR produk Perusahaan
Pavel Haiduc merupakan compiler C yang relative banyak digunakan dibandingkan compiler-
compiler C lainnya.

1.5 SEKILAS TENTANG PERANGKAT LUNAK CODEVISIONAVR


CodeVisionAVR pada dasarnya merupakan perangkat lunak pemrograman microcontroller
keluarga AVR berbasis bahasa C. Ada tiga komponen penting yang telah diintegrasikan dalam
perangkat lunak ini: Compiler C, IDE dan Program generator.
Berdasarkan spesifikasi yang dikeluarkan oleh perusahaan pengembangnya, Compiler C yang
digunakan hampir mengimplementasikan semua komponen standar yang ada pada bahasa C
standar ANSI (seperti struktur program, jenis tipe data, jenis operator, dan library fungsi
standar-berikut penamaannya). Tetapi walaupun demikian, dibandingkan bahasa C untuk
aplikasi komputer, compiler C untuk microcontroller ini memiliki sedikit perbedaan yang
disesuaikan dengan arsitektur AVR tempat program C tersebut ditanamkan (embedded).

5
iwan@elektro.ft.undip.ac.id

Khusus untuk library fungsi, disamping library standar (seperti fungsi-fungsi matematik,
manipulasi String, pengaksesan memori dan sebagainya), CodeVisionAVR juga menyediakan
fungsi-fungsi tambahan yang sangat bermanfaat dalam pemrograman antarmuka AVR dengan
perangkat luar yang umum digunakan dalam aplikasi kontrol. Beberapa fungsi library yang
penting diantaranya adalah fungsi-fungsi untuk pengaksesan LCD, komunikasi I2C, IC RTC
(Real time Clock), sensor suhu LM75, SPI (Serial Peripheral Interface) dan lain sebagainya.
Untuk memudahkan pengembangan program aplikasi, CodeVisionAVR juga dilengkapi IDE
yang sangat user friendly (lihat gambar 1.1). Selain menu-menu pilihan yang umum dijumpai
pada setiap perangkat lunak berbasis Windows, CodeVisionAVR ini telah mengintegrasikan
perangkat lunak downloader (in system programmer) yang dapat digunakan untuk
mentransfer kode mesin hasil kompilasi kedalam sistem memori microcontroller AVR yang
sedang diprogram.

Gambar 1.1. IDE perangkat lunak CodeVisionAVR


Selain itu, CodeVisionAVR juga menyediakan sebuah tool yang dinamakan dengan Code
Generator atau CodeWizardAVR (lihat gambar 1.2). Secara praktis, tool ini sangat
bermanfaat membentuk sebuah kerangka program (template), dan juga memberi kemudahan
bagi programmer dalam peng-inisialisasian register-register yang terdapat pada
microcontroller AVR yang sedang diprogram. Dinamakan Code Generator, karena perangkat
lunak CodeVision ini akan membangkitkan kode-kode program secara otomatis setelah fase
inisialisasi pada jendela CodeWizardAVR selesai dilakukan. Gambar 1.3 berikut
memperlihatkan beberapa penggal baris kode program yang dibangkitkan secara otomatis oleh
CodeWizardAVR. Secara teknis, penggunaan tool ini pada dasarnya hampir sama dengan
application wizard pada bahasa-bahasa pemrograman Visual untuk komputer (seperti Visual
C, Borland Delphi, dan sebagainya)

6
iwan@elektro.ft.undip.ac.id

Gambar 1.2. Code Generator yang dapat digunakan untuk menginisialisasi register-register pada
microcontroller AVR.
Disamping versi yang komersil, Perusahaan Pavel Haiduc juga mengeluarkan
CodeVisionAVR versi Demo yang dapat didownload dari internet secara gratis (lihat alamat
URL: http://www.hpinfotech.ro) Dalam versi ini, memori flash yang dapat diprogram dibatasi
maksimal 2K, selain itu tidak semua fungsi library yang tersedia dapat dipanggil secara bebas.

Gambar 1.3. Kode-kode program yang dibangkitkan otomatis oleh code generator

7
iwan@elektro.ft.undip.ac.id

1.6 PAKET PEMROGRAMAN MICROCONTROLLER AVR LENGKAP


Seperti halnya belajar pemrograman komputer, agar mendapatkan pemahaman yang kuat
dalam pemrograman microcontroller AVR, anda sebaiknya mencoba langsung membuat
aplikasi program pada microcontroller tersebut. Untuk tujuan latihan, perangkat lunak
CodevisionAVR versi demo pada dasarnya adalah sarana yang cocok dan telah cukup
memenuhi kebutuhan minimal anda. Gambar 1.4. berikut memperlihatkan diagram blok yang
mengilustrasikan alur pemrograman microcontroller AVR dengan CodevisionAVR yang
dapat anda lakukan :

Komputer

Perangkat lunak Papan Pengembang


CodevisionAVR (Starter KIT)

.c .asm Assembler .hex Port LPT Donggle Saluran SPI Target akhir
Editor Compiler C ISP
(avrasm32.exe) (kompatible kanda) (chip AVR)

Gambar 1.4. Alur pemrograman microcontroller AVR dengan menggunakan CodevisionAVR

Seperti terlihat pada gambar 1.4, CodevisionAVR produk Pavel Haiduc pada dasarnya telah
mengintegrasikan komponen-komponen penting dalam pemrograman microcontroller AVR:
Editor,Compiler C, assembler dan ISP (In System Programmer). Khusus dengan ISP, ada
beberapa jenis perangkat keras programmer dongle (berikut papan pengembangnya) yang
telah didukung oleh perangkat lunak CodevisionAVR ini, salah satu diantaranya adalah
Kanda System STK 200/300 produk Perusahaan Kanda yang terhubung pada saluran
antarmuka port Paralel Komputer (gambar 1.5). Jika anda berencana membuat dongle yang
kompatible dengan produk Kanda, rangkaiannya dapat dilihat pada Lampiran A (lihat situs:
http:\\www.grandtonics.com). Atau jika mau membeli sistem yang siap pakai (berupa dongle
beserta papan pengembangnya), salah satu produk dalam negeri dengan harga yang relative
murah adalah DT AVR nano/micro System (gambar 1.6) produk Innovative Electronics,
Surabaya. Alamat URL:http//www.innovative_electronic.com., Sistem ini kompatibel dengan
kanda System STK 200/300. Untuk tujuan-tujuan percobaan, produk innovative_electronic ini
sudah sangat memadai, selain mudah dihubungkan dengan modul-modul perangkat
input/output, seperti modul LCD, keypad, array LED, penggerak motor stepper, dan
sebagainya, sistem ini juga telah dilengkapi konverter TTL ke RS232 yang bermanfaat untuk
komunikasi microcontroller AVR dengan komputer.
Berkaitan dengan perangkat lunak downloader, pada dasarnya anda dapat menggunakan
perangkat lunak lain (di luar CodeVisionAVR) untuk keperluan transfer kode mesin kedalam
sistem memori microcontroller AVR. Salah satunya adalah ISP_AVR yang dibuat oleh Holger
Buss dan Ingo Busker dari Jerman. Perangkat lunak beserta rangkaian antarmukanya dapat
di-download secara gratis pada alamat URL: http://www.mikrocontroller.com.

8
iwan@elektro.ft.undip.ac.id

Gambar 1.5. Papan pengembang Kanda System STK 200/300 produk Perusahaan Kanda

Gambar 1.5. Papan pengembang DT AVR micro System compatible dengan STK 200/300

Referensi
Dari Berbagai sumber

You might also like