PERKENALAN MIKROKONTROLER
1. Apakah Yang Disebut Dengan Mikrokontroler?
Suatu
kontroler digunakan untuk mengontrol suatu proses atau aspek-aspek
dari
lingkungan. Satu contoh aplikasi dari mikrokontroler adalah untuk memonitor
rumah kita.
Ketika suhu naik kontroler membuka jendela dan sebaliknya.
Pada
masanya, kontroler dibangun dari komponen-komponen logika secara
keseluruhan,
sehingga menjadikannya besar dan berat. Setelah itu barulah
dipergunakan
mikrokprosesor sehingga keseluruhan kontroler masuk kedalam PCB
yang cukup
kecil. Hingga saat ini masih sering kita lihat kontroler yang dikendalikan
oleh
mikroprosesor biasa (Zilog Z80, Intel 8088, Motorola 6809, dsb).
Proses
pengecilan komponen terus berlangsung, semua komponen yang
diperlukan
guna membangun suatu kontroler dapat dikemas dalam satu keping. Maka
lahirlah
komputer keping tunggal (one chip microcomputer) atau disebut juga
mikrokontroler.
Mikrokontrolere adalah suatu IC dengan kepadatan yang sangat
tinggi, dimana semua bagian yang diperlukan untuk suatu kontroler sudah
dikemas
dalam satu keping, biasanya terdiri dari:
1. CPU
(Central Processing Unit)
2. RAM
(Random Access Memory)
3.
EEPROM/EPROM/PROM/ROM
4. I/O,
Serial & Parallel
5. Timer
6. Interupt
Controller
Rata-rata
mikrokontroler memiliki instruksi manipulasi bit, akses ke I/O
secara langsung dan mudah, dan proses interupt yang cepat dan efisien. Dengan
kata lain
mikrokontroler adalah " Solusi satu Chip" yang secara drastis
mengurangi
jumlah
komponen dan biaya disain (harga relatif rendah).
2. Aplikasi
Yang Dapat Dilakukan
Selain
sebagai sistem monitor rumah seperti diatas, mikrokontroler sering
dijumpai
pada peralatan rumah tangga (microwave oven, TV, stereo set dll), komputer
dan
perlengkapannya, mobil dan lain sebagainya. Pada beberapa penggunaan bisa
ditemukan
lebih dari satu prosesor didalamnya.
Mikrokontroler
biasanya digunakan untuk peralatan yang tidak terlalu
membutuhkan
kecepatan pemrosesan yang tinggi. Walaupun mungkin ada diantara
kita yang
membayangkan untuk mengontrol oven microwave dengan menggunakan
sistem
berbasis Unix, mengendalikan oven microwave dapat dengan mudah
menggunakan
mikrokontroler yang paling kecil. Dilain pihak jika kita ingin
mengendalikan
rudal guna mengejar anjing tetangga yang selalu menyalak ditengah
malam, kita
akan memerlukan prosesor dengan kecepatan yang lebih tinggi.
Sifat
spesial dari mikrokontroler adalah kecil dalam ukuran, hemat daya listrik
serta flexibilitasnya menyebabkan mikrokontroler
sangat cocok untuk dipakai sebagai
pencatat/perekam
data pada aplikasi yang tidak memerlukan kehadiran operator.
3. Jenis
Yang Dapat Dipilih
Mikrokontroler
tersedia dalam beberapa pilihan, tergantung dari keperluan dan
kemampuan
yang diinginkan. Kita dapat memilih mikrokontroler 4, 8, 16 atau 32 bit.
Disamping itu
terdapat pula mikrokontroler dengan kemampuan komunikasi serial,
penanganan
keyboard, pemroses sinyal, pemroses video dll.
4. Pasar
Bagi Mikrokontroler
WorldWide
Microcontroller Shipments (in millions of dollars)
90 91 92 93
94 95 96 97 98 99 00
4 bit 1,393
1,597 1,596 1,698 1,761 1,826 1,849 1,881 1,856 1,816 1,757
8 bit 2,077
2,615 2,862 3,703 4,689 5,634 6,553 7,529 8,423 9,219 9,715
16 bit 192
303 340 484 810 1,170 1,628 2,191 2,969 3,678 4,405
WorldWide
Microcontroller Shipments (in Millions)
90 91 92 93
94 95 96 97 98 99 00
4 bit 778
906 979 1,036 1,063 1110 1110 1096 1,064 1,025 970
8 bit 588
753 843 1,073 1,449 1,803 2,123 2,374 2,556 2,681 2,700
16 bit 22 38
45 59 106 157 227 313 419 501 585
Source: WSTS
& ICE - 1994
Jika kita
bertanya apa perlunya kita mempelajari mikrokontroler, tabel diatas akan
sedikit
banyak memberikan gambaran tentang bisnis mikrokontroler yang akan
menghasilkan
banyak tumpukan rupiah dimeja kita. Suatu survey di Amerika
menyatakan
bahwa rata-rata terdapat 35 buah mikrokontroler yang digunakan pada
satu rumah
di Amerika, dan diperkirakan akan menjadi 240 pada tahun 2000.
5.
Pertimbangan Pemilihan Mikrokontroler
Terdapat
beberapa hal yang perlu dipertimbangkan dalam menentukan jenis
mana yang
akan dipergunakan dalam disain kita yaitu seperti berikut:
v
Ketersediaan dan harga dari suatu development tools (Programmer, Emulator
dan
Simulator)
v
Ketersediaan dokumentasi (Ref. Manual, Application notes, dan buku
lainnya).
v
Ketersediaan tempat bertanya.
v
Ketersediaan komponen OTP, Mask, dan Programmable.
6. Produsen
Mikrokontroler
Dibawah ini
adalah daftar produsen besar dari mikrokontroler dan unit yang
terjual
(dalam ribuan).
Company (Units x 1000)
Motorola
(358,894)
Mitsubishi(71,674)
NEC (70,180)
Hitachi
(67,873)
Philips (56,680)
Intel
(46,876)
SGS-Thomson
(37,350)
Microchip
(35,477)
Matsushitta
(34,200)
Toshiba
(32,205)
National
Semiconductor (31,634)
Zilog
(31,000)
Texas
Instruments (29,725)
Siemens
(20,874)
Sharp(17,505)
SOURCE:
DataQuest June 1994
7. Hal-Hal
Mengenai Mikrokontroler
v Tehnik
fabrikasi
CMOS -
Complementary Metal Oxide Semiconductor
Ini adalah
tehnik yang biasa dilakukan untuk memproduksi hampir
semua
mikrokontroler terbaru. Mikrokontroler CMOS memerlukan
daya yang
lebih rendah dibanding mikrokontroler yang dibuat
dengan
tehnik sebelumnya, sehingga memungkinkan untuk
dioperasikan
menggunakan batere. Chip CMOS juga memungkinkan
dioperasikan
pada fully atau mendekati fully static, yang berarti
bahwa clock
dapat diperlambat bahkan diberhentikan sehingga chip
berada dalam
kondisi (mode) sleep. CMOS juga lebih tahan terhadap
noise
dibandingkan cara fabrikasi sebelumnya.
v Arsitektur
Von-Neuman
Architecure
Mikrokontroler
yang di disain berdasarkan arsitektur ini memilik
sebuah data
bus yang dipergunakan untuk "fetch" instruksi dan data.
Program
(instruksi) dan data disimpan pada memori utama secara
bersama-sama.
Ketika kontroler mengalamati suatu alamat di
memori
utama, hal pertama yang dilakukan dalah mengambil
instruksi
untuk dilaksanakan dan kemudian mengambil data
pendukung
dari instruksi tsb. Cara ini memperlambat operasi
mikrokontroler.
Harvard
Architecture
Arsitektur
ini memilik bus data dan instruksi yang terpisah, sehingga
memungkinkan
eksekusi dilakukan secara bersamaan. Secara teoritis
hal ini
memungkinak eksekusi yang lebih cepat tetapi dilain fihak
memerlukan
disain yang lebih kompleks.
v Instruksi
CISC
Saat ini
hampir semua mikrokontroler adalah mikrokontroler CISC (Complete
Instruction
Set Computer). Biasanya memiliki lebih dari 80 instruksi.
Keunggulan
dari CISC ini adalah adanya instruksi yang bekerja seperti sebua
makro,
sehingga memungkinkan programmer untuk menggunakan sebuah
instruksi
menggantikan beberapa instruksi sedarhana lainnya.
RISC
Saat ini
kecenderungan industri untuk menggunakan disain mikroprosesor
RISC (
Reduced Instruction Set Computer). Dengan menggunakan jumlah
instruksi
yang lebih sedikit, memungkinkan lahan pada chip (silicon realestate)
digunakan
untuk meningkatkan kemampuan chip. Keuntungan dari RIS
adalah
kesederhanaan disain, chip yang lebih kecil, jumlah pin sedikit dan
sangat
sedikit mengkonsumsi daya.
Dibawah ini
adalah fature yang biasa dimiliki oleh RISC Processor:
Harvard
Architecture, memungkinkan akses yang program dan data yang bersamaan .
Instruction
Pipelining meningkatkan kecepatan eksekusi.
Orthogonal
instruktion set untuk kemudahan dalam programming, memungkinkan
tiap
instruksi untuk dioperasikan pada register atau digunakan pada beberapa mode
pengalamatan,
instruksi-instruksi tidak mempunyai kombinasi tertentu dan juga tanpa
perkecualian.
8. Pilihan
Memori
EEPROM - Electrically Erasable Programmable Read Only Memory
Beberapa
mikrokontroler memiliki EEPROM yang terintegrasi pada
chipnya.
EEPROM ini dugunakan untuk menyimpan sejumlah kecil
parameter
yang dapat berubah dari waktu ke waktu. Jenis memori ini
bekerja
relatif pelan, dan kemampuan untuk dihapus/tulis nya juga
terbatas.
FLASH (EPROM)
FLASH
meberikan pemecahan yang lebih baik dari EEPROM ketika
dibutuhkan
sejumlah besar memori non-volatile untuk program.
FLASH ini
bekerja lebih cepat dan dapat dihapus/tulis lebih sering
dibanding
EEPROM.
Battery backed-up static RAM
Memori ini
sangat berguna ketika dibutuhkan memori yang besar
untuk
menyimpan data dan program. Keunggulan utama dari RAM
statis adalah
sangat cepat dibanding memori non-volatile, dan juga
tidak
terdapat keterbatasan kemampuan hapus/tulis sehingga sangat
cocok untuk
aplikasi untuk menyimpan dan manipulasi data secara
lokal.
Field programming/reprogramming
Dengan
menggunakan memori non-volatile untuk menyimpan
program akan
memungkinkan mikrokontroler tersebut untuk
diprogram
ditempat, tanpa melepaskan dari sistem yang
dikontrolnya.
Dengan kata lain mikrokontroler tersebut dapat
diprogram
setelah dirakit diPCBnya.
OTP - One Time Programmable
Mikrokontroler
OTP adalah mikrokontroler yang hanya dapat
diprogram
satu kali saja dan tidak dapat dihapus atau dimodifikasi.
Biasanya
digunakan untuk produksi dengan jumlah terbatas. OTP
menggunakan
EPROM standard tetapi tidak memiliki jendela untuk
menghapus
programnya.
Software protection
Dengan
"encryption" atau proteksi fuse, software yang telah diprogramkan
akan
terlindungi dari pembajakan, modifikasi atau rekayasa ulang. Kemampuan ini
hanya
dipunyai oleh komponen OTP atau komponen yang dapat diprogram ulang.
Pada
komponen jenis Mask ROM tidak diperlukan proteksi, hal ini dikarenakan untuk
membajak isi
programnya seseorang harus membacanya (visual) dari chip nya dengan
menggunakan
mikroskop elektron.
Walaupun
demikian pabrik mikrokontroler masih dapat membaca isi program
guna
memastikan bahwa mikrokontroler diprogram dengan tepat, atau biasa disebut
"test
mode". TEST MODE MEMUNGKINKAN KITA MEMBACA
KESELURUHAN
ISI ROM , tetapi hal ini tidak perlu dibesar-besarkan karena test
mode ini
bersifat SANGAT-SANGAT- SANGAT DIRAHASIAKAN dan hanya
diketahui
oleh pabrikan yang memproduksi mikrokontroler tersebut. Test mode hanya
dapat
dilakukan pada komponen Mask ROM.
9.
Input/Output
UART (Universal Asynchronous Receiver Transmitter) adalah adapter serial port
adapter
untuk komunikasi serial asinkron.
USART (Universal Synchronous/Asynchronous Receiver Transmitter)
merupakan
adapter serial port untuk komunikasi serial sinkron dan asinkron.
Komunikasi
serial sinkron tidak memerlukan start/stop bit dan dapat beroperasi pada
click yang
lebih tinggi dibanding asinkron.
SPI (serial peripheral interface) merupakan port
komunikasi serial sinkron.
SCI (serial communications interface) merupakan
enhanced UART (asynchronous
serial port)
I2C bus (Inter-Integrated Circuit bus) merupakan
antarmuka serial 2 kawat yang
dikembangkan
oleh Philips. Dikembangkan untuk aplikasi 8 bit dan banyak
digunakan
pada consumer electronics, automotive dan indistri. I2C bus ini berfungsi
sebagai
antarmuka jaringan multi-master, multi-slave dengan deteksi tabrakan data.
Jaringan
dapat dipasangkan hingga 128 titik dalam jarak 10 meter. Setiap titik dalam
jaringan
dapat mengirim dan menerima data. Setiap titik dalam jaringan harus
memiliki
alamat yang unik.
Analog to Digital Conversion (A/D). Fungsi ADC
adalah merubah besaran analog
(biasanya
tegangan) ke bilangan digital. Mikrokontroler dengan fasilitas ini dapat
digunakan
untuk aplikasi-aplikasi yang memerlukan informasi analog (misalnya
voltmeter,
pengukur suhu dll).
Terdapat
beberapa tipe dari ADC sbb:
- Succesive
Approximation A/D converters.
- Single
Slope A/D converters.
-
Delta-Sigma A/Ds converters.
- Flash A/D.
D/A (Digital to Analog) Converters. Kebalikan
dar ADC seperti diatas.
Comparator. Mikrokontroler tertentu memiliki ssebuah atau lebih
komparator.
Komparator
ini bekerja seperti IC komparator biasa tetapi sinyal input/outputnya
terpasang
pada bus mikrokontroler.
10.
Interupsi
Interupt
merupakan metode yang efisien bagi mikrokontroler untuk
memproses
periperalnya, mikrokontroler hanya bekerja memproses periperal tsb
hanya pada
saat terdapat data diperiperal tsb. Pada saat terjadi interupt,
mikrokontroler
menunda operasi yang sedang dilakukan kemudian mengidentifikasi
interupsi
yang datang dan menjalankan rutin pelayanan interupsi.
Rata-rata
mikrokontroler memiliki setidak-tidaknya sebuah interupsi eksternal,
interupsi
yang dimiliki bisa dipicu oleh "edge" atau "level". Edge
triggered interupt
bekerja
tidak tergantung pada pada waktu terjadinya interupsi, tetapi interupsi bisa
terjadi
karena glitch. Sedangkan Level triggered interupt harus tetap pada logika high
atau low
sepanjang waktu tertentu agar dapat terjadi interupsi, interupsi ini tahan
terhadap
glitch.
Perkenalan
Mikrokontroler 6 dari 8 halaman
Maskable Interrupts
Dengan
maskable interupt kita dapat bebas memilih untuk menggunakan satu
atau lebih
interupsi. Keuntungan maskable interupt inin adalah kita dapat
mematikan
interupsi pada saat mikrokontroler sedang melakukan proses yang
kritis
sehingga interupsi yang datang akan diabaikan.
Vectored Interrupts
Pada saat
terjadi interupsi, interupt handler secara otomatis akan
memindahkan
program pada alamat tertentu yang telah ditentukan sesuai
dengan jenis
interupsi yang terjadi.
11.
Mikrokontroler Populer
Dibawah ini
dijelaskan beberapa mikrokontroler yang cukup populer. Untuk
menggunakan
salah satu mikrokontroler ini pilihan yang paling tepat adalah
mikrokontroler
yang memiliki dokumentasi yang baik serta development tools dengan
harga yang
terjangkau. Untuk pemula atau hobyst, Intel 8051, Motorola 68hc11 atau
Microchip
PIC adalah pilihan yang cukup baik.
v 8051
(Intel dan lainnya)
Arsitektur
Harvard modified dengan alamat terpisah untuk memori program
dan data.
Memori untuk program bisa dialamati hingga 64 K. Memori bawah
(4K, 8K atau
16K tergantung tipe) bisa terletak di chipnya. Mikrokontroler ini
memiliki 128
byte memori internal ditambah beberapa register (SFR), juga
bisa
mengalamati hingga 64K memori eksternal untuk data.
Cukup banyak
software baik software komersil maupin gratis untuk
mikrokontroler
8051 ini. Mikrokontroler ini memiliki banyak varian sehingga
mampu
memenuhi keperluan yang bebeda. Diproduksi tidak hanya oleh Intel
tetapi
beberapa pabrikan lainnya juga ikut memproduksi jenis mikrokontroler
ini.
v 6805
(Motorola)
Memiliki
arsitektur Von Neuman dimana instruksi, data, I/O, dan timer
terdapat
pada satu daerah memori. Stack pointer yang dimiliki adalah 5 bit
sehingga
kedalaman stack terbatas hingga 32 byte. Beberapa mikrokontroler
dari
keluarga ini memiliki ADC, PLL, Frq. Synthesizer, serial I/O dan
software
security.
v PIC
(MicroChip)
Mikrokontroler
PIC merupakan mikrokontroler RISC yang pertama. Pada
umumnya RISC
mengakibatkan kesederhanaan rancangan dan memungkinkan
untuk
menambah kemampuanya dengan biaya yang rendah. Walaupun hanya
memiliki
sedikit instruksi (33 instruksi untuk 16C5x), keluarga PIC memiliki
banyak
keunggulan yang sudah merupakan bagian dari chip. Dengan bus
instruksi
dan bus data yang terpisah (arsitektur Harvard), PIC memungkinkan
akses data
dan program secara bersamaan sehingga menaikan kinerja
pemrosesannya.
Keuntungan dari kesederhanaan rancangan ini adalah chip
yang sangat
kecil, sedikit pin dan pemakaian daya yang sangat kecil.
Popularitas
mikrokontroler PIC ini meningkat sangat cepat. Dengan harga
yang murah,
ukuran kecil dan hemat pemakaian daya, pada saat ini
mikrokontroler
ini digunakan juga pada pemakaian lain seperti sebagai
rangkaian
logika. Terdapat tiga keluarga PIC pada saat ini yaitu PIC16C5x,
PIC16Cxx dan
PIC17Cxx.
Perkenalan
Mikrokontroler 7 dari 8 halaman
v Z8 (Zilog)
Z8 merupakan
turunan dari Zilog Z80. Memiliki arsitektur unik merupakan
arsitektur
gabungan dengan tiga daerah memori yaitu: program memori, data
memori dan
CPU register file. Mikrokontroler ini memiliki UART, timer,
DMA, I/O
hingga 40 buah pada chipnya. Versi lainnya memiliki sync/async
serial
channel.
Keseluruhan
mikrokontroler ini memiliki Stack RAM yang dapat dikonfigurasikan
dan sistem
interupsi, dua timer programmable dengan interupt, proteksi ROM, dua
analog
komparator
12. Software
Software
untuk menggunakan mikrokontroler dapat didapatkan secara gratis
dengan
mencari di WWW, tetapi software gratis biasanya tidak dilengkapi dengan
dokumentasinya.
Software ini diantaranya adalah software untuk simulasi dan
software
untuk pemrograman. Jika ingin lebih serius mendalami mikrokontroler
mungkin
lebih baik untuk membeli software lengkap dengan dokumentasinya.
Jika PIC
merupakan mikrokontroler yang dipilih, kita dapat mendownload software
yang diperlukan
secara gratis di web microchip yaitu MPSIM (simulator), MPASM
(assembler).
13. Bahasa
Pemrograman Bagi Mikrokontroler
BAHASA MESIN DAN ASSEMBLER
Bahasa mesin
adalah satu-satunya bahasa yang dimengerti oleh
mikrokontroler.
Bahasa ini tidak mudah untuk dimengerti oleh manusia. Sedangkan
bahasa
assembly adalah suatu bentuk bahasa mesin yang bisa dimengerti oleh
manusia.
Setiap pernyataan dari bahasa assembly menggambarkan satu pernyataan
bahasa
mesin. Sebagai contoh instruksi JMP (asal kata JUMP) akan lebih mudah
dimengerti
dibandingkan instruksi B3H.
Pemrograman
dengan menggunakan bahasa assembly/mesin menghasilkan
program yang
kecil dan cepat. Hal ini dikarenakan kita sepenuhnya mengontrol kerja
dari
program, tetapi tentu saja jika kita membuat program yang bertele-tele dan
berbelit
akan menyebabkan program berjalan lambat.
Untuk orang
yang pertama kali mempelajari mikrokontroler, akan lebih baik jika
mempelajari
assembler terlebih dahulu sebelum mempelajari bahasa pemrograman
lainnya
(mis: C). Dengan membuat program dengan assembler akan membimbing kita
memahami
arsitektur dari mikrokontroler tsb.
KOMPILER
Compiler
adalah penerjemah untuk bahasa pemrograman tingkat tinggi.
Bekerja
dengan cara menterjemahkan (mis pada PC) langsung ke bahasa mesin yang
dimengerti
oleh mikrokontroler.
Salah satu
compiler yang banyak dipergunakan saat ini adalah "C". "C"
digunakan
pada
mikrokontroler kecil hingga supercomputer. Walaupun program dengan C
sedikit
sulit untuk dipahami (diakibatkan oleh gaya penulisan program yang berbeda
untuk tiap
programer), C merupakan alat yang sangat flexible dan sangat membantu
pengembangan
program. Bahasa ini adalah bahasa tingkat tinggi tetapi masih
memungkinkan
kita akses langsung ke mesin. Saat ini terdapat beberapa compiler C
yang cukup
murah dan bagus untuk pemrograman mikrokntroler terkenal. Kode
(bahasa
mesin) yang dihasilkan oleh compiler ini cukup efisien (cepat dan kompak).
Perkenalan
Mikrokontroler 8 dari 8 halaman
14. Alat
Bantu Pengembangan
Memiliki
software pemrograman belum mencukupi untuk mengembangkan
program bagi
suatu mikrokontroler. Diperlukan pula software untuk mencari
kesalahan
dalam pemrograman sbb:
SIMULATOR
Fungsi
simulator adalah mensimulasikan atau menirukan kerja mikrokontroler
pada PC.
Langkah-langkah yang dikerjakan serta apa yang terjadi ketika
program
dijalankan dapat diamati dilayar PC. Disamping itu juga isi dari
register
atau variabel dapat diisi atau diubah ketika program djalankan.
Simulator
tidak dapat mensimulasi kehadiran interupsi secara baik, dan
biasanya
program yang dijalankan jauh lebih lambat dibandingkan pada
keadaan
sebenarnya.
DEBUGER RESIDEN
Debuger
residen menjalankan program di mikrokontroler itu sendiri, dan pada
saat
bersamaan menampilkan hasilnya pada komputer induknya (PC). Alat
bantu ini
memiliki beberapa keunggulan seperti pada simulator dengan
kelebihan
lain yaitu kita dapat melihat bagaimana program tersebut bekerja
pada target
yang sebenarnya. Namun disisi lain, alat bantu ini memakai
sebagian
sumber daya yang dimiliki oleh mikrokontroler seperti port
komunikasi
(untuk komunikasi dgn PC), interupsi untuk untuk menjalankan
program
perlangkah (single step) dan sejumlah memori untuk menyimpan
program dari
debugger (bagian residen yang ditempatkan di target).
EMULATOR
Emulator
adalah peralatan yang bekerja dengan berpura-pura sebagai
mikrokontroler
dan pada saat bersamaan dia mengambil informasi untuk
ditampilkan.
Emulator memberikan kontrol penuh pada target. Emulator ini
bisa berupa
perangkat dengan display tersendiri atau merupakan pengantar
muka PC.
Jika cukup
banyak dana yang dimiliki, emulator ini adalah alat yang benar-benar
diperlukan dalam mengembangkan
suatu sistem.
Ada beberapa Contoh Aplikasi Mikrikontroller:
Aplikasi Timer pada
Mikrokontroller Atmel
Timer merupakan sebuah hardware khusus yang disediakan oleh Atmel untuk
menghitung/mencacah dari suatu nilai tertentu hingga nilai maksimal yang diset
saat mem-flash source code ke dalam mikrokontroller. Ia dapat bekerja parallel
walau mikrokontroller sedang mengeksekusi suatu perintah. Pada saat ia selesai
berhitung, interrupt akan diaktifkan agar mikrokontroller tahu dan beranjak
untuk mengeksekusi perintah terkait timer tersebut.
Dalam menggunakan timer, ada beberapa istilah mode yang harus diketahui agar
tidak bingung saat memprogram.
· Mode Normal: Pada mode ini timer akan
menghitung dari nilai terendah hingga nilai maksimal dan interrupt overflow
akan diaktifkan saat hitungan reset ke nilai terendah karena telah melebihi
nilai maksimal.
· Mode CTC (Clear Timer on Compare Match): Pada
mode ini, nilai maksimal dari timer dapat di-set dengan nilai tertentu dan pada
saat menyentuh nilai maksimal tersebut, timer akan kembali ke nilai terendah.
Misal dalam timer 8 bit, normalnya nilai maksimalnya adalah 255, namun pada
mode ini nilainya dapat di-set menjadi 200, 100 atau sesuai kebutuhan.
· Mode Fast PWM: Pada dasarnya mode ini bekerja
mirip mode normal, namun pada mode ini ketambahan fitur output compare sehingga
dapat menghasilkan pulse width modulation. Misal: nilai OCR di-set 200, pada
pin OC0A akan bernilai 1 saat timer menghitung dari nilai terendah hingga
kurang dari OCR, sebaliknya pada pin OC0A akan bernilai 0 saat OCR lebih kecil
atau sama dengan OCR.
· Mode Phase Correct PWM: Pada dasarnya mode
ini sama dengan Fast PWM, namun bedanya setelah mencapai nilai maksimal, dia
akan menghitung mundur hingga ke nilai terndah. Mode ini juga menyediakan fitur
ouput compare untuk menghasilkan PWM.
Beberapa mode dalam timer
Tidak hanya mode, ada juga istilah penting yang juga harus dipahami dalam
memprogram mikrokontroller. Istilah tersebut adalah clock pre-scalling.
Maksudnya adalah, mengeset clock yang digunakan untuk menghitung dalam timer.
Misal jika tidak menggunakan prescalling, maka timer secara otomatis akan
menggunakan referensi dari Xtal, external clock. Jika Xtal yang digunakan
adalah 16MHz, maka pencacahan timer dihitung setiap 1/16 Mhz atau 0.0625 us.
Sehingga, jika kita menge-set timer dengan mode normal dan prescalling sesuai
dengan external clock, maka waktu yang dibutuhkan untuk mencacah dari nilai
terendah hingga maksimal (timer overflow) adalah 255 x 0,0625 us atau kira-kira
15.9375 us.
Contoh penggunaan prescaller dalam timer. Semakin besar prescaller semakin
lambat waktu pencacahan timer.
Setelah membahas beberapa istilah, mari sejenak kita mengambil contoh cara
menerapkan timer untuk sebuah aplikasi jam digital. Dalam jam digital
dibutuhkan timer untuk menandai perubahan detik demi detik yang kemudian diakumulasi
menjadi menit dan jam. Jadi, kata kunci dalam aplikasi jam digital adalah
bagaimana cara menghitung satu detik berdasarkan pendekatan frekuensi clock
mikrokontroller.
Di sini saya akan langsung berasumsi menggunakan clock prescalling yang
sama dengan seper-256 dari external clock / xtal, nilai xtal yang digunakan
adalah 16 MHz, dan mode yang digunakan adalah normal. Dari asumsi tersebut
didapatkan:
- clock timer / pencacah timer = 256/16 MHz = 16 us
- t saat overflow = 255 x 16 us = 4.08 ms
Nilai tersebut tentu saja masih jauh dari satu detik sehingga kita butuh pencacah lagi yang akan menggunakan variabel berupa unsigned char sebesar 8 bit. Pencacah itu akan menghitung dari nol hingga nilai maksimal yang didapatkan dari hasil berikut.
- Maxcacah = 1000 ms / 4.08 ms = 245.098039 (dibulatkan ke bawah menjadi 245)
Dari nilai tersebut, maka akan didapatkan timer dengan nilai yang mendekati satu detik yaitu 4.08 ms x 245 atau sebesar 0.996 detik.
- clock timer / pencacah timer = 256/16 MHz = 16 us
- t saat overflow = 255 x 16 us = 4.08 ms
Nilai tersebut tentu saja masih jauh dari satu detik sehingga kita butuh pencacah lagi yang akan menggunakan variabel berupa unsigned char sebesar 8 bit. Pencacah itu akan menghitung dari nol hingga nilai maksimal yang didapatkan dari hasil berikut.
- Maxcacah = 1000 ms / 4.08 ms = 245.098039 (dibulatkan ke bawah menjadi 245)
Dari nilai tersebut, maka akan didapatkan timer dengan nilai yang mendekati satu detik yaitu 4.08 ms x 245 atau sebesar 0.996 detik.
Berikut contoh programnya dengan menggunakan CV-AVR.
// define global variable
unsigned char pencacah = 0;
volatile unsigned char detik = 0;
static unsigned char MAX_CACAH = 245;
unsigned char pencacah = 0;
volatile unsigned char detik = 0;
static unsigned char MAX_CACAH = 245;
// interrupt timer overflow
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// check if it’s already 1 second
if(pencacah>=245)
{
// clear counter
pencacah = 0;
detik++;
} else {
pencacah++;
}
}
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// check if it’s already 1 second
if(pencacah>=245)
{
// clear counter
pencacah = 0;
detik++;
} else {
pencacah++;
}
}
void main (void)
{
// define local variable and register
unsigned char menit = 0;
unsigned char jam = 0;
{
// define local variable and register
unsigned char menit = 0;
unsigned char jam = 0;
// …
//
while(1)
{
if(detik == 60)
{
detik = 0;
if(menit == 60)
{
menit = 0;
if(jam == 24)
{
jam = 0;
} else {
jam++;
}
} else {
menit++;
}
}
}
{
if(detik == 60)
{
detik = 0;
if(menit == 60)
{
menit = 0;
if(jam == 24)
{
jam = 0;
} else {
jam++;
}
} else {
menit++;
}
}
}
}
Aplikasi Mikrokontroller 001
“Traffic light 3 arah dengan atmega8535″
Pada aplikasi ini saya
mempergunakan atmega8535 sebagai mikrokontroller utama atau main controller nya
,, rangkaiannya cukup simple dengan mempergunakan 9 buah led sebagai prototype.
Dan led tersebut akan menyala dengan active low ( jika diberi logika 0).
Timernya masih menggunakan sistem
delay (waktu tunggu) dan untuk waktunya bisa dimodifikasi sesuai dengan
keinginan dengan mengubah nilai _delay_ms(“waktutunggu”);.
Berikut komponen yang dibutuhkan
:
- 1 ic microcontroller atmega8535
- 1 crystal 11.0592 MHz
- 2 Capasitor 22nF
- 1 Push button (sbg tombol reset)
- 1 Resistor 10K
- 1 Capasitor 10uF
- 9 Resistor 330 Ohm
- 3 Led warna merah
- 3 Led warna kuning
- 3 Led warna hijau
- Catu daya (adaptor 5v)
Gambar rangkaian simulasi di ISIS
Proteus adalah :
Dan ini program bahasa C dengan AVR studio4 :
/*
* Created: 08/05/2013 18:22:25
* Author: Ramada_Arief
* Program Traffic_light_1
*/
#define F_CPU 11059200UL
#include <avr/io.h>
#include <util/delay.h>
void delay_ms(int ms)
{
for(int i=0; i<=ms; i++) {_delay_ms(1);}; //fungsi delay manipulasi
}
int main(void)
{
PORTB=0xFF; //port output
DDRB=0xFF; //port_b disetting sebagai output
PORTC=0xFF;
DDRC=0xFF;
PORTD=0xFF;
DDRD=0xFF;
while(1)
{
PORTB=(1<<PB0)|(1<<PB1)|(1<<PB2)|(0<<PB3)|(1<<PB4)|(1<<PB5)|(1<<PB6)|(0<<PB7);
_delay_ms(50);
PORTC=(1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3)|(1<<PC4)|(1<<PC5)|(1<<PC6)|(1<<PC7);
_delay_ms(50);
PORTD=(0<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7);
_delay_ms(70000); //bisa dimodifikasi
PORTB=(1<<PB0)|(1<<PB1)|(1<<PB2)|(0<<PB3)|(1<<PB4)|(1<<PB5)|(1<<PB6)|(0<<PB7);
_delay_ms(50);
PORTC=(0<<PC0)|(1<<PC1)|(1<<PC2)|(0<<PC3)|(1<<PC4)|(1<<PC5)|(1<<PC6)|(1<<PC7);
_delay_ms(50);
PORTD=(1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7);
_delay_ms(2000);
PORTB=(0<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4)|(1<<PB5)|(1<<PB6)|(0<<PB7);
_delay_ms(50);
PORTC=(1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3)|(1<<PC4)|(1<<PC5)|(1<<PC6)|(1<<PC7);
_delay_ms(50);
PORTD=(1<<PD0)|(1<<PD1)|(1<<PD2)|(0<<PD3)|(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7);
_delay_ms(40000); //bisa dimodifikasi
PORTB=(0<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4)|(1<<PB5)|(1<<PB6)|(0<<PB7);
_delay_ms(50);
PORTC=(1<<PC0)|(1<<PC1)|(1<<PC2)|(0<<PC3)|(1<<PC4)|(1<<PC5)|(1<<PC6)|(0<<PC7);
_delay_ms(50);
PORTD=(1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7);
_delay_ms(2000);
PORTB=(0<<PB0)|(1<<PB1)|(1<<PB2)|(0<<PB3)|(1<<PB4)|(1<<PB5)|(1<<PB6)|(1<<PB7);
_delay_ms(50);
PORTC=(1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3)|(1<<PC4)|(1<<PC5)|(1<<PC6)|(1<<PC7);
_delay_ms(50);
PORTD=(1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4)|(1<<PD5)|(1<<PD6)|(0<<PD7);
_delay_ms(55000); //bisa dimodifikasi
PORTB=(0<<PB0)|(1<<PB1)|(1<<PB2)|(0<<PB3)|(1<<PB4)|(1<<PB5)|(1<<PB6)|(1<<PB7);
_delay_ms(50);
PORTC=(0<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3)|(1<<PC4)|(1<<PC5)|(1<<PC6)|(0<<PC7);
_delay_ms(50);
PORTD=(1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7);
_delay_ms(2000);
};
return(0);
}