Vous êtes sur la page 1sur 19

Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra

Hal. 1
Modul-1: ATMega16 DAN BASCOM AVR
1.1. Apakah Mikrokontroler itu?
Jika kita bicara tentang Mikrokontroler, maka tidak terlepas dari pengertian atau definisi tentang
Komputer itu sendiri, mengapa? Ada kesamaan-kesamaan antara Mikrokontroler dengan Komputer
(atau Mikrokomputer), antara lain:
Sama-sama memiliki unit pengolah pusat atau yang lebih dikenal dengan CPU (Central
Processing Unit);
CPU tersebut sama-sama menjalankan program dari suatu lokasi atau tempat, biasanya dari
ROM (Read Only Memory)
1
atauRAM (Random Access Memory)
2
;
Sama-sama memiliki RAM yang digunakan untuk menyimpan data-data sementara atau
yang lebih dikenal dengan variabel-variabel;
Sama-sama memiliki beberapa luaran dan masukan (I/O) yang digunakan untuk melakukan
komunikasi timbal-balik dengan dunia luar, melalui sensor (masukan) dan aktuator (luaran),
perhatikan bagan yang ditunjukkan pada Gambar 1.1.
Gambar 1.1. Bagan masukan, pemrosesan hingga luaran
Lantas apa yang membedakan antara Mikrokontroler dengan Komputer atau Mikrokomputer?
Begitu mungkin pertanyaan yang ada di benak kita, saat kita membaca beberapa daftar kesamaan
yang sudah saya tuliskan tersebut. Sama sekali berbeda, itu jawaban yang saya berikan kepada Anda:
Mikrokontroler adalah versi mini dan untuk aplikasi khusus dari Mikrokomputer atau Komputer!
Berikut saya berikan kembali daftar kesamaan yang pernah kemukakan sebelumnya dengan
menekankan pada perbedaan antara Mikrokontroler dan Mikrokomputer:
CPU pada sebuah Komputer berada eksternal dalam suatu sistem, sampai saat ini kecepatan
operasionalnya sudah mencapai lebih dari 2,5 GHz, sedangkan CPU pada Mikrokontroler
berada didalam (internal) sebuah chip, kecepatan kerja atau operasionalnya masih cukup
rendah, dalam orde MHz (misalnya, 24 MHz, 40 MHz dan lain sebagainya). Kecepatan yang
relatif rendah ini sudah mencukupi untuk aplikasi-aplikasi berbasis mikrokontroler.
Jika CPU pada mikrokomputer menjalankan program dalamROM atau yang lebih dikenal
dengan BIOS(Basic I/O System) pada saat awal dihidupkan, kemudian mengambil atau
1
Memori yang hanya bisa dibaca saja.
2
Memori yang bisa dibaca juga bisa ditulisi.
Masukan-
masukan
sensor cahaya
sensor suhu
sensor
tekanan, dll
Pemroses
uC AT89
uC AVR
uC PIC16F, dll
Luaran-luaran
aktuator -
motor
relay
speaker, dll
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 2
menjalankan program yang tersimpan dalam hard disk. Sedangkan mikrokontroler sejak
awal menjalankan program yang tersimpan dalamROM internal-nya (bisa berupa Mask
ROM atauFlash PEROM atauFlash ROM). Sifat memori program dalam mikrokontroler ini
non-volatile, artinya tetap akan tersimpan walaupun tidak diberi catu daya.
RAM pada mikrokomputer bisa mencapai ukuran sekian GByte dan bisa di-upgrade ke
ukuran yang lebih besar dan berlokasi di luar CPU-nya, sedangkan RAM pada mikrokontroler
ada di dalamchip dan kapasitasnya rendah, misalnya 128 byte, 256 byte dan seterusnya dan
ukuran yang relatif kecil inipun dirasa cukup untuk aplikasi-aplikasi mikrokontroler.
Luaran dan masukan (I/O) pada mikrokomputer jauh lebih kompleks dibandingkan dengan
mikrokontroler, yang jauh lebih sederhana, selain itu, pada mikrokontroler akses keluaran
dan masukan bisa per bit.
Jika diamati lebih lanjut, bisa dikatakan bahwa Mikrokomputer atau Komputer merupakan
komputer serbaguna atau general purpose computer, bisa dimanfaatkan untuk berbagai
macam aplikasi (atau perangkat lunak). Sedangkan mikrokontroler adalah special purpose
computer atau komputer untuk tujuan khusus, hanya satu macam aplikasi saja.
Perhatikan Gambar 1.2, agar Anda mendapatkan gambaran tentang mikrokontroler lebih jelas.
Gambar 1.2. Diagram Blok mikrokontroler (yang) disederhanakan
ALU, Instruction Decoder, Accumulator danControl Logic, sebagaimana ditunjukkan pada Gambar
1.2, merupakan Otak-nya mikrokontroler yang bersangkutan. Jantungnya berasal dari detak OSC
(lihat pada Gambar 1.2 sebelah kiri atas). Sedangkan di sekeliling Otak terdapat berbagai macam
periferal seperti SFR (Special Function Register) yang bertugas menyimpan data-data sementara
selama proses berlangsung). Instruction Decoder bertugas menerjemahkan setiap instruksi yang ada
di dalam Program Memory (hasil dari pemrograman yang kita buat sebelumnya). Hasil
penerjemahan tersebut merupakan suatu operasi yang harus dikerjakan olehALU (Arithmetic Logic
Unit), mungkin dengan bantuan memori sementara Accumulator yang kemudian menghasilkan
sinyal-sinyal kontrol ke seluruh periferal yang terkait melalui Control Logic.
Memori RAM atauRAM Memory bisa digunakan sebagai tempat penyimpan sementara, sedangkan
SFR (Special Function Register) sebagian ada yang langsung berhubungan dengan I/O dari
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 3
mikrokontroler yang bersangkutan dan sebagian lain berhubungan dengan berbagai macam
operasional mikrokontroler.
ADC atau Analog to Digital Converter (tidak setiap mikrokontroler memiliki ADC internal),
digunakan untuk mengubah data-data analog menjadi digital untuk diolah atau diproses lebih lanjut.
Timer atauCounter digunakan sebagai pewaktu atau pencacah, sebagai pewaktu fungsinya seperti
sebuah jam digital dan bisa diatur cara kerjanya. Sedangkan pencacah lebih digunakan sebagai
penghitung atau pencacah event atau bisa juga digunakan untuk menghitung berapa jumlah pulsa
dalam satu detik dan lain sebagainya. Biasanya sebuah mikrokontroler bisa memiliki lebihd dari 1
timer.
EEPROM (sama seperti RAM hanya saja tetap akan menyimpan data walaupun tidak mendapatkan
sumber listrik/daya) dan port-port I/O untuk masukan/luaran, untuk melakukan komunikasi dengan
periferal eksternal mikrokontroler seperti sensor dan aktuator.
Beberapa catatan mikrokontroler lainnya adalah:
Tertanam (atau embedded) dalam beberapa piranti (umumnya merupakan produk
konsumen) atau yang dikenal dengan istilahembedded system atauembedded controller;
Terdedikasi untuk satu macam aplikasi saja (lihat contoh-contoh yang akan saya terangkan
pada bagian lain dari buku ini);
Hanya membutuhkan daya yang (cukup) rendah (low power) sekitar 50 mWatt (Anda
bandingkan dengan komputer yang bisa mencapai 50 Watt lebih);
Memiliki beberapa keluaran maupun masukan yang terdedikasi, untuk tujuan atau fungsi-
fungsi khusus;
Kecil dan relatif lebih murah (seri AT89 di pasaran serendah-rendahnya bisa mencapai Rp.
15.000,00, mikrokontroler AVR di pasaran saat ini juga relatif murah sedangkan Basic Stamp
bisa mencapai Rp. 500.000,00);
Seringkali tahan-banting, terutama untuk aplikasi-aplikasi yang berhubungan dengan mesin
atau otomotif atau militer.
Mikrokontroler yang beredar saat ini dibedakan menjadi dua macam, berdasarkan
arsitekturnya:
o Tipe CISC atau Complex Instruction Set Computing yang lebih kaya instruksi tetapi
fasilitas internal secukupnya saja (seri AT89 memiliki 255 instruksi);
o Tipe RISC atau Reduced Instruction Set Computing yang justru lebih kaya fasilitas
internalnya tetapi jumlah instruksi secukupnya (seri PIC16F hanya ada sekitar 30-an
instruksi).
1.2. Pengetahuan Dasar Mikrokontroler AVR
1.2.1. Pendahuluan
Keluarga Mikrokontroler AVR merupakan mikrokontroler dengan arsitektur modern (emang selama
ini ada yang kuno kali??). Perhatikan Gambar 1.3, Atmel membuat 5 (lima) macam atau jenis
mikrokontroler AVR, yaitu:
TinyAVR (tidak ada kaitannya ama mbak Tini yang jualan gudeg)
Mikrokontroler (mungil, hanya 8 sampai 32 pin) serbaguna dengan Memori Flash untuk
menyimpan program hingga 16K Bytes, dilengkapi SRAM dan EEPROM 512 Bytes.
MegaAVR (nah yang ini sudah mulai banyak yang nulis bukunya)
Mikrokontroler dengan unjuk-kerja tinggi, dilengkapi Pengali Perangkat keras (Hardware
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 4
Multiplier), mampu menyimpan program hingga 256 KBytes, dilengkapi EEPROM 4K Bytes
dan SRAM 8K Bytes.
AVR XMEGA
Mikrokontroler AVR 8/16-bit XMEGA memiliki periferal baru dan canggih dengan unjuk-
kerja, sistemEvent dan DMA yang ditingkatkan, serta merupakan pengembangan keluarga
AVR untuk pasar low power danhigh performance (daya rendah dan unjuk-kerja tinggi).
AVR32 UC3
Unjuk-kerja tinggi, mikrokontroler flash AVR32 32-bit daya rendah. Memiliki flash hingga 512
KByte dan SRAM 128 KByte.
AVR32 AP7
Unjuk-kerja tinggi, prosesor aplikasi AVR32 32-bit daya rendah, memiliki SRAM hingga 32
KByte.
Gambar 1.3. Mikrokontroler Atmel: Sukses melalui inovasi
Cuman yang populer di Indonesia adalahtinyAVR danmegaAVR, itupun masih kalah populer dengan
keluarga AT89 yang belakangan juga sudah mulai banyak yang beralih ke AVR.
Perbedaan jenis-jenis tersebut terletak dari fasilitas, atau lebih dikenal dengan fitur-fiturnya. Jenis
TinyAVR merupakan mikrokontroler dengan jumlah pin yang terbatas (sedikit maksudnya) dan
sekaligus fitur-fiturnya juga terbatas dibandingkan yang megaAVR. Semua mikrokontroler AVR
memiliki set instruksi (assembly) dan organisasi memori yang sama, dengan demikian berpindah-
pindah (walaupun tidak disarankan) antar mikrokontroler AVR gak masalah dan mudah!
Beberapa mikrokontroler AVR memiliki SRAM, EEPROM, antarmuka SRAM eksternal, ADC, pengali
perangkat keras, UART, USART dan lain sebagainya. Bayangkan saja Anda punya TinyAVR dan
MegaAVR, kemudian telanjangi (maksudnya copotin) semua periferal-nya, nah Anda akan memiliki
AVR Core yang sama! Kayak membuang semua isi hamburger, maka Anda akan mendapatkan
rotinya doang yang sama
1.2.2. Memilih AVR yang benar
Moralnya tidak peduli tinyAVR, megaAVR, XMEGA AVR (AVR32 pengecualian karena masuk ke
mikrokontroler 32-bit) semuanya memiliki unjuk-kerja yang sama saja, tetapi dengan kompleksitas
atau fasilitas yang berbeda-beda, ibaratnya begini: banyak fasilitas dan fitur =megaAVR, fitur atau
fasilitas terbatas =TinyAVR. Gitu aja kok repot
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 5
Untuk lebih jelasnya perhatikan keterangan singkat yang saya berikan berikut ini, berdasar informasi
resmi dari Atmel (http://www.atmel.com) dan maaf masih dalam bahasa Inggris (supaya
kelihatannya aura kecanggihannya, he he he...).
tinyAVR
o Optimized for simple applications requiring a small microcontroller.
o Great performance for cost effective devices.
o Fully featured with 10-bit ADCs and high speed PWMs onboard.
o Self-Programming Flash memory for maximum flexibility.
o debugWIRE On-Chip Debug and In-System Programming.
megaAVR
o Self-Programming Flash memory with boot block.
o High accuracy 10-bit A/D converters with up to x200 analog gain stage.
o USART, SPI and TWI(1) compliant serial interfaces.
o IEEE 1149.1 compliant JTAG interface on megaAVRs with 44 pins or more.
o On-Chip Debug through JTAG or debugWIRE interface.
AVR XMEGA
o picoPower technology for ultra low power consumption
o True 1.6 volt operation and CPU speed up to 32 MHz.
o Event System and DMA Controller.
o High speed, high resolution 12-bit ADC and DAC.
o Crypto engine, Timers/Counters and fast communication interfaces.
o Accurate and flexible Clock System with dynamic clock switching.
AVR32 UC3
o High CPU performance.
o Low power consumption.
o High data throughput.
o Low system cost.
o High reliability.
o Easy to use.
AVR32 AP7
o High CPU perfromance.
o Low power consumption.
o SIMD / DSP instructions.
o Instruction & data caches.
o Memory management unit.
o Built for embedded Linux
1.3. Ada Apa dengan Mikrokontroler AVR ATMega16?
O tidak apa-apa! Dalam buku saya ini memang sengaja menggunakan mikrokontroler AVR
ATMega16 (kompatibel dengan ATMega16 dan ATMega8535) karena fitur-fitur yang dibutuhkan.
Tentu saja Anda bisa menggunakan tipe AVR lainnya, apakah yang 40 pin atau yang kurang dari itu,
bisa ATMega88, ATMega16, ATMega128, ATMega8535, ATMega168, dan lain sebagainya.
1.4. Ringkasan Fitur-fitur Mikrokontroler AVR ATMega16
Berikut ini saya ringkaskan berbagai macam fitur-fitur untuk Mikrokontroler AVR ATMega16 atau
Atmega16L (Mikrokontroler AVR 8-bit dengan Flash ISP 16kByte) langsung dari datasheet-nya, maaf
juga masih sebagian besar dalam Bahasa Inggris
3
...
3
Jika Anda bingung dengan istilah-istilah pada fitur-fitur ini silahkan merujuk ke datasheet aslinya, sehingga
fokus pada buku ini tidak melulu pada datasheet...
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 6
High-performance, Low-power AVR8-bit Microcontroller
Advanced RISC Architecture
o 131 Powerful Instructions Most Single-clock Cycle Execution
o 32 x 8 General Purpose Working Registers
o Fully Static Operation
o Up to 16 MIPS Throughput at 16 MHz
o On-chip 2-cycle Multiplier
Nonvolatile Program and Data Memories
o 16K Bytes of In-System Self-Programmable Flash
Endurance: 10,000 Write/Erase Cycles
o Optional Boot Code Section with Independent Lock Bits
In-System Programming by On-chip Boot Program
True Read-While-Write Operation
o 512 Bytes EEPROM
Endurance: 100,000 Write/Erase Cycles
o 1K Byte Internal SRAM
o Programming Lock for Software Security
JTAG (IEEE std. 1149.1 Compliant) Interface
o Boundary-scan Capabilities According to the JTAG Standard
o Extensive On-chip Debug Support
o Programming of Flash, EEPROM, Fuses, and Lock Bits through the JTAG Interface
Peripheral Features
o Two 8-bit Timer/Counters with Separate Prescalers and Compare Modes
o One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture
Mode
o Real Time Counter with Separate Oscillator
o Four PWM Channels
o 8-channel, 10-bit ADC
8 Single-ended Channels
7 Differential Channels in TQFP Package Only
2 Differential Channels with Programmable Gain at 1x, 10x, or 200x
o Byte-oriented Two-wire Serial Interface
o Programmable Serial USART
o Master/Slave SPI Serial Interface
o Programmable Watchdog Timer with Separate On-chip Oscillator
o On-chip Analog Comparator
Special Microcontroller Features
o Power-on Reset and Programmable Brown-out Detection
o Internal Calibrated RC Oscillator
o External and Internal Interrupt Sources
o Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down, Standbyand
Extended Standby
I/O and Packages
o 32 Programmable I/O Lines
o 40-pin PDIP, 44-lead TQFP, and 44-pad MLF
Operating Voltages
o 2.7 - 5.5V for ATmega16L
o 4.5 - 5.5V for ATmega16
Speed Grades
o 0 - 8 MHz for ATmega16L
o 0 - 16 MHz for ATmega16
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 7
Power Consumption @ 1 MHz, 3V, and 25C for ATmega16L
Active: 1.1 mA
Idle Mode: 0.35 mA
Power-down Mode: <1 A
1.5. Diagram Pin dan Diagram Blok Mikrokontroler AVR ATMega16
Pada Gambar 1.4 dan 0.5 ditunjukkan diagram pin, masing-masing, untuk Mikrokontroler AVR
ATMega16 tipe PDIP dan TQFP/MLF atau dikenal sebagai SMD.
Gambar 1.4. Diagram Pin Mikrokontroler AVR ATMega16 tipe PDIP
Gambar 1.5. Diagram Pin Mikrokontroler AVR ATMega16 tipe SMD
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 8
Pada Gambar 1.6 ditunjukkan diagram blok untuk Mikrokontroler AVR ATMega16, perhatikan begitu
banyaknya fitur-fitur dalam diagram blok tersebut, sebagaimana juga sudah saya kutipkan pada
bagian sebelumnya.
Gambar 1.6. Diagram blok Mikrokontroler AVR ATMega16
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 9
1.6. Penjelasan Singkat Pin-pin pada Mikrokontroler AVR ATMega16
Berikut saya jelaskan secara singkat fungsi dari masing-masing PIN pada Mikrokontroler AVR
ATMega16.
Vcc Masukan tegangan catu daya
GND Ground, emang apalagi kalau bukan ground...
PortA (PA7..PA0) Port A berfungsi sebagai masukan analog ke ADC internal pada
mikrokontroler ATMega16, selain itu juga berfungsi sebagai port I/O
dwi-arah 8-bit, jika ADC-nya tidak digunakan. Masing-masing pin
menyediakan resistor pull-up internal
4
yang bisa diaktifkan untuk
masing-masing bit.
PortB(PB7..PB0) Port B berfungsi sebagai sebagai port I/O dwi-arah 8-bit.Masing-masing
pin menyediakan resistor pull-up internal yang bisa diaktifkan untuk
masing-masing bit.
Port B juga memiliki berbagai macam fungsi alternatif, sebagaimana
ditunjukkan pada Tabel 1.1
PortC(PC7..PC0) Port Cberfungsi sebagai sebagai port I/O dwi-arah 8-bit.Masing-masing
pin menyediakan resistor pull-up internal yang bisa diaktifkan untuk
masing-masing bit.
Port C juga digunakan sebagai antarmuka JTAG, sebagaimana
ditunjukkan pada Tabel 1.2
PortD(PD7..PD0) Port D berfungsi sebagai sebagai port I/O dwi-arah 8-bit.Masing-masing
pin menyediakan resistor pull-up internal yang bisa diaktifkan untuk
masing-masing bit.
Port D juga memiliki berbagai macam fungsi alternatif, sebagaimana
ditunjukkan pada Tabel 1.3
/RESET Masukan Reset. Level rendah pada pin ini selama lebih dari lama waktu
minimum yang ditentukan akan menyebabkan reset, walaupunclock
tidak dijalankan.
XTAL1 Masukan ke penguat osilator terbalik (inverting) dan masukan ke
rangkaianclock internal.
XTAL2 Luaran dari penguat osilator terbalik
AVCC Merupakan masukantegangancatu daya untuk Port A sebagai ADC,
biasanya dihubungkan ke Vcc, walaupun ADC-nya tidak digunakan. Jika
ADC digunakan sebaiknya dihubungkan ke Vcc melalui tapis lolos-bawah
(low-pass filter).
AREF Merupakan tegangan referensi untuk ADC
Pada Tabel 1.1, 1.2 dan 1.3 ditunjukkan masing-masing alternatif fungsi dari Port B, Port C dan Port
D. Dalam buku saya ini sengaja penjelasan dari masing-masing fungsi tersebut (kecuali antarmuka
JTAG) akan dibahas pada saat digunakan, sehingga Anda bisa memahami langsung dengan mencoba,
istilah kerennya Learning by Doing...
4
Resistor pull up internal berkaitan dengan rangkaian internal pada mikrokontroler AVR yang bersangkutan.
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 10
Tabel 1.1. Alternatif fungsi Port B
Tabel 1.2. Alternatif fungsi Port C
Tabel 1.3. Alternatif fungsi Port D
1.7. Mengawali Membuat Aplikasi berbasis Mikrokontroler AVR
Untuk menjawab pertanyaan ini, kita awali saja dengan menjelaskan perancangan aplikasi berbasis
Mikrokontroler AVR ATMega16. Lantas bagaimana atau langkah-langkah apa saja yang perlu
dilakukan, perhatikan Gambar 1.7.
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 11
Gambar 1.7. Diagram alir perancangan aplikasi berbasis mikrokontroler (apa saja)
Nach, berdasar diagram alir tersebut, semuanya berawal dari MASALAH, atau bisa juga Anda sebut
PROYEK, KASUS atau apa saja yang Anda suka selama artinya adalah sesuatu yang ingin dicari atau
dibuat solusinya. Lebih tepatnya, pada tahap awal yang perlu dilakukan adalah IDENTIFIKASI
MASALAH, persis atau detilnya bagaimana, misalnya
Bagaimana membuat aplikasi menghidupkan LED berdasar tombol yang ditekan?
Ini tentunya belum cukup, informasinya masih kurang, beberapa pertanyaan yang bisa diajukan
antara lain:
LED-nya berapa?
Tombol apa saja yang ditekan?
Bagaimana hubungan antara sebuah tombol dengan LED yang bersangkutan?
Apakah dimungkinkan menekan dua tombol atau lebih secara bersamaan?
Apakah menyala-nya LED menggunakan tundaan? Atau hanya sekedar sesuai dengan tombol
yang bersangkutan?
Dan lain sebagainya.
Hal ini sangat penting, dikarenakan dengan informasi yang detil, maka kita bisa membuat rangkaian
dan program yang benar-benar sesuai dengan apa yang diinginkan. Dan yang lebih penting lagi, jika
ini merupakan proyek atau pesanan, bisa dijadikan bahan dalam kontrak kerja atau berita acara.
Tidak peduli akan Anda selesaikan dengan mikrokontroler AVR maupun AT89 atau bahkan
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 12
mikrokontroler apapun. Hal ini juga menjadi penting untuk menentukan berapa lama pekerjaan
harus diselesaikan, bukankah dengan informasi yang lengkap akan jauh lebih mudah memperkirakan
segalanya?
Selain itu, dengan detil informasi yang diperoleh, Anda bisa menentukan mikrokontroler apa yang
akan digunakan, sesuai dengan kebutuhan. Ingatlah bahwa setiap mikrokontroler (baik keluarga AVR
maupun AT89) masing-masing bisa memiliki fasilitas yang sama dan juga bisa berbeda. Apakah
aplikasi atau solusi yang Anda tawarkan memerlukan Timer? Counter? Timer dan Counter? Sinyal
PWM? Menggunakan motor servo? Motor DC? Motor Langkah? Apakah memerlukan Watchdog?
Berapa frekuensi Clock yang dibutuhkan? Dan lain sebagainya
Biasanya, persoalan yang dihadapi adalah mencari solusi itu sendiri. Katakan saja jika persoalan
masukan/luaran sudah teridentifikasi secara 100% semuanya, langkah berikutnya adalah
MERANCANG atau MENEMUKAN SOLUSI, termasuk memilih mikrokontroler mana yang akan
digunakan. Untuk keperluan mendapatkan informasi mikrokontroler AVR secara lengkap silahkan
merujuk datasheet masing-masing. Ini adalah sumber utama yang bisa dipercaya, karena langsung
diterbitkan oleh pabrik mikrokontroler yang bersangkutan (ATMEL, http://www.atmel.com).
Setelah Anda melakukan IDENTIFIKASI MASALAH, langkah berikutnya (lihat diagram alir) adalah
MELAKUKAN PERANCANGAN atau MENEMUKAN SOLUSI (termasuk menentukan masukan dan
luaran apa saja yang terlibat dalam solusi tersebut). Langkah ini memang tidak semudah
mengatakan-nya, namun ANDA PASTI BISA, karena semakin tinggi jam terbang Anda dalam
menangani berbagai macam kasus-kasus yang melibatkan penggunaan mikrokontroler, Anda akan
semakin terampil dan jenius.
Misalnya saja, ada pertanyaan yang masuk ke saya bagaimana menampilkan hasil perhitungan atau
hasil akuisisi data di LCD, Dot Matrix atau bahkan di 87segmen? Ini semua memerlukan kreativitas
untuk mendapatkan solusinya. Saya sarankan sebaiknya Anda rajin membaca artikel-artikel saya
atau diskusi dengan saya, atau bahkan cari sendiri di internet, tanya ke yang lebih pakar, bergabung
dalam forum khusus mikrokontroler dan lain sebagainya
Termasuk dalam langkah MELAKUKAN PERANCANGAN adalah membuat DIAGRAM ALIR program
mikrokontroler Anda. Oya, dalam membuat diagram alir usahakan dibuat secara umum, artinya tidak
mewakili bahasa pemrograman apapun, termasuk assembly. Mengapa? Karena memang begitu
aturan dalam membuat diagram alir yang baik dan benar, selain itu akan memudahkan kita atau
mungkin orang lain, jika Anda berkenan, melakukan pengembangan lebih lanjut dengan bahasa yang
berbeda-beda (misalnya Basic, C dan lain sebagainya).
Langkah berikutnya adalah MEMBUAT RANGKAIAN YANG
SESUAI (RANGKAIAN BAKU/MINIMUM PLUS APLIKASINYA),
namun sebelumnya, ada baiknya Anda juga sudah menentukan
bahasa pemrograman apa yang akan digunakan, sebaiknya yang
GRATIS aja (seperti bahasa assembly atau C, dengan kompailer
yang bisa Anda unduh dari website pabrik mikrokontroler yang
bersangkutan), namun itu terserah Anda.
Setelah Anda merancang rangkaian solusinya, yang kemudian kita
sebut sebagai PROTOTIPE atau PURWARUPA, tentu langkah
selanjutnya adalah MEMBUAT PROGRAM APLIKASI yang terkait dengan solusi yang telah Anda
rancang sebelumnya, berdasarkan diagram alir yang telah Anda buat sebelumnya.
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 13
Pembuatan program aplikasi bisa Anda lakukan dengan bahasa pemrograman apapun yang Anda
inginkan, jika Anda seorang pemula, saya sarankan untuk menggunakan BASCOM 8051 atau
BASCOM AVR dari MCSELEC.COM, karena sangat mudah penggunaanya
5
.
Oya program Anda, yang menggunakan bahasa apapun yang Anda suka, harus dikompilasi
(menggunakan perangkat lunak yang sudah saya sebutkan sebelumnya) menjadi berkas BIN atau
HEX (format heksadesimal), sebagaimana prosesnya ditunjukkan pada Gambar 1.8, untuk kemudian
di-download-kan ke mikrokontroler yang bersangkutan. Sehingga mikrokontroler Anda bisa
menjalankan program Anda. Selain itu, Anda juga bisa mencoba-nya terlebih dahulu melalui
simulator mikrokontroler menggunakan perangkat lunak Proteus VSM dari LabCenter (silahkan
mengunduh demonya di http://www.labcenter.co.uk/).
Gambar 1.8. Alur pemrograman aplikasi mikrokontroler
Langkah selanjutnya tentu saja MELAKUKAN UJI-COBA DAN EVALUASI apakah rangkaian dan
program sudah berjalan dengan benar atau belum, lakukan TROUBLESHOTING jika memang masih
ada kesalahan mayor maupun minor, sehingga hasil yang diperoleh menjadi baik dan benar. Jika
perlu gunakan prinsipworst case scenario atau skenario kondisi terburuk (misalnya, bagaimana kalo
kepanasan, kebanjiran, gempa, interferensi frekuensi dan lain sebagainya), sehingga produk aplikasi
Anda bisa bertahan dalam segala macam kondisi di lapangan.
Apakah ada masalah dengan program? Cek pada program Anda. Atau ada masalah pada rangkaian?
Silahkan cek, apakah rangkaian sudah benar. Atau justru permasalahan terjadi karena Anda
memberikan solusi yang salah atau kurang tepat, silahkan cek semuanya. Sekali lagi perhatikan
diagram alir proses pada Gambar 1.7.
Ingatlah bahwa kesalahan bisa terjadi pada RANGKAIAN dan/atau PROGRAM, bahkan seringkali
kesalahan-kesalahan sepele tetapi berdampak besar pada jalannya aplikasi kita, dengan demikian
lakukan pengecekan secara menyeluruh. Saya pernah menanyakan kepada salah satu bimbingan TA
saya untuk melakukan pengecekan, Apakah PCB sudah kamu cek semua?, jawaban dia, Ooo
5
Sampai paragraf ini, apakah pertanyaan BASCOM AVR apaan tuch? sudah terjawab? Mmmm, seharusnya
sudah!
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 14
sudah pak, sudah nyambung semua.... Wah kaget saya, Lho kalo nyambung semua ya konslet
donk...! Ha ha ha..., dia juga ikut tertawa, Anda saya harapkan jangan ikut ketawa ya...
Pada bagian ini saya tidak perlu menjelaskan tentang apa dan bagaimana melakukan pemrograman
BASCOM AVR, karena langsung akan saya jelaskan melalui masing-masing modul sesuai dengan
kebutuhan. Jika Anda masih penasaran dengan konsep-konsep dasar BASCOM AVR silahkan ikut saja
penjelasan saya ini, atau bisa Anda beli buku-buku Mikrokontroler AVR yang menggunakan BASCOM
AVR seperti punya saya ini. Bingung? Ya sama...! ha ha ha...
Udah kita lanjutkan saja ke modul pertama yang berbicara tentang Konsep I/O pada Mikrokontroler
AVR dan pemrograman BASCOM AVR-nya... yuuuk...
1.8. Bahasa Pemrograman BASIC AVR (BASCOM AVR)
Sebagaimana telah saya jelaskan sebelumnya, banyak cara dalam menuliskan program ke
mikrokontroler, salah satunya bahasa BASIC. Penggunaan bahasa ini mempunyai kemudahan dalam
memprogram dan adanya fasilitas simulator pada kompailer BASCOM AVR.
1.8.1. Tipe Data
Tipe data berkaitan dengan peubah atau variabel atau konstanta yang akan menunjukkan daya
tampung/jangkauan dari variabel/konstanta tersebut. Tipe data dalam BASCOM ditunjukkan pada
Tabel 1.4.
Tabel 1.4. Tipe Data dan Ukurannya
Tipe Data Ukuran (Byte) JangkauanData
Bit 1/8 0 atau 1
Byte 1 0 s/d 255
Integer 2 -32768 s/d 3.767
Word 2 0 s/d 65535
Long 4 -2147483648 s/d 2147483647
Single 4 1,5 x 10
-45
s/d 3,4 x 10
38
Double 8 5 x 10
-324
s/d 1,7 x 10
308
String s/d 254
1.8.2. Variabel
Variabel atau peubah digunakan untuk menyimpan data sementara. Variabel diberi nama dan
dideklarasikan terlebih dahulu sebelum digunakan. Aturan pemberian nama variabel sebagai
berikut:
Harus dimulai dengan huruf (bukan angka).
Tidak ada nama variabel yang sama dalam sebuah program.
Maksimum 32 karakter
Tanpa menggunakan spasi, pemisahan bisa dilakukan dengan garis bawah.
Tidak menggunakan karakter-karakter khusus yang digunakan sebagai operator BASCOM
Variabel dapat dideklarasikan dengan beberapa cara :
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 15
1. Dengan pernyataan DIM
Deklarasi ini dibuat dengan perintahDIM (singkatan dori dimension) dengan aturan
sebagai berikut:
Dim <NamaVariabel> As <TipeData>
Contoh :
Dim angka As Integer
Dim bilangan As byte
Jika beberapa variabel dideklarasikan dalam satu baris, maka harus dipisah dengan
tanda koma.
Contoh:
Dim angka As Integer, bilangan As byte
2. Dengan pernyataan DEFINT, DEFBIT, DEFBYTE, DEFWORD
Deklarasi dengan pernyataan tersebut secara prinsip tidak berbeda dengan "DIM",
perhatikan keterangan dari masing-masing pendeklarasian tersebut:
DEFINT =untuk tipe data integer,
DEFBIT =untuk tipe data bit,
DEFBYTE =untuk tipe data byte,
DEFWORD =untuk tipe data word,
DEFLNG =untuk tipe data long,
DEFSNG =untuk tipe data singel,
DEFDBL =untuk tipe data doubel.
Cara pendeklarasianya sebagai berikut:
DEFINT/DEFBIT/DEFBYTE/DEFWORD <variabel>
Contoh :
DEFINT angka
DEFBYTE bilangan
Untuk variabel dengan tipe data yang sama dapat dideklarasikan dengan dipisah titik
koma, misal
DEFINT bil_1 ; bil 2 ; bil 3
1.8.3. Konstanta
Berbeda dengan variabel, sebuah konstanta akan bernilai tetap. Sebelum digunakan, konstanta
dideklarasikan terlebih dulu dengan cara (ada dua cara):
Dim nama_konstanta As const nilai_konstanta
Const nama_konstanta = nilai_konstanta
Contoh :
Dim pembagi as const 23
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 16
Const pembagi = 23
1.8.4. Penulisan Bilangan
Pada BASCOM-AVR, bilangan dapat ditulis dalam 3 bentuk :
1. Desimal ditulis biasa, contoh : 16
2. Biner diawali dengan &B, contoh : &B10001111
3. Heksadesimal diawali dengan &H, contoh : &H8F
1.8.5. Alias
Untuk mempermudah pemrograman, biasanya nama register dalam mikrokontroler dibuatkan nama
yang identik dengan hardware yang dibuat, contoh :
LED_1 alias PORTC.O nama lain dari PORTC.O adalah LED_1
SW_1 alias PINC.1 nama lain dari PINC.1 adalah SW_1
1.8.6. Array atau Larik
Array atau larik merupakan sekumpulan variabel dengan nama dan tipe yang sama, yang berbeda
indeks keanggotaannya.
Cara mendeklarasikan array sebagai berikut:
Dim nama array(jumlah anggota) as tipe_data
Contoh:
Dim daku(8) as byte variabel daku dengan tipe data byte
dengan 8 anggota
Untuk mengakses array dengan cara :
daku(1) = 25 anggota pertama variabel daku isinya 25
PORTC=daku(1) PORTC = nilai anggota pertama variabel daku
1.8.7. Operator
Operator digunakan dalam pengolahan data pemrograman dan biasanya membutuhkan dua variabel
atau dua parameter, sedangkan operator dituliskan di antara kedua parameter tersebut. Operator-
operator BASCOM AVR ditunjjukkan pada Tabel 1.5, Tabel 1.6 dan Tabel 1.7.
Tabel 1.5. Operator Aritmetik
Operator Keterangan Contoh
+ Operasi penjumlahan
A + B
- Operasi pengurangan
A B
* Operasi perkalian
A * B
/ Operasi pembagian
A / B
% Operasi sisa pembagian
A %B
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 17
Tabel 1.6. Operator Relasional
Operator Keterangan Contoh
= Sama dengan
A = B
<> Tidak sama dengan
A <> B
> Lebih besar dari
A > B
< Lebih kecil dari
A < B
>= Lebih besar atau sama dengan
A >= B
<= Lebih kecil atau sama dengan
A <= B
Tabel 1.7. Operator Logika
Operator Keterangan Contoh
AND Operasi AND
&B110 And &B101 = &B100
OR Operasi OR
&B11001 Or &B10111 = &B11111
NOT Operasi NOT
NOT &HFF = &HO
XOR Operasi XOR
&B1001 Xor &B0111 = &B1110
1.8.8. Operasi Bersyarat
A. IF THEN
Sebuah atau serangkaian instruksi akan dikerjakan jika memenuhi syarat-syarat atau kondisi
tertentu. Cara penulisannya sebagai berikut :
If <kondisi> Then <perintah> 1 baris perintah
If <kondisi> Then lebih dari 1 perintah
<perintah 1>
<perintah 2>
...
End If
B. IF - THEN ELSE
Versi lengkap dari sebuah atau serangkaian instruksi akan dikerjakan jika memenuhi syarat-
syarat atau kondisi tertentu, jika tidak dipenuhi maka instruksi atau serangkaian instruksi
lainnya-lah yang akan dikerjakan. Cara penulisannya sebagai berikut:
If <kondisi> Then
<perintah 1>
...
Else
<perintah 2>
...
End If
C. IF - THEN - ELSEIF
Sama seperti IF-THEN-ELSE, hanya jika kondisi tidak dipenuhi masih dilakukan pengujian
apakah suatu kondisi memenuhi syarat lainnya. Cara atau sintaks (syntax) penulisannya
sebagai berikut:
If <kondisi 1> Then
<perintah 1>
...
Elseif <kondisi 2> Then
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 18
<perintah 2>
...
End If
D. SELECT - CASE
Cocok digunakan untuk menangani pengujian kondisi yang jumlahnya cukup banyak. Cara
penulisannya :
Select case <variabel>
Case 1: <perintah 1>
Case 2: <perintah 2>
...
End Select
1.8.9. Pengulangan Operasi
A. FOR - NEXT
Perintah ini digunakan untuk melaksanakan perintah secara berulang sesuai dengan jumlah
yang ditentukan. Sintakspenulisannya :
For <var> = <nil_awal> To <nil_akhir> <step angka>
<perintah>
Next [<var>]
B. DO - LOOP
Pernyataan ini untuk melakukan perulangan terus menerus tanpa henti (pengulangan tak
berhingga) selama mikrokontroler-nya masih mendapatkan detak dan/atau catu daya. Cara
penulisannya :
Do
<pernyataan>
...
Loop
Jika pengulangan dibatasi oleh suatu kondisi maka caranya ditunjukkan berikut ini, artinya
pengulangan terus dilakukan sehingga suatu kondisi terpenuhi atau melakukan pengulangan
selama kondisinya salah:
Do
<pernyataan>
...
Loop Until <kondisi>
C. WHILE - WEND
Berbeda dengan DO-LOOP, instruksi ini digunakan untuk melakukan pengulangan selama
kondisinya benar, carapenulisannya:
While <kondisi>
<perintah>
...
Wend
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 19
1.8.10.Lompatan Proses
A. GOSUB <nama_subrutin>
Perintah ini akan melakukan lompatan sebuah subrutin, kemudian kembali lagi setelah
subrutin perintah tersebut selesai dikerjakan. Rutin yang dibuat harus diakhiri dengan
instruksi RETURN. Contoh:
Print "We will start execution here"
Gosub Routine
Print "Back from Routine"
End
Routine:
Print "This will be executed"
Return
B. GOTO <label>
Perintah ini untuk melakukan lompatan ke label kemudian melakukan serangkaian instruksi
tanpa harus kembali lagi, sehingga tidak perluRETURN. Contoh:
Dim A As Byte
Start: 'sebuah label diakhiri dengan :
A = A + 1 'naikkan variabel A
If A < 10 Then 'apakah lebih kecil 10?
Goto Start 'ya, lakukan lagi
End If 'akhir IF
Print "Ready" 'ok
C. EXIT
Untuk keluar secara langsung dari perulangan DO-LOOP, FOR-NEXT, WHILE-WEND. Cara
penulisannya sebagai berikut :
EXIT FOR (keluar dari For-Next)
EXIT DO (keluar dari Do-Loop)
EXIT WHILE (keluar dari While-Wend)
EXIT SUB (keluar dari Sub-Endsub)
EXIT FUNCTION (keluar dari suatu fungsi)
- selesai Modul 1 -

Vous aimerez peut-être aussi