mudah pemrograman mikrokontroller atmel avr dengan bascom avr
TRANSCRIPT
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
1/104
Hak Cipta dilindungi Undang-Undang, 2010 (c) Agfianto Eko Putra
Mudah Menguasai Pemrograman
Mikrokontroler Atmel AVR
menggunakan BASCOM-AVR
Agfiant o Eko Putra
(http://klikdisini.com/embedded)
Versi 1.5 - 2010
Kelompok Riset DSP dan Embedded Intelligent System ELINS
Universitas Gadjah Mada - Yogyakarta 55281
http://klikdisini.com/embeddedhttp://klikdisini.com/embedded -
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
2/104
Hak Cipta dilindungi Undang-Undang, 2010 (c) Agfianto Eko Putra
Daftar Isi
Modul-1: ATMega16 DAN BASCOM AVR .......................................................................................... 1
1.1. Apakah Mikrokontroler itu? ............................................................................................... 1
1.2. Pengetahuan Dasar Mikrokontroler AVR ............................................................................ 3
1.2.1. Pendahuluan .............................................................................................................. 3
1.2.2. Memilih AVR yang benar ......................................................................................... 4
1.3. Ada Apa dengan Mikrokontroler AVR ATMega16? .............................................................. 5
1.4. Ringkasan Fitur-fitur Mikrokontroler AVR ATMega16 ......................................................... 5
1.5. Diagram Pin dan Diagram Blok Mikrokontroler AVR ATMega16 .......................................... 7
1.6. Penjelasan Singkat Pin-pin pada Mikrokontroler AVR ATMega16........................................ 9
1.7. Mengawali Membuat Aplikasi berbasis Mikrokontroler AVR............................................. 10
1.8. Bahasa Pemrograman BASIC AVR (BASCOM AVR) ............................................................. 14
1.8.1. Tipe Data .................................................................................................................. 14
1.8.2. Variabel .................................................................................................................... 14
1.8.3. Konstanta ................................................................................................................. 15
1.8.4. Penulisan Bilangan ................................................................................................... 16
1.8.5. Alias ......................................................................................................................... 16
1.8.6. Array atau Larik ........................................................................................................ 16
1.8.7. Operator .................................................................................................................. 16
1.8.8. Operasi Bersyarat ..................................................................................................... 17
1.8.9. Pengulangan Operasi ................................................................................................ 18
1.8.10. Lompatan Proses ...................................................................................................... 19
Modul-2: Konsep I/O ATMega16 (LED dan Pushbutton) ................................................................. 20
2.1. Rangkaian LED CC Common Cathode............................................................................. 20
2.2. Latihan-1: Menghidupkan semua LED ............................................................................... 20
2.3. Latihan-2: Menghidupkan dan Mematikan LED ................................................................ 21
2.4. Latihan-3: Animasi LED ..................................................................................................... 22
2.5. Latihan-4: Animasi LED Alternatif Program .................................................................... 23
2.6. Latihan-5: Animasi LED Lainnya ........................................................................................ 24
2.7. Latihan-6: Penerjemahan PenekananPushButtonpada Tampilan LED .............................. 24
2.8. Latihan-7:Pushbuttondan Animasi LED ........................................................................... 26
Modul-3: Timer, Counter dan PWM ................................................................................................ 27
3.1. Pendahuluan Timer dan Counter ...................................................................................... 27
3.2. Tentang Timer0 dan Timer2 ............................................................................................. 27
3.3. Timer0, Timer2 dan BASCOM AVR .................................................................................... 28
3.4. Tentang Timer1 ................................................................................................................ 29
3.5. Latihan-1: Menggunakan Timer1 ...................................................................................... 30
3.6. Latihan-2: Menggunakan Timer0 ...................................................................................... 36
3.7. Latihan-3: Menggunakan Counter0 .................................................................................. 39
3.8. Latihan-4: Menggunakan Fasilitas Capture pada Timer1 ................................................... 41
3.9. Latihan-5: Tentang PWM (Pulse Width Modulation) ......................................................... 42
Modul-4: Konsep Interupsi ............................................................................................................. 47
4.1. Pendahuluan Interupsi ..................................................................................................... 47
4.2. Latihan-1: Interupsi Eksternal 0 dan 1............................................................................... 48
4.3. Latihan-2: Program Apakah ini?! ...................................................................................... 50
4.4. Latihan-3: Membuat STOPWATCH .................................................................................... 51
Modul-5: Komunikasi Serial ............................................................................................................ 55
5.1. Komunikasi Serial ............................................................................................................. 55
5.2. Penjelasan Instruksi danDirectiveKomunikasi Serial ........................................................ 55
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
3/104
Hak Cipta dilindungi Undang-Undang, 2010 (c) Agfianto Eko Putra
5.3. Latihan-1: Komunikasi Serial dan LCD Bagian 1 .............................................................. 56
5.4. Latihan-2: Komunikasi Serial dan LCD Bagian 2 .............................................................. 60
5.5. Latihan-3: Protokol Komunikasi Serial .............................................................................. 61
Modul-6: LCD dan ADC.................................................................................................................... 63
6.1. Rangkaian Antarmuka LCD 2x16 Karakter ......................................................................... 63
6.2. Rangkaian Antarmuka LCD dan ADC ................................................................................. 646.3. Latihan-1: Tampilan Saya Manusia Keren di LCD............................................................ 64
6.4. Latihan-2: Tampilan Saya Manusia Keren Berkedip-kedip di LCD ................................... 66
6.5. Latihan-3: Menggeser Tampilan pada LCD ........................................................................ 67
6.6. Latihan-4: Animasi Karakter pada LCD .............................................................................. 67
6.7. Latihan-5: Antarmuka LCD danPushbutton...................................................................... 72
6.8. Latihan-6: Pemanfaatan ADC pada Mikrokontroler AVR ................................................... 74
6.9. Latihan-7: Pemanfaatan ADC untuk Sensor Suhu LM35 .................................................... 77
6.10. Latihan-8: Pembacaan 2 Kanal ADC pada Mikrokontroler AVR ...................................... 79
6.11. Latihan-9: Pembacaan 4 Kanal ADC pada Mikrokontroler AVR ...................................... 80
Modul-7: Aplikasi RTC dan EEPROM ............................................................................................... 82
7.1. Pendahuluan RTC DS1307 ................................................................................................ 827.2. Komunikasi I
2C pada RTC DS1307 ..................................................................................... 83
7.3. Rangkaian Baku RTC DS1307 ............................................................................................ 84
7.4. Latihan-1: Jam Digital (LCD) dengan RTC DS1307 .............................................................. 84
7.5. Latihan-2: Jam Digital (LCD) dengan RTC DS1307, Alternatif ............................................. 90
7.6. Latihan-3: Akses EEPROM Internal Mikrokontroler ATMega16 ......................................... 92
7.7. Tentang Two-wire Serial EEPROM AT24C32/64 ................................................................ 95
7.8. Latihan-4: Akses EEPROM Eksternal AT24C64 ................................................................... 97
7.9. Latihan-5: Akses EEPROM Eksternal AT24C64 alternatif SUBRUTIN ................................ 99
Yogyakarta, 01 Juni 2010
Agfianto Eko Putra
[ http://agfi.staff.ugm.ac.id [email protected]]
DIPERLUKAN OTAK KANAN DAN KIRI UNTUK KESUKSESAN ANDA DALAM DUNIA MIKROKONTROLER!
http://agfi.staff.ugm.ac.id/mailto:[email protected]:[email protected]://agfi.staff.ugm.ac.id/ -
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
4/104
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 tentangKomputer 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);
CPUtersebut sama-sama menjalankan program dari suatu lokasi atau tempat, biasanya dari
ROM(Read Only Memory)1atau RAM(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 denganmenekankan pada perbedaan antara Mikrokontroler dan Mikrokomputer:
CPUpada 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 dalam ROM atau yang lebih dikenal
dengan BIOS (Basic I/ O System) pada saat awal dihidupkan, kemudian mengambil atau
1Memori yang hanya bisa dibaca saja.
2Memori yang bisa dibaca juga bisa ditulisi.
Masukan-masukan
sensor cahaya
sensor suhu
sensortekanan, dll
Pemroses
uC AT89
uC AVR
uC PIC16F, dll
Luaran-luaran
aktuator -motor
relay
speaker, dll
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
5/104
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 dalam ROM internal-nya (bisa berupa Mask
ROMatau Flash PEROMatau Flash 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 mikrokontrolerada di dalam chipdan 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
computeratau 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, Inst ruct ion Decoder, Accumulatordan Cont rol 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). Inst ruct ion Decoderbertugas 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 oleh ALU(Arit hmet ic Logic
Unit), mungkin dengan bantuan memori sementara Accumulator yang kemudian menghasilkan
sinyal-sinyal kontrol ke seluruh periferal yang terkait melalui Control Logic.
Memori RAMatau RAM Memorybisa digunakan sebagai tempat penyimpan sementara, sedangkanSFR (Special Function Register) sebagian ada yang langsung berhubungan dengan I/O dari
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
6/104
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.
Timeratau Counterdigunakan sebagai pewaktu atau pencacah, sebagai pewaktu fungsinya seperti
sebuah jam digital dan bisa diatur cara kerjanya. Sedangkan pencacah lebih digunakan sebagai
penghitung atau pencacah eventatau 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 istilah embedded systematau embedded 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 Stampbisa 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 CISCatau Complex Instruct ion Set Comput ingyang lebih kaya instruksi tetapi
fasilitas internal secukupnya saja (seri AT89 memiliki 255 instruksi);
o Tipe RISC atau Reduced Instruct ion Set Comput ing 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
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
7/104
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, sistem Eventdan DMA yang ditingkatkan, serta merupakan pengembangan keluarga
AVR untuk pasar low powerdan high 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 adalah tinyAVRdan megaAVR, 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
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
8/104
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 XMEGAo 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 Inggris3...
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...
http://www.atmel.com/http://www.atmel.com/http://www.atmel.com/ -
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
9/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 6
High-performance, Low-power AVR 8-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 MHzo 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 Oscillatoro 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 ATmega16Lo 0 - 16 MHz for ATmega16
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
10/104
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 ATMega16Pada 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
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
11/104
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
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
12/104
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...Port A (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 resistorpull-upinternal4yang bisa diaktifkan untuk
masing-masing bit.
Port B (PB7..PB0) Port B berfungsi sebagai sebagai port I/O dwi-arah 8-bit.Masing-masing
pin menyediakan resistorpull-upinternal yang bisa diaktifkan untuk
masing-masing bit.
Port B juga memiliki berbagai macam fungsi alternatif, sebagaimana
ditunjukkan pada Tabel 1.1
Port C (PC7..PC0) Port C berfungsi sebagai sebagai port I/O dwi-arah 8-bit.Masing-masingpin menyediakan resistorpull-upinternal yang bisa diaktifkan untuk
masing-masing bit.
Port C juga digunakan sebagai antarmuka JTAG, sebagaimana
ditunjukkan pada Tabel 1.2
Port D (PD7..PD0) Port D berfungsi sebagai sebagai port I/O dwi-arah 8-bit.Masing-masing
pin menyediakan resistorpull-upinternal 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, walaupun clocktidak dijalankan.
XTAL1 Masukan ke penguat osilator terbalik (inverting) dan masukan ke
rangkaian clockinternal.
XTAL2 Luaran dari penguat osilator terbalik
AVCC Merupakan masukan tegangan catu 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.
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
13/104
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.
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
14/104
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 t ombol yang dit ekan?
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
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
15/104
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 AVRmaupun 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 Clockyang 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 sayaatau 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 YANGSESUAI (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.
http://www.atmel.com%29./http://www.atmel.com%29./http://www.atmel.com%29./ -
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
16/104
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 AVRdari MCSELEC.COM, karena sangat mudah penggunaanya5.
Oya program Anda, yang menggunakan bahasa apapun yang Anda suka, harus dikompilasi
(menggunakan perangkat lunak yang sudah saya sebutkan sebelumnya) menjadi berkas BIN atauHEX(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 prinsip worst case scenarioatau 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!
http://www.labcenter.co.uk/).http://www.labcenter.co.uk/).http://www.labcenter.co.uk/). -
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
17/104
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 sajapenjelasan 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) Jangkauan Data
Bit 1/8 0 atau 1
Byte 1 0 s/d 255
Integer 2 -32768 s/d 3.767Word 2 0 s/d 65535
Long 4 -2147483648 s/d 2147483647
Single 4 1,5 x 10-45
s/d 3,4 x 1038
Double 8 5 x 10-324
s/d 1,7 x 10308
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 :
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
18/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 15
1. Dengan pernyataan DIM
Deklarasi ini dibuat dengan perintah DIM(singkatan dori dimension) dengan aturan
sebagai berikut:
Dim As
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
Contoh :
DEFINT angkaDEFBYTE 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_konstantaConst nama_konstanta = nilai_konstanta
Contoh :
Dim pembagi as const 23
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
19/104
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_1SW_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 25PORTC=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
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
20/104
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 dariA > B
< Lebih kecil dari A < B
>= Lebih besar atau sama dengan A >= B
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
21/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 18
...End If
D. SELECT - CASE
Cocok digunakan untuk menangani pengujian kondisi yang jumlahnya cukup banyak. Cara
penulisannya :
Select case Case 1: Case 2:
...
End Select
1.8.9. Pengulangan OperasiA. FOR - NEXT
Perintah ini digunakan untuk melaksanakan perintah secara berulang sesuai dengan jumlah
yang ditentukan. Sintaks penulisannya :
For = To
Next []
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...
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
...
Loop Until
C. WHILE - WEND
Berbeda dengan DO-LOOP, instruksi ini digunakan untuk melakukan pengulangan selama
kondisinya benar, cara penulisannya:
While
...
Wend
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
22/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 19
1.8.10. Lompatan Proses
A. GOSUB
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 RoutinePrint "Back from Routine"
End
Routine:Print "This will be executed"
Return
B. GOTO
Perintah ini untuk melakukan lompatan ke label kemudian melakukan serangkaian instruksi
tanpa harus kembali lagi, sehingga tidak perlu RETURN. Contoh:
Dim A As ByteStart: 'sebuah label diakhiri dengan :
A = A + 1 'naikkan variabel AIf A < 10 Then 'apakah lebih kecil 10?
Goto Start 'ya, lakukan lagiEnd If 'akhir IFPrint "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 -
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
23/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 20
Modul-2: Konsep I/O ATMega16 (LED
dan Pushbutton)
2.1. Rangkaian LED CC Common Cat hode
Pada Gambar 2.1 ditunjukkan delapan buah LED yang bisa dihubungkan ke suatu port pada
mikrokontroler AVR, yang difungsikan sebagai luaran atau output. Pada konfigurasi ini LED akan
menyala bila diberi logika HIGH dan LED akan padam bila diberi logika LOW. Hal ini disebabkan LED
di konfigurasi sebagai Common CathodeatauCC, artinya (seluruh Katoda LED digabung menjadi satu
dan dihubungkan ke GND). Anda bisa saja membalik polaritas dari LED tersebut, sehingga menjadi
konfigurasiCAatau Common Anode, hanya saja untuk menghidupkan menggunakan logika HIGH.
Gambar 2.1. Mikrokontroler ATMega16 menggunakan kristal 11,0592MHz
Pada rangkaian tersebut (Gambar 2.1) digunakan kristal sebesar 11.0592MHz, angka ini dipilih untuk
menghasilkan ralat 0% untuk penentuan kecepatan baudrate (akan dijelaskan pada modul
tersendiri). AVR bisa juga dijalankan tanpa menggunakan kristal eksternal, karena dari pabrik-nya
sudah diset meggunakan osilator internal sebesar 1 MHz. Jika Anda kesulitan dalam mengatur
osilator eksternal ini, maka seluruh program di buku ini pada bagian $crystal = 11059200
diganti dengan $crystal = 1000000, artinya digunakan frekuensi kerja 1 MHz, bukan 11.0592
MHz. Resistor sebesar 330 ohm digunakan untuk membatasi arus yang masuk pada LED, agar tidak
cepat rusak dan cahayanya tidak terlalu menyilaukan mata (maaf tidak digambar).
2.2. Latihan-1: Menghidupkan semua LED
Untuk menghidupkan semua LED yang terhubung ke PORTB kita awali program dengan beberapa
instruksi berikut...
$regfile = "m16def.dat"
$crystal = 11059200
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
24/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 21
Instruksi yang pertama digunakan untuk mendeklarasikan pustaka berdasar mikrokontroler yang
digunakan, dalam contoh ini digunakan ATMega16 sehingga file yang dibutuhkan adalah
m32def.dat. Sedangkan instruksi kedua ($crystal) digunakan untuk menentukan frekuensi
kerja dari mikrokontrolernya, dalam hal ini digunakan kristal 11,0592MHz atau dituliskan 11059200
Hz1.
Config Portb = Output
Port_led Alias Portb
Instruksi berikutnya (config portb) digunakan untuk menentukan apakah suatu PORT pada AVR
digunakan sebagai masukan atau luaran, karena aplikasi yang sedang kita bicarakan dalam bagian ini
adalah luaran tampilan LED, makaPORTBkita definisikan sebagai luaran (output).
Untuk memudahkan akses PORTB bisa digunakan nama lain, misalnya PORT_LED, yang dilakukan
dengan instruksiALIAS(instruksi berikutnya).
Port_led = 255End 'end program
Instruksi bagian akhir adalah menyalakan semua LED, yaitu dengan memberikan logika 1 sebanyak
8-bit atau 1 byte, artinya kita kirimkan &b11111111 atau &hFF atau 255. Jangan lupa diakhiri dengan
instruksiENDsebagai akhir program. Mengapa hal ini perlu dilakukan? Jika Anda lupa memberikan
istruksi END, padahal program Anda sesungguhnya sudah selesai, hasil kompilasi tetap tidak
mengetahui bahwa program Anda selesai, sehingga bisa menyebabkan hasil yang tidak diharapkan.
Program selengkapnya...
1: berkas LED01.BAS2: $regfile = "m16def.dat"
3: $crystal = 11059200
4:
5: Config Portb = Output
6: Port_led Alias Portb
7:
8: Port_led = 255
9:
10: End 'end program
2.3. Latihan-2: Menghidupkan dan Mematikan LEDOkey, sekarang kita akan membuat aplikasi untuk menghidupkan dan mematikan LED secara
bergantian dengan tundaan waktu tertentu. Rangkaian yang digunakan masih sama, diawal
program, sebagaimana dijelaskan sebelumnya, dituliskan beberapa instruksi berikut (penjelasan
sama seperti sebelumnya)...
$regfile = "m16def.dat"$crystal = 11059200
Config Portb = Output
1Defaultnya menggunakan osilator internal sebesar 1MHz, jadi sebaiknya ada tulis 1000000Hz, kecuali sudah
ada atur setelan osilatornya ke 8MHz.
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
25/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 22
Port_led Alias Portb
Kemudian langkah selanjutnya menuliskan serangkaian instruksi-instruksi berikut...
DoPort_led = 255
Waitms 300
Port_led = 0
Waitms 300
Loop
Diawali dengan instruksi DO..LOOP yang merupakan instruksi pengulangan tak berhingga, karena
tidak dibatasi denganUNTIL (lihat kembali penjelasan di Bagian 1 Handout ini). Apa yang diulang-
ulang? Yup! Betul, menghidupkan (PORT_LED=255) dan mematikan (PORT_LED=0) LED yang
terhubung ke PORTB secara bergantian dengan tundaan 300 milidetik (WAITMS 300), jika dirasa
terlalu cepat silahkan saja diganti angka 300-nya dengan angka lain maksimum 65535.
Perhatikan,WAITMSmenggunakan satuan milidetik,WAITUSmenggunakan satuan mikrodetik dan
WAITmenggunakan satuan detik. Sedangkan DELAY (tanpa diikuti angka) bernilai tundaan selama1000 mikrodetik atau 1 milidetik.
Oya, mungkin Anda bertanya, loch instruksi END kok gak ditulis ya? Kelupaan-kah? Ooo tidak,
sengaja saya tidak menuliskannya karena memang tidak perlu, mengapa? Karena hasil kompilasi
program selalu aman karena disana ada pengulangan terus menerus, pengulangan tak berhingga,
terus menerus mengulang (DO...LOOP) selama rangkaian mikrokontroler tersambung catu daya.
Sehingga saya tidak khawatir program akan berjalan kacau sebagaimana saya uraikan sebelumnya.
Jadi instruksiENDAnda tulis atau tidak, dalam kasus ini, tidak ada efeknya...
Program selengkapnya...
1: berkas LED02.BAS2: $regfile = "m16def.dat"
3: $crystal = 11059200
4:
5: Config Portb = Output
6:
7: Port_led Alias Portb
8:
9: Do10: Port_led = 255
11: Waitms 300
12: Port_led = 0
13: Waitms 300
14: Loop
2.4. Latihan-3: Animasi LED
Sekarang kita tingkatkan latihan konsep luaran (output), masih menggunakan rangkaian yang sama,
sebagaimana ditunjukkan pada Gambar 2.1, membuat aplikasi animasi lampu berjalan
menggunakan 8 LED yang terhubung di PORTB.
Berikut ini program pertama (nanti saya berikan alternatif yang lebih pendek dan efisien)...
1: berkas LED03.BAS
2: $regfile = "m16def.dat"3: $crystal = 11059200
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
26/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 23
4:5: Config Portb = Output
6:
7: Port_led Alias Portb
8:
9: Do
10: Port_led = &B00000001
11: Waitms 300
12: Port_led = &B00000010
13: Waitms 30014: Port_led = &B00000100
15: Waitms 300
16: Port_led = &B00001000
17: Waitms 300
18: Port_led = &B00010000
19: Waitms 300
20: Port_led = &B00100000
21: Waitms 300
22: Port_led = &B01000000
23: Waitms 300
24: Port_led = &B10000000
25: Waitms 300
26: Loop
Maksudnya? Konsep programnya sama dengan program yang terakhir (LED02.BAS), hanya saja
terdapat 8 data yang harus dikeluarkan melalui PORTB (yang tersambung dengan LED) dan diberi
jeda 300 milidetik (baris 11, 13, 15, 17, 19, 21, 32 dan 25) secara bergantian, sehingga diperoleh
kesan animasi LED (perhatikan pada data-data tersebut dan logika 1-nya).
2.5. Latihan-4: Animasi LED Alternatif ProgramTahukah Anda, bahwa program animasi tersebut terlalu panjang dituliskan. Ada cara lain untuk
mengirimkan data seperti itu, perhatikan bahwa logika 1 terlihat digeser kekiri, kemudian sampai
diujung kiri (PORT_LED=&B10000000), kembali lagi dari kanan (PORT_LED=&B00000001).
Untungnya, BASCOM AVR memiliki instruksi ROTATE yang dapat digunakan untuk menggeser (data)
bit ke kanan atau ke kiri dan jika sudah sampai ujung kanan atau ujung kiri (tergantung
penggeserannya) data akan dirotasikan. Perhatikan program alternatif selengkapnya berikut ini...
1: berkas LED04.BAS2: $regfile = "m16def.dat"
3: $crystal = 11059200
4:
5: Config Portb = Output
6: Port_led Alias Portb
7: Dim Data_led As Byte
8: Data_led = 1
9:
10: Do
11: Port_led = Data_led12: Waitms 50
13: Rotate Data_led , Left , 1
14: Loop
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
27/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 24
ROTATE DATA_LED, LEFT, 1 (baris 13) artinya menggeser-putar (merotasi) data di variabel
DATA_LEDke kiri (LEFT) sebanyak 1 bit.
2.6. Latihan-5: Animasi LED Lainnya
Nach sekarang apa yang dilakukan program berikut ini, perhatikan penggunaan FOR..NEXT (pada
baris 13-17 dan baris 19-23) untuk melakukan pengulangan secara spesifik beberapa kali (lihatkembali penjelasan di Bagian-1 handout ini tentangFOR...NEXT)....
1: berkas LED05.BAS2: $regfile = "m16def.dat"
3: $crystal = 11059200
4:
5: Config Portb = Output
6: Port_led Alias Portb
7: Dim Data_led As Byte , X As Byte
8:
9: Data_led = &B00000011
10:11: Do12:
13: For X = 1 To 6
14: Port_led = Data_led
15: Waitms 50
16: Rotate Data_led , Left , 1
17: Next X
18:
19: For X = 1 To 6
20: Port_led = Data_led
21: Waitms 50
22: Rotate Data_led , Right , 123: Next X
24:
25: Loop
2.7. Latihan-6: Penerjemahan Penekanan PushButtonpada Tampilan LED
Kali ini kita akan melakukan latihan dengan memanfaatkan pushbutton dan LED menggunakan
rangkaian yang ditunjukkan pada Gambar 2.2. Perhatikan untuk rangkaian LED-nya sama seperti
Gambar 2.1. Untuk rangkaian tombol-tekan atau pushbutton digunakan konfigurasi Aktif Rendah,
artinya saat tombol tidak ditekan, PIN yang bersangkutan akan bernilai HIGH atau 1 dan saat ditekan
akan terbaca logika LOW atau 0, karena terhubung semuanya dengan GND.
Program pada Latihan ini akan digunakan untuk menerjemahkan penekanan tombol, dengan
ketentuan sebagai berikut (baris 20-25 pada program):
Jika ditekan tombol pada PORTD.0 (port D pin 0) atau PORTD terbaca &B11111110 atau
&HFE, maka separo pertama dari LED akan dinyalakan dengan memberikan nilai
&B00001111atau&H0Fpada PORTB;
Jika ditekan tombol pada PORTD.1 (port d pin 1) atau PORTD terbaca &B11111101 atau
&HFD, maka separo kedua dari LED akan dinyalakan, dengan memberikan nilai &B11110000
atau&HF0pada PORTB;
Jika ditekan tombol pada PORTD.2 (port d pin 2) atau PORTD terbaca &B11111011 atau
&HFB, maka LED 0, 2, 4 dan 6 akan dinyalakan, dengan memberikan nilai&B01010101atau
&H55pada PORTB;
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
28/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 25
Jika ditekan tombol pada PORTD.3 (port d pin 3) atau PORTD terbaca &B11110111 atau
&HF7, maka LED 1, 3, 5 dan 7 akan dinyalakan, dengan memberikan nilai &B10101010atau
&HAApada PORTB;
Gambar 2.2. Sama seperti Gambar 2.1
Program selengkapnya, perhatikan perintahSELECT-CASEyang digunakan untuk menerjemahkan arti
dari masing-masing penekanan tombol sebagaimana telah dijelaskan sebelumnya:
1: ' program PUSH01.BAS2: '3: $regfile = "m16def.dat"
4: $crystal = 110592005:6: Dim X As Byte7:8: Config Portb = Output
9: Config Portd = Input10: Hasil Alias Portb11: Masukan Alias Pind12:13: Portd = 255
14:15: ' menghidupkan LED berdasar penekanan push button di PORTD16:17: Do18:
19: X = Masukan20: Select Case X21: Case &B11111011 : Hasil = &B01010101 ' pushbuton di portd.222: Case &B11110111 : Hasil = &B10101010 ' pushbuton di portd.323: End Select
24:25: Loop
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
29/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 26
2.8. Latihan-7: Pushbuttondan Animasi LED
Masih menggunakan rangkaian seperti ditunjukkan pada Gambar 2.2, kali ini digunakan 2 (dua)
tombol untuk mengubah arah animasi LED yang terpasang pada PORTB, silahkan mencermati dan
memahami program selengkapnya berikut ini...
' program PUSH02.BAS'$regfile = "m16def.dat"$crystal = 11059200
Dim X As Byte , Animasi As Byte , Status As Bit
Config Portb = OutputConfig Portd = Input
Hasil Alias PortbMasukan Alias Pind
Portd = 255
Animasi = &H01
' animasi LED berdasar penekanan push button di PORTD
Do
X = Masukan Select Case X Case &B11111011 : Status = 0 ' pushbuton di portd.2 Case &B11110111 : Status = 1 ' pushbuton di portd.3 End Select
If Status = 0 Then
Rotate Animasi , Left Else Rotate Animasi , Right
End If
Hasil = Animasi
Waitms 200
Loop
Jika Anda jeli, program ini akan menampilkan animasi LED berdasar penekanan tombol atau
pushbutton pada PORTD.2 atau PORTD.3.
- Selesai Modul 2 -
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
30/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 27
Modul-3: Timer, Counter dan PWM
3.1. Pendahuluan Timer dan Counter
Mikrokontroler AVR ATMega16 (juga seri lainnya) memiliki tiga macam timer/counter(pewaktu/pencacah), yaitu Timer0, Timer1 dan Timer2:
Timer0dan Timer2merupakan timer 8-bit (bisa mencacah dari 0 sampai dengan 255);
Timer1merupakan timer 16-bit (bisa mencacah dari 0 sampai dengna 65535).
Sifat dasar dari timer/counter ini sama seperti RAM yang bisa dibaca dan diulisi, namun menawarkan
fasilitas yang lebih dari sekedar baca/tulis:
Timer melakukan pencacahan bisa secara otomatis (makanya disebut sebagai pewaktu).
Cukup Anda berikan perintah untuk mengaktifkan (START TIMERn) atau menghentikan
(STOP TIMERn), jika melibatkan interupsi bisa digunakan instruksi ENABLE TIMERn atau
DISABLE TIMERn(n diganti angka 0, 1 atau 2); Anda tidak perlu setiap saat memeriksa apakah pencacahan sudah overflow (berlebihan)
atau kejadian saat timer mencapai nilai maksimum, diberikan clockdan kembali menjadi nol
lagi (atau nilai apa saja yang kita inginkan reload value), karena masing-masing timer
dilengkapi interupsi yang aktif saat terjadi overflow;
Sumber detak ke timer bisa diperoleh secara internal (sebagai pewaktu) maupun eksternal
(sebagai pencacah), masing-masing menggunakan instruksi CONFIG TIMERn = TIMER atau
CONFIG TIMERn = COUNTER;
Saat diberikan detak dari osilator internal bisa dipilih laju detak-nya sesuai dengan RC atau
Crystal atau bahkan lebih lambat dengan cara membagi detak atau clock dengan angka 8,
64, 256 atau 1024 (angka-angka ini dinamakan sebagai prescaler). Misalnya, jika PRESCALE =
64, menggunakan frekuensi krsital 8MHz akan diperoleh (8.000.000/64) 125.000 clock perdetik-nya, atau jika PRESCALE = 1024 akan diperoleh (8.000.000/1024) 7.812 clock per detik.
Timer tidak harus melakukan pencacahan dari nol, Anda bisa memberikan nilai awal yang
bukan nol, yang dikenal dengan nilai reload.
3.2. Tentang Timer0 dan Timer2
Pada Gambar 3.1 ditunjukkan diagram blok dari Timer0/Timer2 dengan lebar 8-bit (angka n pada
gambar tersebut diganti dengan angka 0 atau 1, misalnya TCCRn menjadi TCCR0, dan seterusnya).
Sebagaimana ditunjukkan pada Gambar 3.1 dan diperjelas dalam Gambar 3.2, masukan detak atau
clock untuk Timer0 bisa diperoleh dari internal, melalui jalur Prescaler, atau eksternal, melalui jalur
T0yang harus melalui Edge Detectorterlebih dahulu, yaitu sebuah unit yang bisa mendeteksi pulsadetak atau clock saat FALLING(1 ke 0) atau RISING(0 ke 1).
Selanjutnya sinyal CLKT0atau CLKT2(baik dari internal maupun eksternal) ini diumpankan ke Control
Logic. Control Logic inilah yang kemudian memberikan instruksi operasional ke Timer0/Timer2,
apakah akan memberikan detak (count) menaikkan atau menurunkan isi (direction) dari register
Timer0/Timer2 yaitu TCNT0/TCNT2, membersihkan isinya (clear).
Jika TCNT0/TCNT2 sudah mencapai 0x00, maka akan diberikan sinya BOTTOM, sebaliknya, jika
TCNT0/TCNT2mencapai nilai maksimum, 0xFF, atau nilai tertentu, maka akan diberikan sinyal TOP
ke Control Logic.
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
31/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 28
Gambar 3.1. Diagram blok Pewaktu/Pencacah 8-bit
Pada saat TCNT0/TCNT2 = OCR0/OCR2maka juga akan berikan sinyal TOPuntuk memberitahukan
bahwa pencacahan Timer0 sudah mencapai angka tertentu, dan tentu saja bisa memberikan
interupsi yang terkait, yaitu OCF0/OCF2. Demikian juga, jika terjadi overflow (saat terjadinya
limpahan karena nilai Timer0 yang sudah maksimal di-clock menjadi kembali nol lagi), maka
diangkitkan interupsi overflowmelalui TOV0/TOV2.
3.3. Timer0, Timer2 dan BASCOM AVR
Sebelum Anda gunakan, lakukan inisialisasi pada Timer0/Timer2 terlebih dahulu. Inisialisasi tersebut
bisa dilakukan dengan instruksi-instruksi BASCOM AVR sebagai berikut:
CONFIG TIMERn = TIMER, PRESCALE= 1|8|64|256|1024
CONFIG TIMERn = COUNTER, PRESCALE= 1|8|64|256|1024,EDGE=RISING/FALLING, CLEAR TIMER = 1|0
Gambar 3.2. Diagram blok unit Pencacah 8-bit
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
32/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 29
Penjelasan
CONFIG TIMERn = TIMER, artinya Timer0/Timer2 mendapatkan sumber detak atau clock
secara internal:
o PRESCALE= 1|8|64|256|1024, artinya sumber detak internal tersebut mo dibagi
berapa? 1, 8, 64, 256 atau 1024 untuk mendapatkan sumber detak yang lebih
lambat.
CONFIG TIMERn = COUNTER, artinya Timer0/Timer2 mendapatkan sumber clock-nya dari
eksternal (melalui pin T0):
o EDGE=RISING/FALLING, kapan dilakukan aksi detak, apakah saat RISING, yaitu dari 0
ke 1, atau saat FALLING, yaitu dari 1 ke 0;
o PRESCALE= 1|8|64|256|1024, sama penjelasannya...
o CLEAR TIMER = 1|0, digunakan untuk memilih
3.4. Tentang Timer1
Timer1 merupakan pewaktu 16-bit, diagram blok-nya ditunjukkan pada Gambar 3.3, dan jika
diperhatikan, fasilitas atau fitur-nya lebih lengkap dibandingkan Timer0 atau Timer2. Fitur tambahantersebut antara lain, Timer1 memiliki 2 (dua) buah pembanding OCR1Adan OCR1B, yang masing-
masing bisa mengaktifkan interupsi OC1Adan OC1B.
Gambar 3.3. Diagram blok Pewaktu/Pencacah 16-bit
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
33/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 30
Sumber detak-nya sama seperti Timer0 dan Timer2, bisa dari dalam (internal), dari dalam dengan
dibagi prescaler atau dari luar melalui pin T1. Detilnya ditunjukkan pada Gambar 3.4. Perhatikan
bahwa register timernya terbagi atas TCNT1H dan TCNT1L yang masing-masing panjangnya 8-bit,
total 16-bit.
Gambar 3.4. Diagram blok Unit Pencacah 16-bit
3.5. Latihan-1: Menggunakan Timer1
Kali ini kita akan membuat sebuah jam digital yang ditampilkan melalui 2x7segmen menggunakan
rangkaian yang ditunjukkan pada Gambar 3.5 (format Proteus 7.4 SP3). 7segmen yang digunakan
sudah terpadu dengan IC BCD to 7Segmen, sehingga jika masukan BCD adalah 0 sampai dengan 9,
maka keluarnya tampilan 7segmen juga 0 sampai dengan 9, sungguh mudah dan menyenangkan.
Anda bisa membeli IC 74LS47 (CA) atau 74LS48 (CC) untuk mengkonversi data BCD menjadi data-
data untuk 7-segmen, sebagaimana diagram pin untuk ditunjukkan pada Gambar 3.6.
Gambar 3.5. Rangkaian jam digital menggunakan ATMega16
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
34/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 31
Gambar 3.6. 74LS47 (kiri) dan 74LS48 (kanan)
Karena hanya menggunakan dua digit, selama program berjalan pada ATMega16 hanya ditampilkan
detik-nya saja, untuk menampilkan menit dan jam masing-masing bisa menggunakan tombol MENIT
dan JAM (perhatikan Gambar 3.3), yang masing-masing terhubungkan ke PORTD.0 dan PORTD.1.
Sedangkan untuk mereset jam, bisa digunakan tombol RESET JAMyang terhubungkan ke PORTD.7.
Okey, mari kita mulai langkah demi langkah...
Seperti biasanya, diawali dengan mendeklarasikan pustaka, kristal dan 5 variabel yang akan
digunakan dalam program kita (baris 6 sampai dengan 10), antara lain:
TEMPdigunakan untuk menyimpan data jam, menit atau detik sementara;
SECONDS, sudah jelas digunakan untuk menyimpan data detik;
MINUTES, untuk menyimpan data menit;
HOURS, untuk menyimpan data jam, dan
KEYS, untuk pembacaan PORTD, apakah ada tombol yang ditekan, sehingga program bisa
melakukan proses sesuai dengan tombol yang ditekan.
1: ' program jam.bas2: '
3: $regfile = "m16def.dat"4: $crystal = 11059200
5:6: Dim Temp As Byte
7: Dim Seconds As Byte8: Dim Minutes As Byte9: Dim Hours As Byte
10: Dim Keys As Byte
11:
Selanjutnya kita tetapkan sebuah konstanta untuk melakukan penundaan 1 detik tepat! Konstantaini merupakan nilai pembanding yang nantinya disimpan pada OCR1H dan OCR1L, sehingga saat
Timer1, yaitu TCNT1H dan TCNT1L, sama isinya masing-masing dengan OCR1H dan OCR1L, maka
akan terjadi interupsi MATCH COMPARE.
Untuk mendapatkan nilai konstanta ini, silahkan gunakan program AvrTimer1Calc.EXE, kemudian
masukkan parameter-parameter seperti ditunjukkan pada Gambar 3.7, yaitu ditemukan nilai isi
ulangnya adalah 34.288, supaya terjadi 31.250 detak yang setara dengan 1 detik.
Nilai 34.288 ini yang kemudian dituliskan dalam program (baris 12), kemudian diikuti dengan
mendeklarasikan fungsi dari timer1 sebagai pewaktu (TIMER) dengan prescaler sebesar 256 (baris
14). Sedangkan dua register untuk pembanding, yaitu OCR1Hdan OCR1Lmasing-masing diisi dengan
bagian HIGHdan LOWdari konstanta RELOAD(=34.288), perhatikan baris 16 dan 17:
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
35/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 32
12: Const Reload = 34286 'periode 1 detik13:
14: Config Timer1 = Timer , Prescale = 256
15:
16: Ocr1ah = High(reload)
17: Ocr1al = Low(reload) ' nilai reload utk timer1
18:
Langkah selanjutnya adalah mengatur agar terjadi interupsi karena proses pembandingan (telah
terjadi kecocokan data antara isi Timer1 TCNT1dengan data pembanding OCR1AH dan OCR1AL).
Untuk itu kita perlu mengatur isi register Timer/Counter1 Control atau TCCR1A, sebagaimana
ditunjukkan pada Gambar 3.8.
Gambar 3.7. Program AVR Timer1 Calculator
Gambar 3.8. Register TCCR1A
Arti dari masing-masing bit TCCR1A(Gambar 3.8) sebagai berikut:
Bit 7:6 COM1A1:0: Compare Output Mode for Channel A
Bit 5:4 COM1B1:0: Compare Output Mode for Channel B
o Masing-masing pasangan bit ini (bit 7-6 dan bit 5-4) digunakan untuk mengatur pin
OC1A dan OC1B melalui Tabel 4.1
Bit 3 FOC1A: Force Output Compare for Channel A
Bit 2 FOC1B: Force Output Compare for Channel B
o Untuk memaksa terjadinya Compare Match pada masing-masing kanal (A atau B)
dengan cara memberikan logika 1 pada masing-masing tersebut.
Bit 1:0 WGM11:0: Waveform Generation Mode
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
36/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 33
o Mengontrol sekuens pencacahan pada pencacah, sebagaimana ditunjukkan pada
Tabel 4.2
Tabel 4.1. Compare Output Mode, Non PWM
COM1A1/
COM1B1
COM1A0/
COM1B0
Keterangan
0 0 Operasi port normal, OC1A/OC1B tidak dihubungkan ke pin PD4 dan PD5
0 1 Togel OC1A/OC1B pada saat terjadi Compare Match
1 0 Reset OC1A/OC1B pada saat terjadi Compare Match
1 1 Set OC1A/OC1B pada saat terjadi Compare Match
Tabel 4.2. Waveform Generation Mode Bit Description
Dalam kasus kita, register TCCR1A kita isi dengan nol, kemudian kita cek juga TCCR1Bsebagaimana ditunjukkan pada Gambar 3.9.
Gambar 3.9. Register TCCR1B
Arti dari masing-masing bit TCCR1Bsebagai berikut:
Bit 7 ICNC1: Input Capture Noise Canceler
o Untuk aktivasi masukan Capture Noise Canceleratau CNC.
Bit 6 ICES1: Input Capture Edge Select
o Untuk memilih masukan Capture Edge Selectjenis falling (0) atau rising (1).
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
37/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 34
Bit 5 Reserved Bit
o Cadangan, tidak digunakan sementara, untuk pengembangan ATMega16 di masa
mendatang.
Bit 4:3 WGM13:2: Waveform Generation Mode
o Lihat Tabel 4.2
Bit 2:0 CS12:0: Clock Selecto Lihat Tabel 4.3
Tabel 4.3. Clock Select Bit Description
Dalam kasus latihan ini, kita set TCCR1B.3 pada bagian WGM12-nya supaya Timer1 akan mereset
setelah terjadi Compare Match, perhatikan baris 19 dan 20:
19: Tccr1a = 0 ' diskonek OC1A dari T/C1
20: Set Tccr1b.3 ' reset T/C1 setelah compare21:
Selanjutnya masing-masing PORTA dan PORTD juga kita inisialisasi masing-masing sebagai luaran dan
masukan, juga menyiapkan PORTD untuk masukan (baris 24):
22: Config Porta = Output ' porta untuk tampilan
23: Config Portd = Input ' portd untuk tombol24: Portd = 255 ' semua luaran HIGH
25:
Agar setiap terjadi interupsi Compare Match pada Timer1 dilakukan proses pada bagian tertentu di
dalam program maka kita definisikan sebuah label TIMER1_ISR:
26: On Compare1a Timer1_isr27:
Okey, sekarang kita aktifkan interupsi pembandingnya (baris 26) dan interupsi global-nya (baris 27),
perlu diketahui bahwa interupsi adalah sebuah proses yang menunda program yang sedang berjalan
untuk mengerjakan sesuatu yang begitu penting, kemudian setelah selesai akan kembali
mengerjakan pekerjaan yang sebelumnya ditinggalkan:
28: Enable Compare1a ' aktifkan interupsi timer compare
29: Enable Interrupts ' aktifkan seluruh interupsi30:
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
38/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 35
Sampai disini sekarang semua sudah siap, sudah ready! Selanjutnya adalah membuat program untuk
rutinitas jam digital sebagaimana kita rencanakan. Intinya adalah selalu menampilkan detik (baris 50)
sambil terus menerus memeriksa tombol pada PORTD (baris 32), apakah ditekan tombol RESET,
berarti mereset jam, menit dan detik (baris 33 sampai dengan 37), atau tombol JAM, artinya
ditampilkan data jam (baris 48), atau tombol MENIT, artinya ditampilkan tombol menit (baris 49).Serta tidak lupa untuk selalu meng-update data-data detik (baris 38 sampai dengan 41), menit (baris
42 sampai dengan 45)dan jam (baris 46):
31: Do32: Keys = Pind
33: If Keys = &H7F Then ' reset jam
34: Seconds = 035: Minutes = 0
36: Hours = 037: End If
38: If Seconds = 60 Then ' jika detik sudah overflow
39: Seconds = 040: Incr Minutes41: End If
42: If Minutes = 60 Then ' jika menit sudah overflow
43: Minutes = 044: Incr Hours
45: End If46: If Hours = 24 Then Hours = 0
47: Temp = Makebcd(seconds)
48: If Keys = &HFE Then Temp = Makebcd(minutes)49: If Keys = &HFD Then Temp = Makebcd(hours) tampilkan jam
50: Porta = Temp
51: Loop52:
53: End
Ingat bahwa interupsi Timer1 karena Compare Match terjadi setiap 1 detik sekali (tepat!) dan yang
dilakukan adalah (selalu) menaikkan data detik atau SECONDS:
54: Timer1_isr:55: Incr Seconds
56: Return
Program selengkapnya (file TIMER3.BAS) sebagai berikut:
1: ' program jam.bas
2: '3: $regfile = "m16def.dat"4: $crystal = 110592005:
6: Dim Temp As Byte7: Dim Seconds As Byte8: Dim Minutes As Byte9: Dim Hours As Byte10: Dim Keys As Byte
11:12: Const Reload = 34286 ' periode 1 detik
13:14: Config Timer1 = Timer , Prescale = 256
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
39/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 36
15:16: Ocr1ah = High(reload)
17: Ocr1al = Low(reload) ' nilai reload utk timer118:19: Tccr1a = 0 ' diskonek OC1A dari T/C120: Set Tccr1b.3 ' reset T/C1 setelah compare
21:22: Config Porta = Output ' porta untuk tampilan23: Config Portd = Input ' portd untuk tombol24: Portd = 255 ' semua luaran HIGH25:26: On Compare1a Timer1_isr ' lompat ke timer1_isr saat interupsi
27:28: Enable Compare1a ' aktifkan interupsi timer compare29: Enable Interrupts ' aktifkan seluruh interupsi30:31: Do
32: Keys = Pind33: If Keys = &H7F Then ' reset jam
34: Seconds = 035: Minutes = 036: Hours = 0
37: End If38: If Seconds = 60 Then ' jika detik sudah overflow39: Seconds = 040: Incr Minutes41: End If
42: If Minutes = 60 Then ' jika menit sudah overflow43: Minutes = 044: Incr Hours45: End If46: If Hours = 24 Then Hours = 0
47: Temp = Makebcd(seconds)48: If Keys = &HFE Then Temp = Makebcd(minutes) ' tampilkan menit49: If Keys = &HFD Then Temp = Makebcd(hours) ' tampilkan jam50: Porta = Temp51: Loop
52:53: End54:55: Timer1_isr:56: Incr Seconds
57: Return
3.6. Latihan-2: Menggunakan Timer0
Kali ini kita akan berlatih menggunakan Timer0 untuk melakukan penundaan selama 50 milidetik.Keterangan tentang Timer0 sebagaimana telah dijelaskan di awal modul. Gunakan rangkaian Proteus
7.4 SP3 untuk melakukan percobaan, sebagaimana ditunjukkan pada Gambar 3.10.
Rangkaian (Gambar 3.10) ini sangat sederhana, karena intinya hanya dilihat hasil luaran pada
PORTB.0 atau PB0, perhatikan catatan pada Gambar 3.10 tersebut. Jangan lupa untuk melakukan
setingan kristal pada jendela yang ditunjukkan pada Gambar 3.11, pada pilihan CKSEL Fusesdipilih
Int. RC 4 MHz.
Baiklah, seperti biasa, program diawali dengan deklarasi pustaka ATMega16 dan kristal yang
digunakan (yaitu 4 MHz, bukan 8 MHz). Kemudian dilanjutkan dengan menuliskan konstanta reload-
nya agar diperoleh penundaan 50 milidetik atau dengan kata lain, terjadi overflow(bukan Compare
Match) setiap 50 milidetik.
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
40/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 37
Untuk menghitung konstanta reload, gunakan program AvrTimer0Calc.exe, kemudian isikan
frekuensi kristal 4.000.000 Hz dan periode Timer0-nya adalah 50 milidetik atau yang mendekati,
contoh pengaturan ditunjukkan pada Gambar 3.12. Ditemukan nilai 195 clock agar terjadi delay atau
penundaan 50 milidetik atau mendekati 50 milidetik (49.92 milidetik), atau dengan kata lain, nilai
reload kita isi 61 (baris 6), perhatikan Gambar 3.12.
Gambar 3.10. Rangkaian untuk Latihan Timer0
Gambar 3.11. Edit Component
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
41/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 38
Gambar 3.12. Program AVR Timer0 Calculator
Tidak lupa juga mendefinisikan operasional Timer0 sebagai pewaktu dengan prescaler sebesar 1024
(baris 8):
1: ' program kedipan.bas
2: '3: $regfile = "m16def.dat"
4: $crystal = 11059200
5:6: Const Reload = 61 ' reload untuk 50ms
7:
8: Config Timer0 = Timer , Prescale = 1024
9:
Langkah berikutnya adalah memberitahukan bahwa jika terjadi interupsi Timer0, yang dikerjakan
adalah mulai label TIMER0_ISR(baris 10), diikuti dengan mendefinisikan PORTB sebagai luaran (baris
12), mengaktifkan interupsi overflow Timer0 (baris 14) dan mengaktifkan interupsi global (baris 15):
10: On Timer0 Timer0_isr ' timer0 overflow interrupt11:
12: Config Portb = Output
13:
14: Enable Timer0
15: Enable Interrupts
16:
Selanjutnya program tidak melakukan apapun (baris 17 19). Jika terjadi interupsi Timer0, karena
sudah terjadi 195 kali clock atau setara dengan penundaan 50 milidetik, akan dikerjakan interupsi
yaitu melompat ke label TIMER0_ISR atau baris 23, dan seterusnya, yang diawali dengan mengisi
ulang TIMER0 dengan nilai reload (baris 24) dan PORTB.0 akan berlogika 1 dan 0 secara
bergantian, menggunakan instruksi TOGGLE.
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
42/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 39
17: Do18: NOP19: Loop
20:21: End
22:
23: Timer0_isr:24: Load Timer0 , Reload ' isi kembali timer0 dg reload
25: Portb.0 = Not Pinb.0 ' togel
26: Return
3.7. Latihan-3: Menggunakan Counter0
Kali ini interupsi Timer0 akan terjadi pada saat dilakukan 5 kali penekanan tombol, dengan demikian
Timer0 kita konfigurasi menjadi COUNTER(baris 9) dan pendeteksian clok-nya pada saat 1 ke 0 atau
FALLING (baris 9) dan jangan lupa, isi dulu TIMER0atau TCNT0dengan nilai 5 (atau dalam hal ini
disimpan dalam variabel TICKS, perhatikan baris 10 dan 6):
1: ' program counter0.bas2: '
3: $regfile = "m16def.dat"
4: $crystal = 110592005:
6: Const Ticks = 57: Dim Count As Byte8:
9: Config Timer0 = Counter , Edge = Falling10: Load Timer0 , Ticks
11:
12: On Timer0 Timer0_isr13:
Jangan lupa juga mengarahkan interupsi (overflow) Timer0 ke TIMER0_ISR(baris 12), sebagaimana
ditunjukkan pada baris 24-27:
14: Config Portc = Output15: Reset Ddrb.0 ' portb sebagai masukan cacah pulsa16:
17: Enable Timer018: Enable Interrupts
19:
20: Do21: Portc = Count
22: Loop23:
24: Timer0_isr: ' lakukan interupsi jika 5 kali cacah
25: Load Timer0 , Ticks26: Incr Count
27: Return
PORTC didefinisikan sebagai luaran (baris 14), PB0 digunakan sebagai masukan tombol sehingga
DDRB.0-nya diberi logika nol (atau sebagai luaran, baris 15). PORTC selalu menampilkan isi dari
variabel COUNT, yaitu nilainya akan selalu naik setiap 5 kali penekanan tombol pada PB0 atausebagai masukan detak ke Timer0 atau T0.
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
43/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 40
Rangkaian yang digunakan pada latihan ini dtiunjukkan pada Gambar 3.13 menggunakan Proteus 7.4
SP3.
Gambar 3.13. Rangkaian untuk Latihan Counter0
Program selengkapnya:
1: ' program counter0.bas2: '
3: $regfile = "m16def.dat"4: $crystal = 11059200
5:6: Const Ticks = 5
7: Dim Count As Byte8:9: Config Timer0 = Counter , Edge = Falling
10: Load Timer0 , Ticks11:
12: On Timer0 Timer0_isr
13:14: Config Portc = Output15: Reset Ddrb.0 ' portb sebagai masukan cacah pulsa
16:
17: Enable Timer018: Enable Interrupts
19:20: Do
21: Portc = Count
22: Loop23:
24: Timer0_isr: ' lakukan interupsi jika 5 kali cacah
25: Load Timer0 , Ticks26: Incr Count
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
44/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 41
27: Return
3.8. Latihan-4: Menggunakan Fasilitas Capture pada Timer1
Fasilitas capture pada Timer1 memberikan fasilitas kepada kita untuk selalu bisa mengetahu nilai
pewaktu atau pencacah melalui register ICRn(perhatikan Gambar 3.3, karena menggunakan Timer1
maka nama registernya adalah ICR1, karena 16-bit dan akan ditampilkan melalui PORTCyang 8 bit,maka hanya digunakan separo yang bawah atau ICR1L).
Rangkaian yang digunakan ditunjukkan pada Gambar 3.14. perhatikan bahwa masukan clock melalui
T1atau PB1sedangkan masukan aktivasi capture melalui ICP1atau PD6.
Program selengkapnya:
1: ' program capture1.bas2: '
3: $regfile = "m16def.dat"
4: $crystal = 110592
5:6: Config Timer1 = Counter , Edge = Falling , Noise Cancel = 1 ,
Capture Edge = Rising7:
8: Config Portc = Output ' portb.1 disambung dg portd.49: Config Pinb.1 = Input ' agar dicapture setiap tekan tombol
10:11: Do
12: Portc = Icr1l ' tampilkan hasil counter di portc13: Loop
14:
15: End
Gambar 3.14. Latihan untuk Fasilitas Capture pada Timer1
Penjelasan program:
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
45/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 42
Timer1 dikonfigurasi sebagai COUNTER, dengan masukan clock aktif pada saat transisi 1 ke 0
atau FALLING(baris 6). Noise canceller diaktifkan dengan instruksi NOISE CANCEL = 1, dan
capture terjadi pada saat transisi 1 ke 0 atau RISING(baris 7);
Perhatian! Baris 6 dan 7 harus ditulis dalam satu baris!
PORTC selalu menampilkan isi register ICR1L(baris 12-14).
3.9. Latihan-5: Tentang PWM (Pulse Widt h Modulat ion)
Untuk mengendalikan kecerahan lampu LED atau kecepatan motor DC bisa dilakukan dengan
menaikkan atau menurunkan tegangan, namun metode ini banyak kekurangannya, solusi yang baik
adalah dengan menghidupkan dan mematikan secara cepat. Istilahnya dengan memberikan pulsa
PWMatau Pulse Widt h Modulat ion, perhatikan contoh-nya pada Gambar 3.15 sampai dengan 4.17.
Gambar 3.15
Jika pulsa sebagaimana ditunjukkan pada Gambar 415 diberikan ke LED atau motor DC, maka LEDcerah 50% atau kecepatan motornya 50% dari kecepatan maksimum. Dikatakan bahwa pulsa PWM
sebagaimana ditunjukkan pada Gambar 3.15 memiliki duty cycle50%, artinya lebar pulsa HIGH dan
LOW-nya sama.
Gambar 3.16
Sedangkan jika LED atau motor DC diberikan pulsa dengan duty cycle75%, sebagaimana ditunjukkan
pada Gambar 3.16, maka kecerahan LED menjadi begitu juga dengan kecepatan Motor DC-nya.
Contoh lain ditunjukkan pada Gambar 3.17 untuk duty cycle sebesar 25%, atau Motor DC-nya akanmenurun kecepatannya hingga 25% dari kecepatan maksimum.
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
46/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 43
Gambar 3.17
Pewaktu/pencacah AVR memiliki fasilitas mode kerja PWM, frekuensi-nya sama tetapi duty cycle-nya
berbeda dan bisa diatur, perhatikan contoh-contoh pada gambar-gambar sebelumnya, semuanya
memiliki periode 2 milidetik tetapi dengan duty cycle yang berbeda-beda (masing-masing 50%, 75%
dan 25%).
ATMega16 memiliki luaran PWM yang tersambung ke Timer1 melalui:
OC1Aatau PORTD.4, dan
OC1Batau PORTD.5
Masing-masing luaran PWM tersebut memiliki pengaturan yang terpisah (masing-masing duty cycle-
nya bisa berbeda) walaupun akan bekerja dengan frekuensi yang sama. Tiga mode PWM yang
dibahas dalam modul ini adalah mode 8, 9 dan 10-bit:
Dalam mode 8 bit, pencacah akan mencacah dari 0 ke 255 kemudian kembali turun lagi ke 0;
Dalam mode 9 bit, pencacah akan mencacah dari 0 ke 511 kemudian kembali turun lagi ke 0;
Dalam mode 10 bit, pencacah akan mencacah dari 0 ke 1023 kemudian kembali turun lagi ke
0;
Perhatikan contoh atau ilustrasi mode 8 bit yang ditunjukkan pada Gambar 3.18. Kita harus
menentukan sebuah titik antara 0 sampai dengan 255 yang nantinya digunakan untuk merubah
luaran dari HIGH menjadi LOW. Jika nilainya, misalnya, kita 100, maka luaran OC1A yang melalui
PORTD.5 akan berubah dari HIGH (logika 1) menjadi LOW (logika 0) sebagaimana ditunjukkan pada
Gambar 3.19.
Jika untuk OCR1B diberi nilai 10, maka perbandingan antara 100 pada OC1A dan 10 pada OC1B
ditunjukkan pada Gambar 3.20.
Gambar 3.18
-
7/22/2019 Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR
47/104
Hak Cipta (c) 2010 pada Penulis, Agfianto Eko Putra
Hal. 4