Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR

download Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR

of 104

Transcript of Mudah Pemrograman Mikrokontroller ATMEL AVR Dengan BASCOM AVR

  • 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