tutorial.pemrograman.mikrokontroler.avr v1.0

91
Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 1 FREE e-book v1.0 Tutorial Pemrograman Mikrokontroler AVR dengan WinAVR GCC (ATMega16/32/8535) http://klikdisini.com/embedded oleh Agfianto Eko Putra ([email protected] ) dan Dhani Nugraha ([email protected] ) Dapatkan ebook ini gratis di http://klikdisini.com/embedded FREE EBOOK!! Jika Anda merasa ebook ini bermanfaat silahkan mendistribusikan ebook ini dengan GRATIS di website Anda atau dimana saja, selama tidak merubah isi yang ada di e-book ini. Terima kasih…

Upload: ahmad-sadam-syaerozi

Post on 22-Oct-2015

47 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 1

FREE e-book v1.0Tutorial Pemrograman Mikrokontroler AVRdengan WinAVR GCC (ATMega16/32/8535)

http://klikdisini.com/embedded

olehAgfianto Eko Putra ([email protected]) dan Dhani Nugraha ([email protected])

Dapatkan ebook ini gratis di http://klikdisini.com/embedded

FREE EBOOK!!Jika Anda merasa ebook ini bermanfaat silahkan mendistribusikan ebook ini dengan

GRATIS di website Anda atau dimana saja, selama tidak merubah isi yang ada di e-bookini. Terima kasih…

Page 2: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 2

Tutorial Pemrograman Mikrokontroler AVR denganWinAVR GCC (ATMega16/32/8535)

Disusun oleh:Agfianto Eko Putra – [email protected] dan

Dhani Nugraha - [email protected]

Daftar Isi1. Apakah Mikrokontroler itu? ...................................................................................................... 32. Pengetahuan Dasar Mikrokontroler AVR .................................................................................. 6

2.1. Pendahuluan ....................................................................................................................... 62.2. Memilih AVR “yang benar” ............................................................................................... 72.3. Ada apa dengan Mikrokontroler AVR ATMega16? ............................................................ 8

2.3.1. Ringkasan Fitur-fitur Mikrokontroler AVR ATMega16 ............................................... 82.3.2. Diagram Pin dan Diagram Blok Mikrokontroler AVR ATMega16 ............................... 92.3.3. Penjelasan Singkat Pin-pin pada Mikrokontroler AVR ATMega16 ............................ 10

3. Pengenalan Bahasa C untuk Mikrokontroler AVR ................................................................... 133.1. Struktur Penulisan Bahasa C ............................................................................................. 133.2. Tipe-tipe data dalam Bahasa C .......................................................................................... 143.3. Deklarasi Variabel dan Konstanta ..................................................................................... 143.4. Pernyataan ........................................................................................................................ 143.5. Fungsi ............................................................................................................................... 143.6. Pernyataan berkondisi dan Pengulangan............................................................................ 143.7. Operasi Logika dan Bilangan Biner .................................................................................. 153.8. Operasi Aritmetika............................................................................................................ 163.9. Pengulangan Terus-menerus atau Infinite Looping ............................................................ 16

4. Menggunakan AVR Studio dengan WinAVR GCC ................................................................. 175. Masukan/Luaran (I/O) pada Mikrokontroler AVR ................................................................... 22

5.1. Register DDRx ................................................................................................................. 235.2. Register PORTx ................................................................................................................ 235.3. Register PINx ................................................................................................................... 24

6. Latihan Tahap-I ....................................................................................................................... 256.1. Percobaan-1: LED berkedip-kedip .................................................................................... 256.2. Percobaan-2: Membunyikan buzzer! ................................................................................. 266.3. Percobaan-3: Aplikasi Pushbutton untuk ON/OFF LED .................................................... 28

7. Timer/Counter pada Mikrokontroler AVR ............................................................................... 297.1. Percobaan-4: Menggunakan Timer1 .................................................................................. 337.2. Percobaan-5: Menggunakan Timer2 .................................................................................. 357.3. Percobaan-6: Menggunakan Timer0 .................................................................................. 37

8. Komunikasi Serial ................................................................................................................... 388.1. Penghasil Detak - Clock Generator ................................................................................... 408.2. Mengirim Data – USART Transmitter .............................................................................. 448.3. Menerima Data – USART Receive ................................................................................... 468.4. Percobaan-7: Komunikasi Serial ....................................................................................... 47

9. Setelah Ini kemana? ................................................................................................................ 49Bonus-1: Hasil kompilasi Flowcode AVR 3.0 yang unik?! .............................................................. 51Bonus-2: FlowCode AVR 3.0: Aplikasi I/O Sederhana ................................................................... 55

Page 3: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 3

Bonus-3: FlowCode AVR 3.0: Aplikasi LCD 2x16 karakter ........................................................... 58Bonus-4: FlowCode AVR 3.0: Menghitung Sapi! ........................................................................... 62Bonus-5: Animasi LED Mikrokontroler ATMega32 dengan C dan Assembly ................................. 73Bonus-6: Aplikasi Pushbutton Mikrokontroler ATMega32 dengan Assembly ................................. 78Belajar Mikrokontroler AT89C51/52/55: Teori dan Aplikasi, Edisi 2 .............................................. 83PLC: Konsep, Pemrograman dan Aplikasi Omron Sysmac dan ZEN ............................................... 84Penapis Aktif Eltronika: Teori dan Praktek ..................................................................................... 85Belajar Bahasa Assembly dengan Emu8086 .................................................................................... 86Pengendalian Mobile Robot (MOBOT) dengan MOBOTSIM v1.0 ................................................. 87Pasti Ada Hikmahnya...! ................................................................................................................. 88

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 (CentralProcessing Unit);CPU tersebut sama-sama menjalankan program dari suatu lokasi atau tempat, biasanya dariROM (Read Only Memory)1 atau RAM (Random Access Memory)2;Sama-sama memiliki RAM yang digunakan untuk menyimpan data-data sementara atau yanglebih dikenal dengan variabel-variabel;Sama-sama memiliki beberapa luaran dan masukan (I/O) yang digunakan untuk melakukankomunikasi timbal-balik dengan dunia luar, melalui sensor (masukan) dan aktuator (luaran),perhatikan bagan yang ditunjukkan pada Gambar 1.

Gambar 1. Bagan masukan, pemrosesan hingga luaran

Lantas apa yang membedakan antara Mikrokontroler dengan Komputer atau Mikrokomputer? Begitumungkin pertanyaan yang ada di benak kita, saat kita membaca beberapa daftar kesamaan yangsudah 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!

1 Memori yang hanya bisa dibaca saja.2 Memori yang bisa dibaca juga bisa ditulisi.

Masukan-masukan

• sensor cahaya• sensor suhu• sensor

tekanan, dll

Pemroses

• uC AT89• uC AVR• uC PIC16F, dll

Luaran-luaran

• aktuator -motor

• relay• speaker, dll

Page 4: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 4

Berikut saya berikan kembali daftar kesamaan yang pernah kemukakan sebelumnya denganmenekankan pada perbedaan antara Mikrokontroler dan Mikrokomputer:

CPU pada sebuah Komputer berada eksternal dalam suatu sistem, sampai saat ini kecepatanoperasionalnya sudah mencapai lebih dari 2,5 GHz, sedangkan CPU pada Mikrokontrolerberada didalam (internal) sebuah chip, kecepatan kerja atau operasionalnya masih cukuprendah, dalam orde MHz (misalnya, 24 MHz, 40 MHz dan lain sebagainya). Kecepatan yangrelatif rendah ini sudah mencukupi untuk aplikasi-aplikasi berbasis mikrokontroler.Jika CPU pada mikrokomputer menjalankan program dalam ROM atau yang lebih dikenaldengan BIOS (Basic I/O System) pada saat awal dihidupkan, kemudian mengambil ataumenjalankan program yang tersimpan dalam hard disk. Sedangkan mikrokontroler sejak awalmenjalankan program yang tersimpan dalam ROM internal-nya (bisa berupa Mask ROMatau Flash PEROM atau 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 keukuran yang lebih besar dan berlokasi di luar CPU-nya, sedangkan RAM padamikrokontroler ada di dalam chip dan kapasitasnya rendah, misalnya 128 byte, 256 byte danseterusnya dan ukuran yang relatif kecil inipun dirasa cukup untuk aplikasi-aplikasimikrokontroler.Luaran dan masukan (I/O) pada mikrokomputer jauh lebih kompleks dibandingkan denganmikrokontroler, yang jauh lebih sederhana, selain itu, pada mikrokontroler akses keluaran danmasukan bisa per bit.Jika diamati lebih lanjut, bisa dikatakan bahwa Mikrokomputer atau Komputer merupakankomputer serbaguna atau general purpose computer, bisa dimanfaatkan untuk berbagaimacam aplikasi (atau perangkat lunak). Sedangkan mikrokontroler adalah special purposecomputer atau komputer untuk tujuan khusus, hanya satu macam aplikasi saja.

Perhatikan Gambar 2, agar Anda mendapatkan gambaran tentang mikrokontroler lebih jelas.

Gambar 2. Diagram Blok mikrokontroler (yang) disederhanakan

Page 5: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 5

ALU, Instruction Decoder, Accumulator dan Control Logic, sebagaimana ditunjukkan padaGambar 1.2, merupakan Otak-nya mikrokontroler yang bersangkutan. Jantungnya berasal dari detakOSC (lihat pada Gambar 1.2 sebelah kiri atas). Sedangkan di sekeliling ‘Otak’ terdapat berbagaimacam periferal seperti SFR (Special Function Register) yang bertugas menyimpan data-datasementara selama proses berlangsung). Instruction Decoder bertugas menerjemahkan setiapinstruksi yang ada di dalam Program Memory (hasil dari pemrograman yang kita buat sebelumnya).Hasil penerjemahan tersebut merupakan suatu operasi yang harus dikerjakan oleh ALU (ArithmeticLogic Unit), mungkin dengan bantuan memori sementara Accumulator yang kemudianmenghasilkan sinyal-sinyal kontrol ke seluruh periferal yang terkait melalui Control Logic.

Memori RAM atau RAM Memory bisa digunakan sebagai tempat penyimpan sementara, sedangkanSFR (Special Function Register) sebagian ada yang langsung berhubungan dengan I/O darimikrokontroler yang bersangkutan dan sebagian lain berhubungan dengan berbagai macamoperasional mikrokontroler.

ADC atau Analog to Digital Converter (tidak setiap mikrokontroler memiliki ADC internal),digunakan untuk mengubah data-data analog menjadi digital untuk diolah atau diproses lebih lanjut.

Timer atau Counter digunakan sebagai pewaktu atau pencacah, sebagai pewaktu fungsinya sepertisebuah jam digital dan bisa diatur cara kerjanya. Sedangkan pencacah lebih digunakan sebagaipenghitung atau pencacah event atau bisa juga digunakan untuk menghitung berapa jumlah pulsadalam satu detik dan lain sebagainya. Biasanya sebuah mikrokontroler bisa memiliki lebihd dari 1timer.

EEPROM (sama seperti RAM hanya saja tetap akan menyimpan data walaupun tidak mendapatkansumber listrik/daya) dan port-port I/O untuk masukan/luaran, untuk melakukan komunikasi denganperiferal eksternal mikrokontroler seperti sensor dan aktuator.

INFORMASI PELATIHAN PRIVATE AVR DIHTTP://KLIKDISINI.COM/PELATIHANAVR

Beberapa catatan mikrokontroler lainnya adalah:

‘Tertanam’ (atau embedded) dalam beberapa piranti (umumnya merupakan produkkonsumen) atau yang dikenal dengan istilah embedded system atau embedded controller;Terdedikasi untuk satu macam aplikasi saja (lihat contoh-contoh yang akan saya terangkanpada bagian lain dari buku ini);Hanya membutuhkan daya yang (cukup) rendah (low power) sekitar 50 mWatt (Andabandingkan 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 mesinatau otomotif atau militer.Mikrokontroler yang beredar saat ini dibedakan menjadi dua macam, berdasarkanarsitekturnya:

Page 6: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 6

o Tipe CISC atau Complex Instruction Set Computing yang lebih kaya instruksi tetapifasilitas internal secukupnya saja (seri AT89 memiliki 255 instruksi);

o Tipe RISC atau Reduced Instruction Set Computing yang justru lebih kaya fasilitasinternalnya tetapi jumlah instruksi secukupnya (seri PIC16F hanya ada sekitar 30-aninstruksi).

2. Pengetahuan Dasar Mikrokontroler AVR

2.1. PendahuluanKeluarga Mikrokontroler AVR merupakan mikrokontroler dengan arsitektur modern (emang selamaini ada yang kuno kali??). Perhatikan Gambar 3, Atmel membuat 5 (lima) macam atau jenismikrokontroler AVR, yaitu:

TinyAVR (tidak ada kaitannya ama mbak Tini yang jualan gudeg…)Mikrokontroler (mungil, hanya 8 sampai 32 pin) serbaguna dengan Memori Flash untukmenyimpan 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 (HardwareMultiplier), mampu menyimpan program hingga 256 KBytes, dilengkapi EEPROM 4K Bytesdan SRAM 8K Bytes.AVR XMEGAMikrokontroler AVR 8/16-bit XMEGA memiliki periferal baru dan canggih dengan unjuk-kerja, sistem Event dan DMA yang ditingkatkan, serta merupakan pengembangan keluargaAVR untuk pasar low power dan high performance (daya rendah dan unjuk-kerja tinggi).AVR32 UC3Unjuk-kerja tinggi, mikrokontroler flash AVR32 32-bit daya rendah. Memiliki flash hingga512 KByte dan SRAM 128 KByte.AVR32 AP7Unjuk-kerja tinggi, prosesor aplikasi AVR32 32-bit daya rendah, memiliki SRAM hingga 32KByte.

Gambar 3. Mikrokontroler Atmel: Sukses melalui inovasi

Page 7: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 7

Cuman yang populer di Indonesia adalah tinyAVR dan megaAVR, itupun masih kalah populerdengan 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. JenisTinyAVR merupakan mikrokontroler dengan jumlah pin yang terbatas (sedikit maksudnya) dansekaligus fitur-fiturnya juga terbatas dibandingkan yang megaAVR. Semua mikrokontroler AVRmemiliki 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 punyaTinyAVR dan MegaAVR, kemudian telanjangi (maksudnya copotin) semua periferal-nya, nah Andaakan memiliki AVR Core yang sama! Kayak membuang semua isi hamburger, maka Anda akanmendapatkan rotinya doang yang sama…

2.2. Memilih AVR “yang benar”Moralnya… tidak peduli tinyAVR, megaAVR, XMEGA AVR (AVR32 pengecualian karenamasuk 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…

Untuk lebih jelasnya perhatikan keterangan singkat yang saya berikan berikut ini, berdasar informasiresmi dari Atmel (http://www.atmel.com) dan maaf masih dalam bahasa Inggris (supayakelihatannya aura kecanggihannya, he he he...).

tinyAVRo 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.

megaAVRo 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 consumptiono 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 UC3o High CPU performance.o Low power consumption.o High data throughput.o Low system cost.o High reliability.o Easy to use.

Page 8: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 8

AVR32 AP7o High CPU perfromance.o Low power consumption.o SIMD / DSP instructions.o Instruction & data caches.o Memory management unit.o Built for embedded Linux

2.3. Ada apa dengan Mikrokontroler AVR ATMega16?O tidak apa-apa! Dalam buku saya ini memang sengaja menggunakan mikrokontroler AVRATMega16 karena fitur-fitur yang dibutuhkan. Tentu saja Anda bisa menggunakan tipe AVRlainnya, apakah yang 40 pin atau yang kurang dari itu, bisa ATMega88, ATMega16, ATMega128,ATMega8535, ATMega168 dan lain sebagainya.

2.3.1. Ringkasan Fitur-fitur Mikrokontroler AVR ATMega16

Berikut ini saya ringkaskan berbagai macam fitur-fitur untuk Mikrokontroler AVR ATMega16 atauAtmega16L (Mikrokontroler AVR 8-bit dengan Flash ISP 16kByte) langsung dari datasheet-nya,maaf juga masih sebagian besar dalam Bahasa Inggris3...

• Mikrokontroler AVR 8-bit daya-rendah dengan unjuk-kerja tinggi.• Arsitektur RISC tingkat lanjut

– 131 Instruksi yang ampuh – Hampir semuanya dieksekusi dalam satu detak (clock) saja– 32 x 8 General Purpose Working Registers– Operasi statis penuh– Throughput hingga 16 MIPS pada 16 MHz– Pengali On-chip 2-cycle

• High Endurance Non-volatile Memory segments– 16K Bytes of In-System Self-programmable Flash program memory– 512 Bytes EEPROM– 1K Byte Internal SRAM– Write/Erase Cycles: 10,000 Flash/100,000 EEPROM– Data retention: 20 years at 85°C/100 years at 25°C– Optional Boot Code Section with Independent Lock Bits

In-System Programming by On-chip Boot ProgramTrue Read-While-Write Operation

– Programming Lock for Software Security• Antarmuka JTAG (IEEE std. 1149.1 Compliant)

– Boundary-scan Capabilities According to the JTAG Standard– Extensive On-chip Debug Support– Programming of Flash, EEPROM, Fuses, and Lock Bits through the JTAG Interface

• Fitur-fitur periferal– Dua Pewaktu/Pencacah 8-bit dengan Praskalar dan Mode Pembanding terpisah.– Sebuah Pewaktu/Pencacah 16-bit Timer/Counter Dengan Praskalar, Mode Pembanding dan

Capture yang terpisah.– Pencacah Real Time dengan Osilator terpisah– Empat kanal PWM– 8-kanal, 10-bit ADC

8 Single-ended Channels

3 Jika Anda bingung dengan istilah-istilah pada fitur-fitur ini silahkan merujuk ke datasheet aslinya, sehingga fokuspada buku ini tidak melulu pada datasheet...

Page 9: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 9

7 Differential Channels in TQFP Package Only2 Differential Channels with Programmable Gain at 1x, 10x, or 200x

– Byte-oriented Two-wire Serial Interface– Programmable Serial USART– Master/Slave SPI Serial Interface– Pewaktu Watchdog yang bisa diprogram dengan Osilator On-chip yang terpisah– Komparator Analog On-chip

• Fitur-fitur Mikrokontroler khusus– Reset saat Power-on dan Deteksi Brown-out yang bisa diprogram– Internal Calibrated RC Oscillator– Sumber interupsi Eksternal dan INternal– Enam Mode Sleep: Idle, ADC Noise Reduction, Power-save, Power-down, Standby and

Extended Standby• I/O and Packages

– 32 Programmable I/O Lines– 40-pin PDIP, 44-lead TQFP, and 44-pad QFN/MLF

• Tegangan kerja– 2.7 - 5.5V untuk Atmega16L– 4.5 - 5.5V untuk Atmega16

• Kecepatan (frekuensi clock)– 0 - 8 MHz untuk Atmega16L– 0 - 16 MHz untuk Atmega16

• Konsumsi daya pada 1 MHz, 3V, 25°C for Atmega16L– Aktif: 1.1 mA– Idle Mode: 0.35 mA– Mode Power-down: < 1 A

INFORMASI PELATIHAN PRIVATE AVR DIHTTP://KLIKDISINI.COM/PELATIHANAVR

2.3.2. Diagram Pin dan Diagram Blok Mikrokontroler AVR ATMega16

Pada Gambar 4 dan 5 ditunjukkan diagram pin, masing-masing, untuk Mikrokontroler AVRATMega16 tipe PDIP dan TQFP/MLF atau dikenal sebagai SMD.

Gambar 4. Diagram Pin Mikrokontroler AVR ATMega16 tipe PDIP

Page 10: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 10

Pada Gambar 6 dan 7 ditunjukkan diagram blok untuk Mikrokontroler AVR ATMega16, perhatikanbegitu banyaknya fitur-fitur dalam diagram blok tersebut, sebagaimana juga sudah saya kutipkanpada bagian sebelumnya.

Gambar 5. Diagram Pin Mikrokontroler AVR ATMega16 tipe SMD

2.3.3. Penjelasan Singkat Pin-pin pada Mikrokontroler AVR ATMega16

Berikut kita jelaskan secara singkat fungsi dari masing-masing PIN pada Mikrokontroler AVRATMega16.

Vcc Masukan tegangan catu dayaGND Ground, emang apalagi kalau bukan ground...

Port A (PA7..PA0) Port A berfungsi sebagai masukan analog ke ADC internal padamikrokontroler ATMega16, selain itu juga berfungsi sebagai portI/O dwi-arah 8-bit, jika ADC-nya tidak digunakan. Masing-masingpin menyediakan resistor pull-up internal4 yang bisa diaktifkanuntuk masing-masing bit.

Port B (PB7..PB0) Port B berfungsi sebagai sebagai port I/O dwi-arah 8-bit.Masing-masing pin menyediakan resistor pull-up internal yang bisadiaktifkan 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-masing pin menyediakan resistor pull-up internal yang bisadiaktifkan untuk masing-masing bit.Port C juga digunakan sebagai antarmuka JTAG, sebagaimanaditunjukkan pada Tabel 1.2

4 Resistor pull up internal berkaitan dengan rangkaian internal pada mikrokontroler AVR yang bersangkutan.

Page 11: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 11

Port D (PD7..PD0) Port D berfungsi sebagai sebagai port I/O dwi-arah 8-bit.Masing-masing pin menyediakan resistor pull-up internal yang bisadiaktifkan 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 lamawaktu minimum yang ditentukan akan menyebabkan reset,walaupun clock tidak dijalankan.

XTAL1 Masukan ke penguat osilator terbalik (inverting) dan masukan kerangkaian clock internal.

XTAL2 Luaran dari penguat osilator terbalikAVCC Merupakan masukan tegangan catu daya untuk Port A sebagai

ADC, biasanya dihubungkan ke Vcc, walaupun ADC-nya tidakdigunakan. Jika ADC digunakan sebaiknya dihubungkan ke Vccmelalui tapis lolos-bawah (low-pass filter).

AREF Merupakan tegangan referensi untuk ADC

Gambar 6. Diagram blok Mikrokontroler AVR ATMega16 – Bagian I

Page 12: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 12

Gambar 7. Diagram blok Mikrokontroler AVR ATMega16 – Bagian II

Pada Tabel 1, 2 dan 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 antarmukaJTAG) akan dibahas pada saat digunakan, sehingga Anda bisa memahami langsung denganmencoba, istilah kerennya “Learning by Doing”...

Tabel 1. Alternatif fungsi PORTB

Page 13: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 13

Tabel 2. Alternatif fungsi PORTC

Tabel 3. Alternatif fungsi PORTD

3. Pengenalan Bahasa C untuk Mikrokontroler AVRBahasa C luas digunakan untuk pemrograman berbagai jenis perangkat, termasuk mikrokontroler,khususnya seri AVR dari Atmel. Ada yang menyebutkan bahwa bahasa ini merupakan High LevelLanguage sisanya menyebut sebagai Midle Level Language. Dengan demikian seorang programmerdapat menuangkan (menuliskan) algoritmanya dengan mudah.

3.1. Struktur Penulisan Bahasa CPerhatikan struktur penulisan dalam Bahasa C sebagai berikut...

#include < [library1.h] > // Opsional

#define [nama1] [nilai]; // Opsional

[global variables] // Opsional[functions] // Opsional

int main(void) // Program Utama{

[Deklarasi local variable/constant][Isi Program Utama]

}

Page 14: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 14

Keterangan:Opsional artinya boleh ditulis boleh tidak, menyesuaikan kebutuhan – tuliskan pustaka apasaja yang digunakan dan lain sebagainyaPenulisan variabel dilakukan di awal agar aman bisa digunakan sepanjang program, demikianjuga dengan deklarasi fungsi-fungsi yang terlibatSilahkan ikuti (baca) terus tutorial ini untuk melihat contoh-contoh program di bagian laintutorial ini.

3.2. Tipe-tipe data dalam Bahasa Cchar : 1 byte ( -128 s/d 127 )unsigned char : 1 byte ( 0 s/d 255 )int: 2 byte ( -32768 s/d 32767 )unsigned int: 2 byte ( 0 s/d 65535 )long: 4 byte ( -2147483648 s/d 2147483647 )unsigned long: 4 byte ( 0 s/d 4294967295 )float: bilangan desimalarray: kumpulan data-data yang sama tipenya.

3.3. Deklarasi Variabel dan KonstantaVariabel adalah memori penyimpanan data yang nilainya dapat diubah-ubah.Penulisan :[tipe data] [nama] = [nilai];Konstanta adalah memori penyimpanan data yang nilainya tidak dapat diubah. Penulisan :const [nama] = [nilai];Global variable atau constant dapat diakses di seluruh bagian program.Local variable atau constant hanya dapat diakses oleh fungsi tempat dideklarasikannya.

3.4. PernyataanStatement atau pernyataan adalah setiap operasi dalam pemrograman, harus diakhiri dengan [;] atau[}]. Pernyataan tidak akan dieksekusi bila diawali dengan tanda [//] untuk satu baris. Lebih dari 1baris gunakan pasangan [/*] dan [*/]. Pernyataan yang tidak dieksekusi disebut juga komentar.

Contoh:suhu=adc/255*100; //contoh rumus perhitungan suhu

3.5. FungsiFunction atau fungsi adalah bagian program yang dapat dipanggil oleh program utama.

Penulisan :[tipe data hasil] [nama function]([tipe data input 1],[tipe data input 2]){

[pernyataan_1];[pernyataan_2];...

}

3.6. Pernyataan berkondisi dan Pengulanganif else: digunakan untuk menyeleksi satu atau beberapa kondisi

if ( [persyaratan] ) {

Page 15: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 15

[statement1];[statement2];...

}else{

[statement3];[statement4];...

}

for : digunakan untuk pengulangan dengan jumlah yang sudah diketahui – berapa kali diulang.

for ( [nilai awal] ; [syarat] ; [operasi nilai] ){

[statement1];[statement2];...

}

while: digunakan untuk pengulangan (looping) jika dan sealama memenuhi suatu kondisi masihdipenuhi (pengulangan selama benar

while ( [persyaratan] ){

[statement1];[statement2];...

}

do while: digunakan untuk pengulangan jika dan selama memenuhi syarat tertentu, namun min 1 kali

do{

[statement1];[statement2];...

}while ([persyaratan])

switch case: digunakan untuk seleksi dengan banyak kondisi

switch ( [nama variabel] ){

case [nilai1]: [statement1];break;

case [nilai2]: [statement2];break;

...}

3.7. Operasi Logika dan Bilangan BinerOperator Logika

Page 16: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 16

AND: &&NOT: !OR : ||

Biner

AND: &OR : |XOR : ^Shift right: >>Shift left : <<

Lebih besar sama dengan: >=

Lebih kecil/besar: < , >

Lebih kecil sama dengan : <=

3.8. Operasi AritmetikaOperator Keterangan

+, -, *, / Tambah, kurang, kali dan bagi

+=, -=, *=, /=Nilai di sebelah kiri operator ditambah,

dikurangi, dikali atau dibagi dengan nilai disebelah kanan operator.

% Sisa pembagian

++, -- Ditambah 1 (increment) atau dikurangi satu(decrement)

Contoh:

a = 5 * 6 + 2 / 2 – 1 hasilnya 30a *= 5 jika nilai awal a=30, maka hasilnya 150a += 3 jika nilai awal a=30, maka hasilnya 33a++ jika nilai awal a=5, maka hasilnya 6a-- jika nilai awal a=5, maka hasilnya 4, dst

3.9. Pengulangan Terus-menerus atau Infinite LoopingApa itu Pengulangan terus-menerus atau infinite looping? Yaitu suatu pengulangan atau kalang(loop) yang dilakuka terus-menerus tanpa batas, hingga rangkaian tidak lagi mendapatkan sumbercatu daya.

Yang perlu Anda ingat, bahwa kode-kode program yang dijalankan, dalam kaidah Bahasa C, adalahyang ada di fungsi utama atau main, seperti contoh berikut...

void main(){

// pernyataan-pernyataan program}

Page 17: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 17

Program akan dijalankan berurutan dari atas ke bawah dan program tersebut hanya akan dijalankansekali saja. Jika menggunakan infinite loop (ada yang mengatakan sebagai pengulangan tak-hinggaatau kalang tak-hingga, gak masalah, artinya sama saja kok), maka program yang ada di dalampengulangan tersebut akan dijalankan berulang-ulang terus-menerus, contoh...

void main(){

// pernyataan-pernyataan programwhile (1); // infinite loop{

// pernyataan2}

}

Untuk keluar dari infinite looping gunakan perintah break;

Mengapa terjadi Infinite Looping ?? Perhatikan pada contoh tersebut, pernyataan atau instruksiwhile (1) menyatakan bahwa kondisi SELALU BENAR, sehingga selalu dilakukan pengulanganterus-menerus! Coba bedakan dengan contoh berikut...

void main(){

// pernyataan-pernyataan programwhile (index<5); // infinite loop{

// pernyataan2Index += 1;

}}

Program di dalam kurung kurawa setelah instruksi while (index<5) akan dijalankan selama nilai dariindex kurang dari 5, index merupakan variabel sehingga nilainya bisa berubah. Nah, jika index lebihdari atau sama dengan 5, maka pengulangan dihentikan.

4. Menggunakan AVR Studio dengan WinAVR GCCAVR Studio 4 merupakan perangkat lunak gratis (free software) yang bisa anda unduh di internetmelalui websitenya Atmel5. Perangkat lunak ini bisa Anda gunakan untuk menulis program bahasamesin (assembly) dan, jika diintegrasikan dengan winAVR GCC6, bahasa C, mensimulasi programyang Anda buat7 dan kemudian mendebug program sehingga menghasilkan berkas dengan ekstensi.hex yang bisa anda unduh kedalam IC mikrokontroller anda.

Untuk pertama kali, Anda harus melakukan instalasi AVR Studio 4 ini ke komputer anda, jika ingindiintegrasikan dengan WinAVR GCC, lakukan instalasi WinAVR GCC terlebih dahulu sebelumAVR Stdui 4.0. Cara menginstalnya pun mudah layaknya anda menginstal perangkat lunak komputer

5 http://www.atmel.com6 Unduh WinAVR GCC di7 Pengertian simulasi disini adalah simulasi dalam tingkat register bukan simulasi dengan piranti (device). Jika Anda

menginginkan simulasi dengan rangkain dan piranti, gunakan free software lainnya yaitu VMLAB yang bisa diunduhdi http://amctools.com/download.htm (versi terbaru saat ebook ini ditulis adalah v3.15)

Page 18: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 18

yang lain. Gambar 8 adalah contoh tampilan utama dari AVR Studio 4.0 saat pertama kali Andajalankan.

Gambar 8. Tampilan awal AVR Studio 4.0 – Wizard Dialog

Tampilan yang ditunjukkan pada Gambar 8 bukan merupakan tampilan utama dari AVR Studio 4,melainkan kotak dialog wizard yang akan menuntun kita, khususnya, membuat program baru (lihatpada tanda panah, bahwa dialog ini diaktifkan setiap kali AVR Studio 4 dijalankan, hilangkan tandacentang jika Anda tidak ingin mengaktifkan kotak dialog ini di awal program).

Okey, sekarang kita klik New Project, sehingga akan ditampilkan pilihan dan isian-isian yangditunjukkan pada Gambar 9.

Perhatikan tanda panah di Gambar 9, lakukan pilihan bahasa apa yang akan Anda gunakan, apakahAtmel AVR Assembler atau AVR GCC? Karena kita akan belajar pemrograman mikrokontrolerAVR menggunakan Bahasa C, maka dipilih AVR GCC.

Langkah berikutnya adalah, perhatikan tanda panah di Gambar 10, mengisi Project name (ataunama proyek), Initial file (nama file utama proyek yang bersangkutan) dan Location (tempatmenyimpan proyek Anda, klik pada tanda panah jika Anda menginginkan lokasi lainnya). Kemudianklik Next jika sudah selesai. Kemudian ditampilkan Gambar 11.

Page 19: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 19

Gambar 9. Halaman 2 kotak dialog wizard

Gambar 10. Halaman 2 kotak dialog wizard saat dipilih AVR GCC

Page 20: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 20

Gambar 11. Halaman 3 kotak dialog wizard – memilih mikrokontroler AVR

Langkah selanjutnya adalah memilih mikrokontroler AVR yang digunakan, perhatikan tanda panahpada Gambar 11, dan akhiri dengan klik Finish. Sehingga ditampilkan jendela utama dari AVRStudio 4, sebagaimana ditunjukkan pada Gambar 12, dengan editor (perhatikan tanda panah padaGambar 12) siap digunakan untuk mengetikkan program Anda.

Gambar 12. Jendela utama AVR Studio 4

Okey, misalnya sekarang kita ketikkan program berikut, ketik saja dulu, ntar kita terangkan atauberikan penjelasan tentang program ini di halaman-halaman berikutnya...

Page 21: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 21

Simpan berkas (program) Anda dengan Ctrl+S atau pilih menu File Save. Kemudian lakukankompilasi (tekan F7), jika tidak ada kesalahan akan ditampilkan laporan seperti contoh berikut...

Wow! Anda sudah berhasil membuat program mikrokontroler AVR Anda yang pertama, selamat ya!Luar biasa!

Lha terus habis gini ngapain? Oya, Anda langsung bisa mensimulasikan-nya (Ctrl+Shift+Alt+F5)dengan AVR Studio 4 (perhatikan Gambar 13) atau men-download-kan hex-nya ke boardmikrokontroler AVR Anda8.

8 Untuk urusan mendownload program (HEX) ke mikrokontroler silahkan merujuk ke artikel saya yang terkait di ??, danikuti diskusi-nya.

Page 22: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 22

Gambar 13. Jendela Debugger AVR Studio 4

Okey, sampai disini pendahuluan AVR Studio 4-nya, sekarang kita mulai bahas konseppemrogramannya, antara lain:

Konsep Masukan/Luaran atau I/O, danTimer/Counter pada Mikrokontroler AVR

5. Masukan/Luaran (I/O) pada Mikrokontroler AVRMohon silahkan melihat kembali berbagai macam fitur ATMega16 (sebagai contoh mikrokontrolerAVR) pada halaman-halaman sebelum ini. Salah satunya adalah memiliki 4 x 8 saluran masukan danluaran digital (berlogika 0 atau 1), totalnya 32 bit atau 32 pin! Masing-masing diberi nama A, B, Cdan D (masing-masing 8 pin atau 8 bit).

Kali ini kita akan membahas tentang hal dasar berkaitan dengan konsep I/O atau masukan/luaranpada mikrokontroler AVR:

Membaca tingkat tegangan masukan, apakah berlogika 0 (tegangan disekitar 0 volt) atau 1 (tegangansekitar 5 volt maksimal);Mengeluarkan tingkat tegangan 0 (sekitar 0 volt) atau 1 (sekitar 5 volt);

Untuk keperlua tersebut, AVR memiliki beberapa register yang terkait, yaitu DDRx, PORTx danPINx9, berikut penjelasan masing-masing...

9 Tanda ‘x’ diganti dengan A, B, C atau D menyesuaikan dengan pin masukan/luaran yang digunakan.

Page 23: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 23

5.1. Register DDRxDigunakan untuk menentukan apakah sebuah pin pada sebuat PORT (A, B, C atau D) sebagaimasukan atau luaran atau disebut sebagai arah (direction) dari pin yang bersangkutan:

Berikan logika 1 (satu) pada bit yang terkait agar dijadikan sebagai luaran atau output.Berikan logika 0 (nol) pada bit yang terkait agar dijadikan sebagai masukan atau input.

Misal PORTA semua bit akan digunakan sebagai masukan, maka untuk mengaturnya kita gunakanperintah...

DDRA= 0x00; //seluruh pin-pin pada Port A digunakan sebagai input

Misalnya lagi, PORTA.0 akan dijadikan masukan sedangkan PORTA.2 sampai PORTA.7 akandigunakan sebagai luaran, maka perintahnya...

DDRA= 0xFE;

Perhatikan 0xFE (heksa) = 0b11111110 (biner), perhatikan baik-baik konversi biner ini, setiap bitnilai biner mewakili Pin-Pin pada PortA.

5.2. Register PORTxSebagaimana dijelaskan sebelumnya, jika sebuah PORT, semua atau sebagian, dikonfigurasi sebagaimasukan, maka register ini berfungsi sebagai penentu apakah kondisi pin yang terkait di-pullup atauFloating. Begitu juga jika dikonfigurasi sebagai luaran, maka register ini menentukan kondisi pinyang terkait terbaca HIGH atau LOW. Untuk memahami hal ini, perhatikan Gambar 14.

Gambar 14. Kondisi pullup pada suatu PORT

Penjelasan: Jika PIN.1 dihubungkan ke VCC (tegangan 5 Volt) melalui resistor (R), maka inilahyang di maksud dengan pullup. Saat tidak ada tegangan dari luar, PIN.1 akan cenderungberkondisi HIGH (logika 1). Sedangkan PIN.2 dibiarkan begitu saja sehingga kondisi logik dariPIN.2 begitu rentan terhadap pengaruh disekitarnya. PIN.2 bisa berlogika HIGH, bisa jugaberlogika LOW, ini artinya logika PIN.2 mengambang (floating).

Kondisi floating biasanya diperlukan saat PIN sebuah mikrokontroler dihubungkan ke suatu sensor.Karena jika di pullup, dikhawatirkan kondisi logik PIN tersebut mengganggu kondisi logik pin-pinsensor yang bersangkutan.

Page 24: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 24

Perhatikan contoh-contoh berikut...

DDRA=0x00;PORTA = 0xFF;

Ini berarti seluruh pin-pin pada PORTA dijadikan sebagai masukan dan di-pullup, artinya padarangkaian yang terkait, jika menggunakan tombol atau pushbutton, jika tidak ditekan akan terbacaHIGH dan jika ditekan akan terbaca LOW. Gunakan contoh rangkaian pada Gambar 15 danperhatikan tanda panah, pushbutton satu ujung dihubungkan ke pin yang terkait sedangkan ujunglainnya di-GND-kan. INGAT! Ini bukan satu-satu-nya cara membuat rangkaian masukan denganpushbutton, tetapi ini cara yang mudah dan murah meriah... he he he...

Contoh lainnya...

DDRB= 0x00;PORTB=0x0F;

Ini artinya seluruh pin-pin PORTB dijadikan masukan, dengan konfigurasi 0x0F (0b00001111) atauPORTB.0 sampai PORTB.3 di-pullup, sedangkan PORTB.4 sampai PORTB.7 dikonfigurasifloating.

5.3. Register PINxDigunakan untuk membaca masukan pada pin yang bersangkutan, akan dijelaskan pada contohprogram di halaman-halaman berikutnya.

Gambar 15. Contoh rangkaian aktif rendah tombol pushbutton.

Page 25: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 25

6. Latihan Tahap-I

6.1. Percobaan-1: LED berkedip-kedipPercobaan pertama ini menggunakan rangkaian yang ditunjukkan pada Gambar 1610, sedangkancontoh penempatan LED dan pushbutton (percobaan-3) pada AVR Trainer v2.0 ditunjukkan padaGambar 17.

Gambar 16. Rangkaian LED pada PORTB mikrokontroler ATMega16

Gambar 17. Penempatan LED dan Pushbutton pada AVR Trainer v2.0

10 Gambar AVR Trainer v2.0 selengkapnya ada di cover dari ebook ini!

Page 26: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 26

Listing program ditunjukkan sebagai berikut...

Penjelasan:

Baris 1 – 4 merupakan deklarasi untuk definisi kristal yang digunakan, yaitu 11.0592MHz11. Pustakaapa saja yang digunakan (baris 2 dan 3) dan alias untuk PORTB sebagai led (baris 4);Baris 7- 10 merupakan subrutin untuk inisialisasi PORTB sebagai luaran (baris 9). Perhatikan bahwaDDRB diberi logika 1 semua (=0xFF atau 255 desimal);Program utama ditunjukkan pada baris 13 – 23, diawali dengan inisialisasi port (baris 15), kemudiandilakukan pengulangan tak-hingga (baris 16);Yang dilakukan adalah menyalakan LED, dengan cara memberikan logika 1 (baris 18), kemudianmelakukan penundaan 1 detik (baris 19), kemudian mematikan LED dengan logika 0 (baris 20) dandiakhiri dengan penundaan 1 detik (baris 21);Demikian seterusnya, LED akan berkedip-kedip dengan tundaan 1 detik.

6.2. Percobaan-2: Membunyikan buzzer!Masih menggunakan rangkaian yang sama seperti sebelumnya, sekarang buzzer juga akandibunyikan, penempatan buzzer pada AVR Trainer v2.0 dtinjukkan pada Gambar 18. Gambarkeseluruhan dari AVR Trainer v2.0 bisa dilihat di cover ebook ini.

11 Silahkan membaca artikel saya yang menjelaskan tentang masalah sistem clock pada mikrokontroler AVR dihttp://agfi.staff.ugm.ac.id/blog/index.php/2009/12/mengenal-system-clock-pada-mikrokontroler-avr/

Page 27: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 27

Gambar 18. Buzzer pada AVR Trainer Board v2.0

Perhatikan listing berikut ini...

Penjelasan:

Baris 2 – 5 sama seperti penjelasan pada percobaan-1;Baris 8 dan 9 digunakan untuk mendeklarasikan suatu instruksi untuk memberikan nilai padaPORTA.7 dengan nilai logika 1 (baris 8) dan logika 0 (baris 9);

Page 28: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 28

Selebihnya adalah program utama (baris 19 – 31), silahkan Anda pelajari dengan seksama.

6.3. Percobaan-3: Aplikasi Pushbutton untuk ON/OFF LEDKali ini menggunakan rangkaian pushbutton yang terhubung ke PORTB (ditunjukkan pada Gambar15. Ada 2 tombol, satu untuk menyalakan LED dan yang .lain untuk mematikan LED, berikut listingprogramnya...

Penjelasan:

Baris 1 - 4 sudah jelas khan? Belum? Ya monggo, silahkan lihat dulu atau baca lagi penjelasan daripercobaan-percobaan sebelumnya, jika sudah paham silahkan kembali lagi kesini...Baris 6 – 8 digunakan untuk mendeklarasikan 3 macam alias, yaitu ‘tombol’, ‘satu’ dan ‘dua’. JikaAnda perhatikan, khusus tombol didefinisikan sebagai register PIND, sebagaimana janji sayasebelumnya register PINx saya jelaskan disini, yaitu digunakan untuk membaca masukan. Artinyauntuk memberikan luaran melalui register PORTx sedangkan untuk membaca masukan gunakanregister PINx;Perhatikan sekarang pada rutin init_devices() yang berbeda dengan sebelumnya (baris 11 – 18):

o DDRB=255 sama seperti sebelumnya, PORTB semuanya dijadikan sebaga saluran luaran;o PORTD.2 dan PORTD.3 digunakan sebagai saluran masukan, sehingga harus diberi logika

‘0’, caranya bagaimana? Anda bisa langsung memberikan instruksi DDRD = 0b00001100atau DDRB = 0x0C;

Page 29: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 29

o DDRD &= ~(1<<2) untuk PORTD.2 (tanda ‘~” artinya NOT), dan DDRD &= ~(1<<3) untukPORTD.3, perhatikan masing-masing baris 14 dan 15;

o Karena rangkaian pushbutton menggunakan konfgurasi active low12, maka kedua pin tersebutdiaktifkan pullup-nya, menggunakan instruksi masing-masing PORTD |= (1<<2) untukPORTD.2 dan PORTD |= (1<<3) untuk PORTD.3, perhatikan baris 16 dan 17.

Program utama dimulai dari baris 20 hingga 29:o Diawali dengan inisialisasi device pada 22;o Dilanjutkan dengan mematikan semuan led, baris 23;o Yang diulang-ulang terus menerus menggunakan instruksi for (;;) {..}, sebagaimana

dituliskan pada baris 24 hingga 28, adalah proses memeriksa apakah tombol yangdihubungkan ke PIND.2 ditekan? Atau justru tombol di PIND.3 yang ditekan:

Jika tombol yang ada di PIND.2 ditekan maka led dinyalakan semua (baris 26),sebaliknyaJika tombol yang ada di PIND.3 ditekan maka led dimatikan semua (baris 27)!

Mudah bukan?

7. Timer/Counter pada Mikrokontroler AVRTimer/Counter dalam mikrokontroler merupakan fasilitas yang salah satu fungsinya dapat digunakansebagai pewaktu atau cacahan suatu event. Sumber clock atau pemicau dapat dibangkitkan dari sinyaleksternal maupun internal.

Jika sumber sinyal pemicu atau clock berasal dari internal maka Timer/Counter berfungsi sebagaipewaktu atau timer dan jika sumber sinyal berasal dari luar maka disebut sebagai pencacah ataucounter.

Mikrokontroler ATMega16 memiliki 3 buah timer yaitu Timer0, Timer1 dan Timer2. Timer0 danTimer2 memiliki kapasitas 8-bit sedangkan Timer1 memiliki kapasitas 16-bit. Apa yang dimaksudtimer 8 bit dan 16 bit?

Timer 8-bit adalah pewaktu yang bisa mencacah atau menghitung hingga maksimal nilai0xFF heksa (dalam biner = 11111111).Timer 16-bit sama seperti timer 8-bit, hanya saja nilai maksimalnya mencapai 0xFFFF.

Pada ebook ini akan dibahas mengenai Timer1, 16-bit, dan untuk dapat menjalankan ataumenggunakan Timer1 ini, maka kita harus mempelajari terlebih dulu register-register yang berkaitandengan Timer1 karena di register itulah tempat pengaturan Timer/Counter1 agar bisa bekerja.

Pada Gambar 19 ditunjukkan diagram blok dari Timer1 16-bit, terlihat adanya beberapa register yangterkait, antara lain (dari atas): TCNT1, OCR1A, OCR1B, ICR1, TCCR1A, TCCR1B dan jugabeberapa bit-bit terkait seperti: TOV1, OC1A, OC1B dan ICF1.

12 Jika ditekan bernilai logika ‘0’.

Page 30: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 30

Gambar 19. Diagram blok TIMERn (n diganti dengan 1)

Register Timer1 yang akan kita libatkan di awal ini adalah:

TCCR1BTCNT1TIMSKTIFR

Register TCCR1B, ditunjukkan pada Gambar 20, merupakan tempat pengaturan clock yang intinyaagar Timer/Counter1 bisa bekerja, maka register TCCR1B ini jangan sampai diisi dengan 0x00(dikosongkan).

Gambar 20. Register TCCR1B

Page 31: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 31

Kok tidak boleh berisi 0x00 atau semua bit pada TCCR1B nol semua? Coba perhatikan Tabel 1.Sumber clock bisa berasal dari internal mulai dari prescaler 1 hingga 1024 atau bisa juga dari sumbereksternal, semua bisa diatur sesuai atau mengikuti aturan pada Tabel 1.

Apa nilai praskalar itu? Timer1 (juga timer/counter lainnya) membutuhkan sumber detak atauclock source. Biasanya sumber detak yang biasa kita pakai berasal dari XTAL. Besarnya maksimumsama dengan XTAL yang digunakan dan minimum XTAL/1024. Nah nilai pembagi atau 1024 ini-lah yang disebur nilai praskalar atau prescaler.

Apa yang terjadi jika semua bit di TCCR1B nol semua? Artinya bit 0, 1 dan 2 juga nol semua,perhatikan Gambar 19, itu artinya CS12=0, CS11=0 dan CS10=0 dan itu menurut Tabel 1 “No clocksource (Timer/Counter stopped)” Timer berhenti bekerja! Atau tidak bekerja!!

Tabel 1. Konfigurasi sumber clock atau detak pada TCCR1B

Tiga bit (CS12, CS11 dan CS10) ini dulu yang kita perhatikan...

Okey! Register TCNT1 merupakan register pencacah, artinya nilai di dalamnya akan dinaikkansetiap kali ada pemicu, bisa tepi naik atau tepi turun. Jika sumbernya dari dalam (internal)pencacahan dilakukan pada saat tepi naik. Register ini akan mencacah naik dari 0x0000 sampai nilaimax 0xFFFF kemudian di-reset kembali lagi ke 0x0000.

Overflow (melimpah) terjadi saat kondisi dari 0xFFFF ke 0x0000, sehingga mengakibatkan bitTOV1 pada register TIFR akan di-set (diberi logika 1). Kondisi overflow juga bisa digunakan untukmenjalankan interrupsi.

Register TIMSK, yang ditunjukkan pada Gambar 21, merupakan register tempat pengaturaninterupsi overflow dari Timer/Counter1 yang ingin diaktifkan atau tidak. Dengan memberikan logika1 pada bit TOIE1 (bit-2 pada TIMSK), maka interupsi Timer/Counter1 aktif dengan catatan bitinterupsi global diaktifkan (bit-7 di register Status SREG, perhatikan Gambar 22).

Perhatikan juga bit-bit lain yang berkaitan dengan masing-masing Timer:

Timer/Counter-0: OCIE0 dan TOIE0 – masing-masing bit 1 dan 0;Timer/Counter-1: TICIE1, OCIE1A, OCIE1B dan TOIE1 – masing-masing bit 5, 4, 3 dan2;Timer/Counter-2: OCIE2 dan TOIE2 – masing-masing bit 7 dan 6;

Page 32: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 32

Gambar 21. Register TIMSK

Gambar 22 Register SREG

Penjelasan register SREG13:

I – Global Interrupt Enable: digunakan untuk mengaktifkan interupsi menyeluruh (global);T – Bit copy storageH – Half Carry FlagS – Sign bitV – Two’s Complement Overflow FlagN – Negative flagZ – Zero flagC – Carry flag

Sedangkan register TIFR (Timer/Counter Interrupt Flag Register), sebagaimana ditunjukkan padaGambar 23, digunakan sebagai indikator atau penanda apakah sudah terjadi overflow atau belum.Pada Timer/Counter1, kondisi overflow ditandai dengan logika 1 pada bit TOV1 (bit-2) pada registerTIFR.

Gambar 23. Register TIFR

Persamaan untuk mencari waktu jeda yang ingin digunakan adalah berdasarkan nilai awal yang harusdimasukkan ke dalam TCNT1, gunakan persamaan berikut:

TCNT1 = (1+0xFFFF) - (waktu *( XTAL / praskalar) )

Waktu waktu yang diinginkanXTAL frekuensi kristal yang dipakaipraskalar nilai prescaler (lihat penjelasan berikut ini)

13 Hanya saya tuliskan yang terkait saja, selengkapnya silahkan merujuk datasheet ATMega16.

Page 33: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 33

7.1. Percobaan-4: Menggunakan Timer1Menyalakan dan mematikan LED pada PORTB dengan jeda 1 detik menggunakan Timer1. Bedakandengan Percobaan-1 dan 2 yang hanya menggunakan fungsi delay yang sama sekali tidakmenggunakan fasilitas Timer/Counter.

Okey, sekarang kita cari dulu nilai TCNT1-nya...

Nilai XTAL-nya 11,0592MHz atau 11.059.200Hz;Nilai praskalarnya 1024;Waktu yang diinginkan 1 detik, maka

Gunakan TCNT1 = (1+0xFFFF) - (waktu *( XTAL / prescaler) ), jadi...

TCNT1 = (1+65535)-(1detik * (11059200/1024)) = 65536 - (1detik*10800) = 65536-10800 = 54736 (desimal) = D5D0 (heksadesimal)

Alternatif lain, Anda bisa menggunakan programnya AVR Timer yang bisa diunduh melalui websitehttp://www.techideas.co.nz. Langkah-langkah penggunakan program ini kita jelaskan berikut:

1. Setelah mengunduh program AVR Timer dari http://www.techideas.co.nz, langkah selanjutnya adalahmenjalankan AVRTimer1Clac.exe untuk perhitungan atau kalkulasi Timer1;

2. Lakukan pengisian beberapa nilai sebagaimana ditunjukkan pada Gambar 23, menyesuaikan dengankebutuhan yang telah kita tetapkan tadi:

a. Frekuensi kristal: 11,0592MHz atau ditulis 11.059.200 Hz;b. Pilih nilai prescale sebesar 1024;c. Isikan Timer1 Interrupts per second (berapa kali interupsi/detik) sebesar 1 kali;d. Perhatikan hasilnya (Gambar 24).

Gambar 24. Contoh penggunaan ATMega Timer Calculator – TIMER1

Page 34: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 34

Listing programnya...

Penjelasan:

Program ini pada dasarnya sama seperti percobaan-1, hanya saja sekarang tundaan atau jedamenggunakan fasiltas Timer1 yang ada di ATMega16;Cukup saya jelaskan saja subrutin delay1detik(), yang lainnya sama seperti penjelasan percobaan-percobaan sebelumnya:

o Baris-15 merupakan pengisian register TCCR1B agar digunakan nilai prescale sebesar 1024,artinya nilai kristal 11,0592MHz dibagi dengan 1024, sekaligus mengaktifkan Timer1;

o Baris-16 memberikan nilai awal pada TCNT1 sesuai dengan perhitungan atau kalkulasi yangtelah dilakukan sebelumnya, yaitu mengisi dengan nilai awal 54.736 (desimal) atau 0xD5D0(heksadesimal);

o Baris-17 menunggu hingga terjadi overflow – ini merupakan proses pooling bukan interupsi;o Jika sudah terjadi overflow atau melimpah, maka flag TOV1 di-reset (baris 18) dan Timer1

dimatikan (baris 19).

Gampang tho!?

Page 35: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 35

7.2. Percobaan-5: Menggunakan Timer2Okey sekarang saya tunjukkan contoh lainnya menggunakan Timer2 dan penggunaanAVRTimer2Calc ditunjukkan pada Gambar 25. Untuk 10 milidetik diisi 100 kali interupsi per detik.

Gambar 25. Contoh penggunaan ATMega Timer Calculator – TIMER2

Page 36: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 36

Penjelasan (waktu ngisi titik-titik jangan lihat kuncinya dulu ya):

Percobaan-5 ini sebenarnya juga mirip/sama dengan percobaan-4 (sebelumnya), hanya saja digunakanfasilitas Timer2 untuk melakukan penundaan 1 detik;Anda perhatikan pada 12 hingga 28:

o Terdapat ....14 subrutin yaitu delay10ms() dan ........................15;o Mengapa kok tidak langsung dilakukan tundaan 1 detik? Mengapa harus melakukan

pengulangan ....16 kali subrutin delay10ms()? Perhatikan baris 24 – 27;o Ingat, Timer2 merupakan timer ....17 bit, artinya dengan kemampuan seperti itu tidak bisa

dilakukan langsung tundaan 1 detik, cara paling gampang untuk mendapatkan tundaan 1 detikatau 1.000 milidetik adalah mengulang 100 kali tundaan 10 milidetik;

o Perhatikan register TCCR2 bit 0, 1 dan 2 pada Gambar 23. Kemudian perhatikan juga Tabel2 untuk semua kemungkinan nilai CS22, CS21 dan CS20.

o Nilai prescale yang digunakan, mengikuti Tabel 2, perhatikan pada baris 14, adalah sebesar....18 atau nilai clock dibagi dengan nilai prescale tersebut;

o Agar terjadi penundaan sekitar 10 milidetik, maka nilai register TCNT2 (pada baris 15) diberinilai sebesar .....19 heksadesimal atau .......20 desimal;

Gambar 26. Register TCCR2

o Baris 16 digunakan untuk menunggu terjadinya ......................21 pada Timer2, kemudian bitoverflow tersebut direset (baris-17).

14 Jawaban: 2 (dua)15 Jawaban: delay1detik()16 Jawaban: 100 (seratus)17 Jawaban: 8 (delapan)18 Jawaban: 102419 Jawaban = 9420 Jawaban = 148 (seratus empat puluh delapan)

Page 37: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 37

o Timer2 kemudian dihentikan dengan memberi nilai .........22 pada register TCCR2.

Tabel 2. Konfigurasi sumber clock atau detak pada TCCR2

7.3. Percobaan-6: Menggunakan Timer0Bagaimana kalau menggunakan Timer0? Pengaturan pewaktuan menggunakan AVRTimer0Calcditunjukkan pada Gambar 27. Untuk penundaan 10 milidetik sebanyak 100 kali, parameter-nya samaseperti Timer2.

Gambar 27. Contoh penggunaan ATMega Timer Calculator – TIMER0

21 Jawaban: overflow22 Jawaban: 0 (nol) atau 0x00

Page 38: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 38

Berikut listing programnya...

Penjelasan:

Silahkan tulis beberapa paragraf yang menjelaskan program ini – mengikuti kaidah-kaidahyang sudah dijelaskan sebelumnya...

8. Komunikasi SerialKomunikasi serial pada mikrokontroler AVR menggunakan fasilitas USART singkatan dariUniversal Syncronous and Asyncronous Receiver Transmitter sangat handal dan berguna dalamberbagai aplikasi yang berhubungan antarmuka komunikasi serial dengan PC atau sesama

Page 39: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 39

mikrokontroler AVR atau bahkan mikrokontroler lain yang memiliki fasilitas komunikasi serial,misalnya program pemantauan suhu ruangan sekaligus pengontrolan AC atau kipas menggunakanantarmuka program PC Visual Basic atau Delphi, dan lain-lain.

Jalur komunikasi serial pada mikrokontroler AVR ATMega16/32/8515 terdapat pada pin PORTD.0(RXD) dan PORTD.1 (TXD), perhatikan pin-pin yang terkait pada Gambar 4 dan 5. Diagrambloknya ditunjukkan pada Gambar 28.

Gambar 28. Diagram blok fasilitas komunikasi serial AVR

Berikut fitur-fitur komunikasi serial atau USART pada ATMega16:

• Full Duplex Operation (Independent Serial Receive and Transmit Registers)• Asynchronous or Synchronous Operation• Master or Slave Clocked Synchronous Operation• High Resolution Baud Rate Generator• Supports Serial Frames with 5, 6, 7, 8, or 9 Data Bits and 1 or 2 Stop Bits• Odd or Even Parity Generation and Parity Check Supported by Hardware• Data OverRun Detection

Page 40: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 40

• Framing Error Detection• Noise Filtering Includes False Start Bit Detection and Digital Low Pass Filter• Three Separate Interrupts on TX Complete, TX Data Register Empty, and RX Complete• Multi-processor Communication Mode• Double Speed Asynchronous Communication Mode

Pembahasan komunikasi serial USART dipisahkan menjadi 3 bagian yaitu Penghasil detak (clockgenerator), Mengirim data (Data Transmit) dan Menerima data (Data Receive).

8.1. Penghasil Detak - Clock GeneratorPenghasil detak atau Clock Generator tergantung pada mode data transfer, yaitu terdapat 4 (empat)mode penghasil detak, yaitu:

• Normal asynchronous;• Double Speed asynchronous;• Master synchronous, dan• Slave synchronous.

Pada Gambar 29 ditunjukkan diagram blok logik penghasil detak yang terkait dengan beberaparegister seperti UBRR (16-bit: UBRRL dan UBRRH) dan lain-lain.

Gambar 29. Diagram blok logik penghasil detak untuk komunikasi serial

Page 41: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 41

Kebanyakan yang digunakan adalah Asynchronous Internal Clock Generator. Register penentuanbaudrate atau kecepatan komunikasi serial atau UBRR digunakan dimana nilai yang diberikanadalah untuk down-counter. Setiap kali nilai down-counter mendekati nol, maka sebuah clockdibangkitkan.

Anda bisa menghitung berapa nilai UBRR yang sesuai dengan baudrate yang diinginkan mengacupada osilator atau kristal yang digunakan oleh mikrokontroler menggunakan persamaan

BAUD = fclk/(16(UBRR+1))

Persamaan ini digunakan untuk Asynchronous Normal Mode, jika menggunakan mode DoubleSpeed Asynchronous, maka persamaan yang digunakan adalah

BAUD = fclk/(8(UBRR+1))

Informasi detil tentang clock generator ini bisa dilihat di datasheet AVR ATMega16. Anda bisa jugamemanfaatkan website http://www.wormfood.net/avrbaudcalc.php untuk menghitung secara online.

Misalkan digunakan frekuensi osilator untuk mikrokontroler sebesar 8 MHz (atau 8.000.000 Hz) danbaudrate yang diinginkan adalah 9600, setelah dihitung menggunakan persamaan diatas diperolehnilai UBRR sebesar 51,083333333, kita bulatkan menjadi 51. Dengan nilai UBRR =51, maka nilaiseseungguhnya dari baudrate adalah 9615 (bukan 9600), jika dibagi dengan 9600 diperoleh 1.0016dan karena itu error-nya adalah 0.16%. Dengan error tersebut USART masih dapat bekerja tetapitidak sempurna.

Anda bisa menggunakan AVR Assistant yang dibuat oleh Mike Henning (bisa Anda unduh programtersebut di http://www.esnips.com/web/AtmelAVR), program ini juga bisa digunakan sebagaialternatif dari AVR Timer Calculator yang telah dijelaskan sebelumnya. Tampilan awal ditunjukkanpada Gambar 30.

Gambar 30. Contoh penggunaan AVR Assistant v1.3

Page 42: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 42

Penjelasan Gambar 30:

• Bagian kiri digunakan untuk mengatur baudrate, sedangkan bagian kanan digunakan untukmengatur Timer0, 1 dan 2 (jadi satu antarmukanya);

• Contoh untuk baudrate 9600, dengan kristal 8MHz, hasil perhitungannya ditunjukkan padaGambar 31 kiri, sedangkan untuk kristal 7,372MHz ditunjukkan pada Gambar 31 kanan.Perhatikan perbedaan error %-nya.

Gambar 31. Contoh penggunaan AVR Assistant v1.3 untuk dua frekuensi MPU berbeda

• Untuk contoh pengaturan Timer1 agar menunda interupsi terjadi 100 kali per detik (sepertikasus timer yang dijelaskan sebelumnya), dengan frekuensi kristal 11,059MHz, ditunjukkanpada Gambar 32.

Gambar 32. Contoh penggunaan untuk TIMER1

Page 43: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 43

Untuk mengatasi ketidak-akuratan baudrate tersebut, biasanya digunakan kristal dengan frekuensi7,372MHz atau 11,0592MHz. Perhatikan informasi selengkapnya untuk nilai UBRR di Tabel 3.

Tabel 3. Nilai-nilai UBRR dengan 8MHz, 7,372MHz dan 11,0592MHz23

Berikut adalah subrutin yang digunakan untuk menghitung nilai UBRR pada winAVR GCC

Variabel MYUBRR digunakan untuk menyimpan nilai UBRR setelah dilakukan perhitungansebagaimana ditunjukkan pada listing tersebut. Pemanggilannya menggunakan instruksi

initserial(MYUBRR);

23 Hasil perhitungan dari http://www.wormfood.net/avrbaudcalc.php

Page 44: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 44

8.2. Mengirim Data – USART TransmitterPengirim USART atau UASRT Transmitter dapat diaktifkan dengan memberikan logika satu di bitTXEN yang terdapat dalam register UCSRB pada bit-3, perhatikan register UCSRB yangditunjukkan pada Gambar 33.

Gambar 33. Register UCSRB

Saat bit TXEN diberi logika 1, artinya USART Transmitter diaktifkan, dengan demikian pin TxDpada PORTD.1 hanya bisa digunakan untuk pengiriman data pada komunikasi serial. Lakukanterlebih dahulu inisialisasi baudrate, mode kerja dan format data sebelum mengirimkan data-datamelalui port serial. Untuk mengatur berapa stop bit, digunakan USBS pada register UCSRC,sedangkan mengatur lebar bit data digunakan UCSZ2 (di register UCSRB), UCSZ1 dan UCSZ0 (diregister UCSRC) mengikuti Tabel 4.

Gambar 34. Register UCSRC

Tabel 4. Jumlah data bit yang ditentukan UCSZ2..0

Jika Anda menggunakna mode sinkron, maka pin XCK (PORTB.0) hanya boleh digunakan untukmengirimkan detak atau clock transmisi.

Berikut adalah subrutin yang digunakan untuk mengaktifkan UASRT Transmitter pada winAVRGCC.

Page 45: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 45

Penjelasan:

Perhatikan baris 12 (selain TXEN=1, sekaligus untuk mengakifkan UASRT Receiver diRXEN=1).Format datanya 8-bit data (lihat Tabel 4) dengan instruksi (3<<UCSZ0), 1-bit stop denganinstruksi (1<<USBS).Karena UCSRC menggunakan lokasi yang sama dengan UBBRH, maka URSEL harusdiberi logika 1 untuk mengakses UCSRC dengan instruksi (1<<URSEL).

Berikut adalah subrutin (b dan uart_putc()) yang digunakan untuk mengirimkan sebuah data(karakter)

Penjelasan:

Pada subrutin pertama, uart_putc(), data dikirimkan dengan cara menuliskan sebuah kodekarakter ke register UDR, perhatikan Gambar 35, perhatikan baris 19;Namun sebelum menuliskan atau mengisi register UDR, ditunggu dulu nilai bit UDRE (bit-5) pada register UCSRA (Gambar 36) agar bernilai 1 (satu), maksudnya jika UDRE=1berarti UDR-nya kosong dan siap mengirim data berikutnya, perhatikan baris 18;

Page 46: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 46

Gambar 35. Register UDR Read dan Write

Gambar 36. Register UCSRA

Subrutin kedua, yaitu uart_puts() digunakan untuk mengirimkan serangkaian data (tidakhanya satu karakter saja), perhatikan terjadinya pengulangan subtrutin uart_putc() pada baris27 dan 28.

8.3. Menerima Data – USART ReceiveUntuk menerima data, USART Receiver dapat kita aktifkan dengan memberikan logika 1 pada bitRXEN yang terdapat dalam register UCSRB, perhatikan kembali Gambar 33. Saat bit RXEN diberilogika 1, artinya USART Reciever diaktifkan, dengan demikian pin RxD pada PORTD.0 hanya bisadigunakan untuk penerimaan data pada komunikasi serial.

Berikut adalah cara yang digunakan untuk menerima data (karakter), ada di dalam program utama(main()):

Untuk menerima data caranya mudah, yaitu dengan memeriksa apakah bit RXC (bit ke 7) padaregister UCSRA bernilai 1? Perhatikan Gambar 36 dan baris 50. Jika RXC bernilai 1 artinya UDR

Page 47: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 47

berisi data yang diterima secara serial, sehingga setelah terdeteksi RXC=1, dilanjutkan denganmenyalin isi UDR ke suatu variabel (pada contoh digunakan tempserial), sebagaimana ditunjukkanpada baris 52.

8.4. Percobaan-7: Komunikasi SerialPercobaan komunikasi serial ini bertujuan menampilkan dua kalimat pembuka dan mengirimkembali apapun yang diketikkan melalui terminal serial (hasil-nya ditunjukkan pada Gambar 37),misalnya, jika diketik “a”, maka karakter “a” ini dikirim kembali ke serial, perhatikan baris 52 dan53 pada listing program berikut:

Page 48: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 48

Gambar 37. Ragkaian untuk komunikasi serial dan contoh running hasil aplikasi

Konektor komunikasi serial pada AVR Trainer Board v2.0 ditunjukkan pada Gambar 38.

Page 49: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 49

Gambar 38. Koneksi serial RS232 pada AVR Trainer Board v2.0

9. Setelah Ini kemana?Masih banyak yang harus dipelajari selain I/O dasar dan Timer/Counter pada Mikrokontroler AVR,antara lain interupsi, antarmuka I2C (misalnya EEPROM eksternal, RTC DS1307, dan lainsebagainya), akses EEPROM internal, ADC dan lain sebagainya.Silahkan ikuti pelatihan mikrokontroler AVR di http://klikdisini.com/pelatihanavr! Apa saja yangakan Anda dapatkan dalam pelatihan tersebut? Silahkan klik link tersebut!

Catatan:Saran dan masukan untuk ebook ini silahkan kirim email ke [email protected], terima kasih!

--- selesai ---

INFORMASI TENTANG PELATIHAN MIKROKONTROLER

Hanya dengan minimal 5 JAM24 (karena langsung dibimbing oleh Pakarnya)Anda bisa memahami konsep dasar dan membuat aplikasi mikrokontroler AVR!

Ditambah dengan konsultasi GRATIS Anda bisa meningkatkankemampuan Anda dalam mikrokontroler AVR!

Anda juga bisa menghasilkan INCOME TAK TERBATAS!Dengan memanfaatkan kemampuan Anda di bidang mikrokontroler!

Pelatihan yang saya selenggarakan memberikan konsep dasar dan tip/trik pembuatan aplikasimikrokontroler AVR!

Informasi & pendaftaran silahkan akses ke http://klikdisini.com/pelatihanavr

24 Waktu minimal pelatihan, Anda juga bisa menambah jumlah jam jika masih merasa kurang – tingkat lanjut!

Page 50: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 50

INFORMASI PERANGKAT KERAS UNTUK BELAJAR MIKROKONTROLER AVR

Anda mengalami kesulitan dalam belajar Mikrokontroler AVR??Bingung memilih/menentukan hardware yang bisa dipakai dengan

mudah untuk belajar Mikrokontroler AVR?Pengin yang simpel, murah dan komplit untuk belajar Mikrokontroler AVR?

Kekhawatiran Anda akan berakhir! Kesulitan Anda akan segera teratasi Apa yang Anda cariakan segera ditemukan! Dapatkan PENAWARAN ISTIMEWA selama promosi!

Dapatkan informasi selengkapnya di http://klikdisini.com/jualavrbasic

Saya tersugesti, klo baca bukunya pak agfi, saya baru bisa paham... padahal saya juga uda punyabuku mikro yg lain, spt nya gak enak, klo gak baca punya pak agfi, aneh memang...

Teguh Budiman

Waduh, emang sip banget penjelasannya pak Agfi, salah satu yang saya kagumi dari pak Agfiadalah kalo pak Agfi njelasin sesuatu pasti dengan ringkas, padat, berisi, to the point dan mudah di

mengerti.. saya juga senang baca buku-bukunya pak Agfi lho, nah.. itu adalah tanda-tanda daridosen, entrepreneur dan sekaligus penulis yang profesional..| salut dah buat pak Agfi.. Seandainya

sebagian besar dosen bisa aktif seperti pak Agfi, pasti Indonesia makin maju neh..Herlambang (http://indomicron.co.cc)

Page 51: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 51

Bonus-1: Hasil kompilasi Flowcode AVR 3.0 yang unik?!

Kali ini saya coba-coba menggunakan perangkat lunak Flowcode AVR versi 3.025 (tampilan awalditunjukkan pada Gambar 1.1) untuk melakukan kompilasi program mikrokontroler AVR hanyadengan menggambarkan diagram alir atau flowchartnya. Apaan? Cukup pake diagram alir? Yupbetul!

Gambar 1.1

Baiklah, untuk percobaan, saya buka berkas baru dengan tampilan seperti Gambar 1.2. Tampak awaldari diagram alir dan daftar pin dari mikrokontroler AVR ATmega32 yang saya gunakan sebagaicontoh kali ini.

Gambar 1.2

25 Pada saat ebook ini ditulis sudah tersedia versi 4.3.3.6, silahkan di-unduh dihttp://www.4shared.com/file/kTQ_NYyL/Flowcode_AVR_Professional_4366.html dan jika suka silahkan dibeli.

Page 52: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 52

Selanjutnya, singkat cerita saya buat sebuah diagram alir yang intinya menghidupan dan mematikanLED pada PORTA secara bergantian dengan selang 500 milidetik atau 0,5 setik (perhatikan Gambar1.3). Hasilnya LED akan berkedip-kedip dengan tundaan 500 milidetik (tampilan simulasi padaGambar 1.4).

Gambar 1.3

Gambar 1.4 (kiri LED mati, kanan LED menyala)

Justru yang saya ulas disini adalah hasil kompilasi yang aneh atau barangkali unik atau barangkaliitulah ciri khas dari Flowcode AVR? Sebagaimana ditunjukkan pada Gambar 1.5 dan Gambar 1.6.

Page 53: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 53

Gambar 1.5

Pada Gambar 1.5 keunikan terjadi karena inisialisasi PORTA yang seharusnya cukup sekali sajadilakukan justru dilakukan pada tiap instruksi untuk mengirimkan nilai 0 (LED mati semua) dan 255(LED hidup semua), perhatikan tanda panah pada Gambar 1.5. Mengapa tidak sekali saja yach?Mungkin untuk jaga-jaga kali yaaa…??

Page 54: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 54

Gambar 1.6

Pada Gambar 1.6 terjadi pengulangan instruksi yang sama persis (lihat tanda panah), kenapa tidakdibuat subrutin-nya skalian yach??

Kesimpulannya:

Enakan pake ASM atau Native C langsung untuk membuat program mikrokontroler AVR,agar kita bisa langsung menulis kode-kode secara efisien dan efektif.Bagaimana dengan BASCOM AVR? Boleh-boleh saja, cuman tetap harus hati-hati…

Page 55: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 55

Bonus-2: FlowCode AVR 3.0: Aplikasi I/O SederhanaKali ini Flowcode AVR kita gunakan untuk mencoba membuat sebuah aplikasi sederhana yangmelakukan pembacaan masukan di PORT A kemudian menampilkan hasil pembacaan tersebut, yangsebelumnya melalui suatu variabel DATANYA, ke PORT B. Rancangan Flowcode AVR-nyaditunjukkan pada Gambar 2.1.

Gambar 2.1

Kemudian kita kompail dan disimulasikan hasilnya (juga) bisa dilihat pada Gambar 2.1 tersebut.Perhatikan bahwa tidak semua masukan PORT A kita buat berlogika 1, hanya A7, A5, A3 dan A1.Hasilnya juga tidak semua LED pada PORT B menyala, hanya sesuai dengan PORT A saja, yaituB7, B5, B3 dan B1. Nah sekarang pertanyaannya:

Bagaimana dengan hasil kompilasi dalam bahasa C-nya (juga dalam bahasa ASM-nya)?

Berikut saya cuplik sebagian hasil kompilasi dalam bahasa C (baris 59-96), cukup yang utama dulu,selebihnya Anda bisa mencermati bahwa di awal program C-nya merupakan inisialisasi variabel,pemetaan mikrokontroler dan lain-lain. Perhatikan Gambar 2.2.

Page 56: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 56

Gambar 2.2

Pada cuplikan listing tersebut saya sudah memberikan catatan. Bagaimana dengan Anda? Apa yangdilakukan pada bagian inisialisasi, baris 76 dan 77? Instruksi MCUCSR = 0×00; digunakan untukmereset (memberikan logika 0) pada semua bit di register MCUCSR (MCU Control and Register),perhatikan penjelasan pada Gambar 2.3. Sedangkan WDTCR = 0×10; digunakan untuk mematikanwatchdog, perhatikan penjelasan register WDTCR (Watchdog Control Register) di Gambar 2.4.Langkah ini dilakukan oleh Flowcode AVR, menurut saya, untuk keamanan atau play safe saja.Karena kemungkinan kompailer C yang digunakan tidak mematikan watchdog secara otomatis (adabeberapa kompailer yang bisa melakukan-nya secara otomatis selama tidak secara eksplisitdinyatakan penggunaan watchdog).

Listing program selebihnya adalah sesuai dengan yang diharapkan, baca masukan seperti pada baris85, namun sebelumnya ada inisialisasi PORT A sebagai masukan, mengapa tidak langsung ajaDDRA = 0×00? Kok harus di-AND-kan segala dengan 0, khan hasilnya sama saja logika-0 khan?Aneh? Kemudian dilanjutkan dengan mengirimkan isi variabel dari pembacaan PORT A ke PORTB,lihat baris 91, yang sebelumnya (juga) diawali dengan inisialisasi PORT B sebagai luaran (nah kaloini caranya langsung).

Page 57: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 57

Gambar 2.3

Gambar 2.4

Page 58: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 58

Jika Anda berikan loop pada program, seperti pada Gambar 2.5, hasilnya juga sama saja, keunikanjuga terjadi lagi seperti saya jelaskan pada artikel sebelumnya26.

Gambar 2.5

Bonus-3: FlowCode AVR 3.0: Aplikasi LCD 2x16 karakterWow enaknya belajar pemrograman aplikasi mikrokontroler AVR menggunakan Flowcode 3 forAVR sebagaimana sudah saya tulis artikel-nya sejak awal27. Kali ini dicoba membuat aplikasidengan tampilan LCD 2×16, hanya sekedar menampilkan dua kalimat, masing-masing di baris-1 danbaris-2, diagram atau flow-nya ditunjukkan pada Gambar 3.1 (termasuk hasil simulasinya).

Hasil kompilasi kedalam Bahasa C saya tunjukkan satu persatu. Pada bagian pertama, sebagaimanaditunjukkan pada Gambar 3.2, merupakan deklarasi fungsi-fungsi makro untuk menangani LCD(baris 66 - 74). Terdapat 9 macam fungsi makro LCD dan hanya 3 yang akan digunakan dalamprogram, yaitu:

FCD_LCDDisplay0_Start(), digunakan untuk inisialisasi LCD;FCD_LCDDisplay0_PrintString(char* String, char MSZ_String), digunakan untukmenuliskan string, dan

26 Lihat pembahasan Bonus-127 Lihat pembahasan Bonus-1 dan Bonus-2

Page 59: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 59

FCD_LCDDisplay0_Cursor(char x, char y), digunakan untuk menempatkan kursor denganposisi kolom,baris).

Gambar 3.1

Gambar 3.2

Untuk fungsi FCD_LCDDisplay0_Start() listing programnya ditunjukkan pada Gambar 3.3. Apayang dilakukan oleh fungsi ini adalah melakukan inisialisasi tampilan LCD dengan antarmuka 4 bitdata (Flowcode 3 AVR hanya menyediakan antarmuka 4-bit data LCD walaupun bisa jugadigunakan rangkaian antarmuka 8-bit data LCD). Rangkaian yang digunakan menggunakanpemetaan PORT dan pin LCD sebagai berikut:

Page 60: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 60

#define LCD_2360334_BIT0 2#define LCD_2360334_BIT1 3#define LCD_2360334_BIT2 4#define LCD_2360334_BIT3 5#define LCD_2360334_RS 0#define LCD_2360334_E 1

`

Gambar 3.3

Untuk fungsi FCD_LCDDisplay0_PrintString() listingnya ditunjukkan pada Gambar 3.4. Fungsiini digunakan untuk menampilkan string ke LCD pada posisi kursor saat itu. Fungsi inimembutuhkan dua parameter, string yang akan ditampilkan dan jumlah karakter pada string tersebut.

Gambar 3.4

Page 61: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 61

Untuk fungsi FCD_LCDDisplay0_Cursor(char x, char y) listingnya ditunjukkan pada Gambar 3.5.Fungsi ini membutuhkan dua parameter yaitu x (untuk posisi kolom) dan y (untuk posisi baris), jikadituliskan FCD_LCDDisplay0_Cursor(0,1) artinya menempatkan kursor pada kolom pertama bariskedua, demikian seterusnya…

Gambar 3.5

Nah program utama ditunjukkan pada Gambar 3.6. Diawali dengan inisialisasi register MCUCSRdan WDTCR pada baris 373 dan 374 (baca artikel saya sebelumnya28). Kemudian dilanjutkandengan melakukan inisialisasi LCD (baris 381) menggunakan fungsi FCD_LCDDisplay0_Start().Diikuti dengan menampilkan string “Halo Flowcode3 (baris 386, angka 14 merupakan jumlahkarakter pada string yang bersangkutan), menempatkan kursor pada baris kedua kolom pertama(baris 391), menampilkan string “by ATMega32 (baris 396) dan diakhiri dengan infinite-loop ataukalang-takhingga (baris 399).

Jika Anda perhatikan baik-baik pada ketiga fungsi tersebut, maka bisa Anda temukan pemanggilanfungsi lain yaitu LCD_2360334_RawSend(char nIn, char nMask), yang digunakan untukmengirimkan satu karakter. Pendefinisian fungsi ini ada di dalam fungsiFCD_LCDDisplay0_GetDefines().

Program selengkapnya bisa diunduh disini29.

28 Lihat pembahasan Bonus-229 Klik http://www.4shared.com/file/HVLCKV_0/serial_lcd01.html

Page 62: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 62

Gambar 3.6

Bonus-4: FlowCode AVR 3.0: Menghitung Sapi!Kali ini kita akan belajar membuat program menggunakan Flowcode AVR30 untuk menghitung sapi-sapi kita yang masuk kandang. Caranya bagaimana? Kita gunakan sensor detektor sapi melaluiPORT A (yang disimulasikan menggunakan pushbutton) untuk mendeteksi sapi-sapi yang masuk kekandang. Sensor ini akan memicu proses perhitungan jumlah atau cacah sapi. Sementara ini hasilperhitungan ditampilkan melalui LED pada PORT B, bisa juga melalui 7segmen biar keren, tapi ituentar aja dech.

Silahkan membuat kerangka diagram alir menggunakan acuan Gambar 4.1. Pada blok Calculationmasih kita kosongkan…

Okey, langkah selanjutnya lakukan klik-ganda pada blok Calculation, sehingga dimunculkan kotakdialog yang ditunjukkan pada Gambar 4.2.

Ganti nama “Calculation” (pada Display Name) menjadi “Total Sapi” (tanpa tanda petik). Kemudianlanjutkan menuliskan persamaan untuk menghitung total sapi sebagai berikut: TOTAL = TOTAL +SAPI (pada bagian isian Calculations). Perhatikan Gambar 4.3.

30 Pada saat ebook ini ditulis sudah tersedia versi 4.3.3.6, silahkan di-unduh dihttp://www.4shared.com/file/kTQ_NYyL/Flowcode_AVR_Professional_4366.html

Page 63: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 63

Gambar 4.1

Gambar 4.2

Sensor detektor sapi disimulasikan menggunakan tombol tekan atau pushbutton yang dipasang padaPORTA.0. Jika tombol ditekan maka akan menghasilkan nilai 1 yang kemudian disimpan ke dalamvariabel SAPI. Dengan demikian, penekanan tombol pada PORTA.0 akan menambah nilai TOTALsebesar 1. Jika tidak ditekan, ya artinya nilai pada variabel SAPI tetap 0 (nol) dan tidak merubahnilai dari TOTAL, demikian seterusnya.

Page 64: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 64

Klik Variables pada kotak dialog Calculations untuk mulai mendefinisikan variabel-variabel yangterkait. Akan ditampilkan kotak dialog seperti pada Gambar 4.4.

Gambar 4.3

Gambar 4.4

Sekarang kita lanjutkan dengan mendefinisikan variabel-variabel yang terkait tersebut. Variabel yangakan kita definisikan adalah TOTAL dan SAPI. Penggunaan kedua variabel ini sudah saya jelaskansebelumnya, jika belum paham silahkan ditengok lagi, nanti baru kembali lagi kesini…

Klik pada tombol Add New Variable… sehingga dimunculkan kotak dialog Create sebagaimanaditunjukkan pada Gambar 4.5. Ketik “SAPI” (tanpa tanda petik) pada isian Name of New Variable

Page 65: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 65

dan pilih Byte pada Variable Type, akhiri dengan klik Ok. Lakukan hal yang sama untuk variabelTOTAL. Sehingga sekarang isi dari variabel kita seperti ditunjukkan pada Gambar 4.6.

Gambar 4.5

Gambar 4.6

Klik Close, kemudian kembali lagi ke kotak dialog Calculations dan akhiri dengan klik Ok. Hasildari diagram alir sampai tahap ini ditunjukkan pada Gambar 4.7.

Page 66: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 66

Gambar 4.7

Sekarang saatnya mengatur pengulangan (loop). Klik pada blok Loop sehingga ditampilkan kotakdialog seperti pada Gambar 4.8.

Gambar 4.8

Page 67: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 67

Silahkan Anda cermati kotak dialog tersebut, Anda bisa memilih antara Loop While dengan LoopCount. Pada isian Loop while, kita bisa mengisikan berbagai macam kondisi syarat pengulangan.Misalnya, tertulis angka 1 pada kotak dialog tersebut, artinya dianggap selalu benar, sehinggaterjadilah pengulangan terus menerus (infinite loop). Atau Anda bisa mengisikan syarat-syarattertentu untuk pengulangan, misalnya cacah < 4, cacah = 0 dan lain sebagainya.

Perhatikan juga pilihan Test the loop at, yaitu Start dan End. Apakah pengujian dilakukan di awalpengulangan (Start) atau diakhir (End)? Hal ini tentu saja berpengaruh terhadap jumlahpengulangan yang terjadi.

Isian Loop Count merupakan bentuk pengulangan yang pasti, berapa kali dilakukan pengulangan,Anda bisa mengisikan angka yang sesuai dengan kepentingan program.

Sementara ini biarkan isian seperti itu, klik saja Cancel untuk membatalkan.

Okey, kita lanjutkan dengan klik ganda pada blok Input, sehingga ditampilkan Gambar 4.9(perhatikan 3 tanda panah-nya).

Gambar 4.9

Ubah Display name (panah teratas) menjadi “Cek sensornya”. Klik tombol Variables… (sebelahkanan panah tengah), klik pada variabel SAPI dan klik tombol Use Variable. Perhatikan isian Portyang sudah terisi dengan PORT A dan ini sudah sesuai dengan program kita, so akhiri dengan klikOk.

Langkah selanjutnya adalah menentukan luaran melalui PORT B. Klik ganda pada blok Output.Mirip dengan cara menentukan masukan sebagaimana sudah saya jelaskan. Klik tombol Variables,pilih variabel TOTAL dengan cara yang sama seperti sebelumnya. Ganti isian Port menjadi PORTB. Hasil akhir dari diagram alir ditunjukkan pada Gambar 4.10.

Page 68: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 68

Gambar 4.10

Berikutnya adalah menambahkan tampilan LED pada Flowcode AVR untuk kepentingan simulasi.Klik pada ikon LED (ada di sebelah kiri atas gambar LED berjejer miring). Maka pada FlowcodeAVR akan ditampilkan kotak LED, perhatikan (panah pada) Gambar 4.11.

Untuk menghubungkan LED ini dengan PORT B, klik pada panah kebawah di LED dan pilihComponent Connections…, sehingga ditampilkan kotak dialog seperti Gambar 4.12. GantilahPORT A pada kotak dialog Component Connections.. tersebut dengan PORT B, bit 0 sampaidengan 7 untuk masing-masing LED.

Sekarang tambahkan pushbutton pada Flowcode AVR dengan klik ikon Switch (di sebelah kananikon LED yang telah Anda klik sebelumnya). Perhatikan Gambar 4.13.

Page 69: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 69

Gambar 4.11

Gambar 4.12

Page 70: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 70

Gambar 4.13

Kita atur Properties dari switch ini dengan klik tanda panah kebawah dan pilih Properties, sehinggaditampilkan Gambar 4.14. Jumlah pushbutton cuman 1, ganti angka pada Number of switch menjadi1 (perhatikan tanda panah yang terkait). Lanjutkan dengan klik pada Tab Switch label dan ketikseperti pada Gambar 4.15.

Okey, tugas membuat program sudah selesai, hasil akhir dari tampilan Flowcode AVR ditunjukkanpada Gambar 4.16.

Selanjutnya sudah bisa dilakukan simulasi. Klik Run (tanda panah pada Gambar 4.16) dan nikmatihasilnya! Kenapa? Wow pencacahan dilakukan dengan sangat cepat, ketikan kli pada pushbuttonLED pada PORT B berubah secara cepat (sekali)! Bagaimana mengatasinya?

Sisipkan tundaan di dalam flowchart sebagaimana ditunjukkan pada Gambar 4.17. Kemudianjalankan lagi simulasinya…

Listing program utama (main()) dalam Bahasa C ditunjukkan pada Gambar 4.18

Terima kasih...!

Page 71: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 71

Gambar 4.14

Gambar 4.15

Page 72: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 72

Gambar 4.16

Gambar 4.17

Page 73: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 73

Gambar 4.18

Bonus-5: Animasi LED Mikrokontroler ATMega32 dengan C dan AssemblyArtikel ini sengaja saya tulis sebagai awal pembelajaran bagaimana membuat sebuah programaplikasi mikrokontroler AVR (khususnya ATMega32 dengan frekuensi kristal 7,3728MHz) untukmembuat animasi LED berjalan dari pin 0 hingga 7.

Rangkaian yang digunakan ditunjukkan pada Gambar 5.1, sengaja LED disusun secara CA ataucommon Anoda, sehingga untuk menyalakan LED harus dikirimkan logika ‘0 .

Page 74: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 74

Gambar 5.1

Untuk kompilasi digunakan AVR Studio versi 4.0 (silahkan unduh GRATIS darihttp://www.atmel.com). Program kita awali dengan beberapa macam deklarasi, keterangan sengajasaya masukkan dalam listing program untuk memudahkan pembelajaran langsung dari listingnya,perhatikan instruksi yang diawali dengan ‘.’ merupakan directive dari AVR Studio, bukan instruksiassembly mikrokontroler AVR:

;------------------------------------------;animasi LED berjalan dalam bahasa Assembly;untuk mikrokontroler Atmel AVR ATMega32;frekuensi kristal 7.3728MHz;http://agfi.staff.ugm.ac.id;------------------------------------------.nolist ;bagian ini.include "m32def.inc" ;tidak perlu ditampilkan dalam.list ;berkas list

Ingat berkas “m32def.inc” kita sertakan (directive .include) karena akan digunakan pustakaATMega32 dalam program kita, tetapi tidak perlu disertakan dalam hasil berkas LIST-nya (hasilkompilasi program) menggunakan directive .nolist dan .list.

Selanjutnya dilakukan inisialisasi awal:

;----------inisialisasi konstanta dan register.equ led=0b01111111 ;portb-7 ON.def temp=r16 ;temp sebagai alias untuk R16;====== program utama ====================

Page 75: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 75

.cseg

.org 0000 ;awal kode program pada alamat 0x0000

Variabel LED digunakan untuk menyimpan data yang akan dikeluarkan melalui PORTA, awalnyadiisi 0b01111111, artinya LED-0 akan dinyalakan terlebih dahulu. Variabel TEMP digunakanvariabel alias untuk R16 (register-16), Anda boleh menggunakan nama alias apa saja, misalnya, tahu,brokoli, wortel dan lain sebagainya (emang buat sayur yach? he he he)…

Program diawali dengan mendeklarasikan segmen kode (.cseg) dan dimulai alamat0×0000 (.org) -ini paling logis kita siapkan di alamat tersebut, silahkan saja kalo mo diganti dengan alamatlain asalkan tidak konflik dengan kepentingan lainnya dalam program. Ragu-ragu? Ya sudah ikutisaja pake alamat 0×0000, aman dech…!

Selanjutnya kita lakukan INISIALISASI STACK:

;menyiapkan alamat SP - Stack Pointer;harus dituliskan sebagai inisialisasi SP pada RCALL;jika tidak dilakukan program akan macet! ldi temp,low(ramend) out spl,temp ldi temp,high(ramend) out sph,temp

Jika Anda lupa atau tidak melakukan inisialisasi stack, ada kemungkinan besar akan terjadikemacetan pada program, artinya program seakan-akan stuck. Jika Anda menggunakan simulatorsemacam Proteus (yang pernah saya coba menggunakan Proteus 7.6 SP4), program akan berjalantanpa kesalahan, namun ketika dicobakan ke rangkaian sesungguhnya program akan berhenti (stuck).Saran saya, ada baiknya tidak terlalu mengandalkan simulator mikrokontroler semacam Proteus,usahakan untuk mencoba di dunia nyata, di rangkaian sesungguhnya. Berikut cuplikan programuntuk menginisialisasi stack di akhir ruang RAM (RAMEND).

Karena STACK pada ATMega32 ukuran 16bit atau 2byte, maka pengisian SP dilakukan dua kaliuntuk SP Low atau SPL dan SP High atau SPH. Fungsi Low() dan High()masing-masing digunakanuntuk mendapatka bagian LOW atau HIGH dari variabelRAMEND yang suda tersimpan dalam“m32def.inc”. Pengisian register pada AVR tidak bisa dilakukan langsung, dalam hal ini melaluivariabel TEMP baru kemudian dipindahkan ke SPL dan SPH. Hal ini berlaku juga untuk penjelasanterkait berikut ini…

Berikutnya, karena kita menggunakan mikrokontroler AVR, sudah wajib kita menentukan sebuahPORT sebagai masukan atau luaran, jika masing-masing bit pada register DDRx diberi nilai ‘1artinya sebagai luaran (jika ‘0 sebagai masukan). Karena digunakan PORTA maka digunakanregister DDRA (penulisan ke DDRA (out ddra,temp) tidak bisa langsung, sehingga digunakanvariabel TEMP (ldi temp,0b01111111)):

;----------- inisialisasi port--------------------- ldi temp,0b11111111 ;set semua bit register temp out ddra,temp ;tuliskan ke register DDRA

Selanjutnya program utama dituliskan:

;--------portb telah di seting menjadi luaran ------ ldi temp,led ;isi register temp dengan led7

Page 76: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 76

sec ;set carry flag (agar carry=1, LED mati)putar: out porta,temp ;kirim data ke porta (LED) rcall tunda ;tunda sesaat 0.25 detik ror temp ;putar satu bit ke kanan melalui carry rjmp putar ;lompat ke label putar

Data disimpan terlebih dahulu di variabel TEMP (ldi temp,led), kemudian baru dikeluarkan kePORTA (out porta,temp), tidak bisa langsung dikirim ke PORTA. Untuk menggeser dan memutar bitpada variabel TEMP digunakan instruksi ROR (Rotate Right Using Carry), karena melewati Carrysedangkan Carry biasanya isinya ‘0 , maka harus diberi ‘1 dulu dengan instruksi SEC. Pengulangandilakukan dengan melompat kembali ke label ‘putar’ menggunakan rjmp putar.

Bagian akhir dari program adalah subrutin penundaan sekitar 0.25detik (lihat pada listing programlengkap). Kok bisa ya? Ya pake saja program AVR Delay Loop Generator, sebagaimana screenshoot-nya ditunjukkan pada Gambar 5.2, silahkan unduh gratis di-sini31.

Memang menggunakan pengulangan register, penundaan 0.25 detik tidak akan akurat, tetapilumayan buat melakukan penundaan sesaat. Jika Anda ingin akurat, gunakan fasilitas Timer/Counterpada mikrokontroler AVR yang bersangkutan.

Gambar 5.2

Program selengkapnya sebagai berikut (ingat akhiri program dengan .exit)…

31 http://www.electronics-lab.com/downloads/cnt/fclick.php?fid=23

Page 77: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 77

;------------------------------------------;animasi LED berjalan dalam bahasa Assembly;untuk mikrokontroler Atmel AVR ATMega32;frekuensi kristal 7.3728MHz;http://agfi.staff.ugm.ac.id;------------------------------------------.nolist ;bagian ini.include "m32def.inc" ;tidak perlu ditampilkan dalam.list ;berkas list

;----------inisialisasi konstanta dan register.equ led=0b01111111 ;portb-7 on.def temp=r16 ;temp sebagai alias untuk R16

;====== program utama ====================.cseg.org 0000 ;awal kode program pada alamat 0x0000

;menyiapkan alamat SP - Stack Pointer;harus dituliskan sebagai inisialisasi SP pada RCALL;jika tidak dilakukan program akan macet!

ldi temp,low(ramend)out spl,templdi temp,high(ramend)out sph,temp

;----------- inisialisasi port---------------------ldi temp,0b11111111 ;set semua bit register tempout ddra,temp ;tuliskan ke register DDRA

;--------portb telah di seting menjadi luara ------ldi temp,led ;isi register temp dengan led7sec ;set carry flag (agar carry=1, LED mati)

putar:out porta,temp ;kirim data ke porta (LED)rcall tunda ;tunda sesaat 0.25 detikror temp ;putar satu bit ke kanan melalui carryrjmp putar ;lompat ke label putar

; =============================; delay loop generator; 1843200 cycles:; untuk frek 7.3728MHz; penundaan 0.25 detik; -----------------------------; delaying 1843182 cycles:tunda: ldi R17, $12WGLOOP0: ldi R18, $A1WGLOOP1: ldi R19, $D3WGLOOP2: dec R19 brne WGLOOP2 dec R18 brne WGLOOP1 dec R17

Page 78: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 78

brne WGLOOP0; -----------------------------; delaying 18 cycles: ldi R17, $06WGLOOP3: dec R17 brne WGLOOP3; =============================

ret; =============================.exit ;akhir program

Sedangkan dalam Bahasa C Native (menggunakan AVR Studio 4 dan GCC) ditunjukkan lengkapsebagai berikut:

//========================================// animasi LED di PORTA//=========================================#include#include //pustaka DELAY untuk frek 1MHz#define PORTLED PORTB //penentuan alias untuk PORTB#define DDRLED DDRB //penentuan alias untuk DDRB

int main (void){

unsigned char temp=0x80; // data untuk LEDDDRLED=0xFF; // PORT sebagai luaranwhile(1){

PORTLED=temp; //tulis ke port_delay_ms(250); //lakukan penundaan sesaattemp=(temp<<7)|(temp>>1);} //ROR dalam bahasa C

return(0);}

Silahkan Anda cermati perbedaan penulisan menggunakan Assembly dan Native C (gcc), untukurusan penundaah digunakan fungsi _delay_ms() yang sudah didefinisikan di berkas “delay.h” danberlaku untuk frekuensi operasional 1MHz. Sedangkan inisialisasi PORT sama seperti padaAssembly. Yang mungkin Anda pertanyakan adalah pengganti perintah ROR yaitu menggunakaninstruksi “temp=(temp<<7)|(temp>>1);“, untuk ROL tinggal Anda ganti dengan“temp=(temp<<1)|(temp>>7);” dan “unsigned char temp=0×80;” menjadi “unsignedchar temp=0×01;“.

Demikian penjelasan singkat saya tentang aplikasi animasi LED berjalan menggunakan bahasaassembly dan C untuk mikrokontroler AVR ATMega32. Semoga bermanfaat dan sukses selalu untukAnda!

Bonus-6: Aplikasi Pushbutton Mikrokontroler ATMega32 dengan AssemblyJika pada kesempatan sebelumnya saya bahas tentang animasi LED menggunakan ASsembly dan C,maka kali ini kita akan belajar tentang konsep masukan menggunakan pushbutton, dalam duniaaplikasi, masukan digital ini bisa berasal dari berbagai macam sensor.

Rangkaian yang kita gunakan mirip dengan animasi LED, hanya saja sekarang kita tambahkan 2buah pushbutton yang dihubungkan ke PORTD.0 dan PORTD.1, perhatikan Gambar 1.

Page 79: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 79

Gambar 6.1

Selanjutnya kita buat programnya dengan diagram alir yang ditunjukkan pada Gambar 6.2.

Gambar 6.2

Page 80: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 80

Program selengkapnya sebagai berikut:

;=======================================================================;program aplikasi pushbutton dan animasi LED;http://agfi.staff.ugm.ac.id;=======================================================================

.nolist

.include "m32def.inc"

.list

;-----------inisialisasi konstanta dan register---------------------------------.equ led=0b10000000 ;variabel LED sebagai data.def temp=r16.def delay1=r17.def delay2=r18.def delay3=r19

;--- deklarasi segmen untuk kode/program -----------.cseg.org 0000 ;awal kode program pada alama 0x0000

; menyiapkan alamat SP - Stack Pointer ----------------; harus dituliskan sebagai inisialisasi SP pada RCALL

ldi temp,low(ramend)out spl,templdi temp,high(ramend)out sph,temp

;-----------inisialisasi port-----------------------------------------------

ldi temp,0b11111111 ;inisialisasi untuk pin diout ddrb,temp ;PORTB sebagai luaran semuaclr temp ;inisialisasi untuk pin diout ddrd,temp ;PORTD sebagai masukan semuaser temp ;inisialisasi untuk pin diout portd,temp ;PORTD agar aktif semua internal pull-

up-nyaldi temp,led ;persiapan data untuk animasi LED

kanan:out portb,temp ;keluarkan melalui PORTBsbis pind,0 ;cek apakah pind,0 HIGHrjmp kiri ;YA! lompat ke label kirircall tunda ;TIDAK!ror temp ;putar satu bit ke kananrjmp kanan ;lagi!

kiri:out portb,temp ;keluarkan melalui OPRTBsbis pind,1 ;cek apakah pind,1 HIGHrjmp kanan ;YA! lompat ke label kananrcall tunda ;TIDAK!rol temp ;putar satu bit ke kiri

Page 81: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 81

rjmp kiri ;lagi!

; =============================; delay loop generator; 2000000 cycles:; -----------------------------; delaying 1999998 cycles:tunda: ldi R17, $12WGLOOP0: ldi R18, $BCWGLOOP1: ldi R19, $C4WGLOOP2: dec R19 brne WGLOOP2 dec R18 brne WGLOOP1 dec R17 brne WGLOOP0; -----------------------------; delaying 2 cycles: nop nop ret; =============================.exit ;akhir program

Penjelasan:

Untuk penjelasan tentang inisialisasi stack dan rutin tundaan silahkan lihat artikel bonus-5;Perhatikan blok inisialisasi PORT, untuk menentukan apakah suatu PORT digunakansebagai luaran atau masukan digunakan register DDRx, dengan x diisi A, B, C atau Dmenyesuaikan dengan penggunaan port yang digunakan. Dalam kasus inidigunakan DDRB dan DDRD, masing-masing untuk PORTB danPORTD. Logika ‘1 untukluaran, logika ‘0 untuk masukan.Sekali lagi penulisan ke DDRx tidak bisa dilakukan langsung, artinya Anda tidak bisamemberikan instruksi, misalnya, ‘out ddrd,0b00000000 yang mengakibatkan adanyakesalahan saat kompilasi. Gak percaya? Ya silahkan dicoba sendiri…Selanjutnya label ‘KANAN‘ dan ‘KIRI‘ digunakan untuk melakukan animasi LED sesuaidengan pushbutton yang ditekan. Pada label KANAN, diawali dengan mengeluarkan dataTEMP ke PORTB, kemudian diikuti dengan instruksi SBISyang merupakan instruksi “Skipif Bit in I/O Register is Set“, artinya abaikan instruksi berikutnya jika bit yang diperiksabernilai HIGH atau berlogika ‘1 . Karena yang diperiksa adalah PORTD.0, dankonfigurasinya adalah aktif rendah (ditekan berarti HIGH), sehingga jika tidak ditekan(dalam kondisi 1 atau SET), maka instruksi RJMP KIRI akan diabaikan, dan programmelanjutkan ke penundaan sesaat (RCALL TUNDA), melakukan rotasi bit ke kanan padaTEMP (ROR TEMP) dan mengulang lagi (RJMP KANAN).Hal di atas berlaku juga untuk label KIRI, demikian seterusnya.

Page 82: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 82

INFORMASI TENTANG PELATIHAN MIKROKONTROLER

Hanya dengan minimal 5 JAM32 (karena langsung dibimbing oleh Pakarnya)Anda bisa memahami konsep dasar dan membuat aplikasi mikrokontroler AVR!

Ditambah dengan konsultasi GRATIS Anda bisa meningkatkankemampuan Anda dalam mikrokontroler AVR!

Anda juga bisa menghasilkan INCOME TAK TERBATAS!Dengan memanfaatkan kemampuan Anda di bidang mikrokontroler!

Pelatihan yang saya selenggarakan memberikan konsep dasar dan tip/trik pembuatan aplikasimikrokontroler AVR!

Informasi & pendaftaran silahkan akses ke http://klikdisini.com/pelatihanavr

INFORMASI PERANGKAT KERAS UNTUK BELAJARMIKROKONTROLER AVR

Anda mengalami kesulitan dalam belajar Mikrokontroler AVR??Bingung memilih/menentukan hardware yang bisa dipakai dengan

mudah untuk belajar Mikrokontroler AVR?Pengin yang simpel, murah dan komplit untuk belajar Mikrokontroler

AVR?

Kekhawatiran Anda akan berakhir! Kesulitan Anda akan segera teratasi Apa yang Anda cariakan segera ditemukan! Dapatkan PENAWARAN ISTIMEWA selama promosi!

Dapatkan informasi selengkapnya di http://klikdisini.com/jualavrbasic

Pak Agfi, salut buat jiwa “technopreneur” yang kuat dan inovatif. Saya bisa lihat di tulisan -tulisan Bapak. Btw, saya sendiri juga sedang belajar untuk mengembangkan bidang

otomasi, esp. PLC dan SCADAHandy (http://learnautomation.wordpress.com/)

btw,,saya sudah mempunyai buku mikon mas dah lama bgt,, thanx atas bukunyamas,,saya jadi bisa memahami mikon,,saya juga sudah bisa membuat alat yg berbasis

mikon,,khususnya at89sxxRuby

32 Waktu minimal pelatihan, Anda juga bisa menambah jumlah jam jika masih merasa kurang – tingkat lanjut!

Page 83: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 83

Belajar Mikrokontroler AT89C51/52/55:Teori dan Aplikasi, Edisi 2

Buku ini ditujukan bagi mereka yang ingin memanfaatkanmikrokontroler tipe CISC yaitu AT89C51/52/55 (seriAT89 dari Atmel, Inc.) dalam aplikasi pengontrolanelektronik. Selain itu juga dalam rangka memperkayapustaka nasional dalam bidang elektronika maupun sistemelektronika.

Buku yang terdiri dari 7 bagian ini mengupas tuntasAT89C (sudah obsolette diganti dengan seri AT89S) atauAT89S mulai dari awal tentang arsitektur dasar keluargaAT89 atau seri MCS-51, set instruksi (termasuk carapengeditan program hingga siap untuk disimpan ke dalamFlash PEROM AT89C), kanal paralel (termasukkarakteristik dari masing-masing port dan aplikasinya),karakteristik timer dan counter, kanal serial dan

penanganan sistem interupsi.

Program mikrokontroler disimpan ke dalam Flash PEROM-nya AT89, sekaligus bisa juga dihapus,keunggulan ini dapat dimanfaatkan sebagai sarana belajar mikrokontroler, karena tidak memerlukanmemori program luar seperti EPROM maupun EEPROM, yang membutuhkan peralatan pengisiandan penghapusan yang merepotkan. Sehingga pada bagian terakhir dibahas secara singkat pembuatanalat untuk mengisi (sekaligus menghapus) program dari mikrokontroler AT89 menggunakanPemrogram Easy Downloader 2.2, selain itu buku ini dilengkapi dengan CDROM yang berisidokumentasi lengkap Pemrogram Easy Downloader 2.2 dan program pendukung untuk kompilasidan informasi lainnya.

Anda bisa mendownload daftar isi33 dan/atau contoh bab34 yang ada di buku ini… monggo…

Untuk pemesanan secara online:

http://www.gavamedia.net/products-page/microcontroller-robotika-dan-plc/belajar-mikrokontroler-at-89c515255-teori-dan-aplikasi-edisi-2/

33 http://www.esnips.com/doc/e2fdc2b1-84e6-4a54-a7dd-6b311894e1a4/isi_mcs5134 http://www.esnips.com/doc/cef364e2-6759-462f-9303-4b99c62f7db0/mcs51_03

Page 84: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 84

PLC: Konsep, Pemrograman dan AplikasiOmron Sysmac dan ZEN

PLC atau Programmable Logic Controller adalah alatkontrol terprogram yang sudah banyak dijumpai dandipakai dalam industri-industri untuk pengontrolan proses-proses produksi, buku ini ditujukan kepada siapa saja yangingin belajar PLC, khususnya Omron Sysmac dan ZENProgrammable Relay.

Buku ini tersusun dalam 7 Bab, Bab 1 membahas dasar-dasar atau konsep dasar PLC (Programmable LogicController) mulai dari sejarah, konsep dasar PLC hinggajalur-jalur keluaran dan masukan PLC secara umum. PadaBab 2 dibahas tentang PLC Omron seri Sysmac atau yangdikenal dengan tipe CPM1A/CPM2A mulai dari konsepjalur keluaran dan masukan hingga struktur memori didalam PLC tersebut.

Pada Bab 3 dibahas tentang ZEN Programmable Relay secara garis besar, fitur-fitur yang dimiliki,area memori hingga catatan khusus untuk pengguna PLC Omron Sysmac jika ingin menggunakanZEN Programmable Relay. Kemudian di Bab 4 dijelaskan konsep-konsep pemrograman diagramtangga ditinjau dari PLC Omron Sysmac.

Pada Bab 5 dijelaskan tentang perangkat lunak yang digunakan dalampemrograman PLC, baikSyswin v3.4, ZEN Support Software v3.0 (serta simulatornya) dan PLC Simulator v1.0 karya TangTung Yan yang bisa digunakan untuk belajar pemrograman diagram tangga tanpa harus memilikiPLC Sysmac yang harganya mahal.

Aplikasi untuk masing-masing PLC, Sysmac dan ZEN Programmable Relay dibahas pada Bab 6 danBab 7. Khusus untuk PLC Sysmac, saya membagi dua macam aplikasi, yaitu dasar dan lanjut,sedangkan pada ZEN dikelompokkan berdasar fungsi-fungsi yang ada pada ZEN tersebut.

Anda bisa mendownload daftar isi35 dan/atau contoh bab36 yang ada di buku ini… monggo…

Untuk pemesanan secara online:

http://www.gavamedia.net/products-page/microcontroller-robotika-dan-plc/plc-konsep-pemrograman-dan-aplikasi/

35 http://www.esnips.com/doc/c7a08a88-3662-4f33-b6d9-7f44d81f572f/isi_plc36 http://www.esnips.com/doc/d2484bf8-0d3d-4234-a2e3-dab82aafa8e7/plc06

Page 85: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 85

Penapis Aktif Eltronika: Teori dan PraktekBuku ini ditujukan bagi para hobist maupun mahasiswaD3 dan S1 jurusan atau program studi Elektronika atauElektronika dan Instrumentasi agar dapat digunakanuntuk membantu mengetahui sekaligus memahamitentang seluk-beluk Penapis Aktif Elektronika secarateori dan praktek. Cakupan buku (terdiri atas 8 bab) inimeliputi antara lain:

Dasar-dasar penggunaan penguat operasionalsebagai dasar rangkaian penapis aktifDasar-dasar penapis (low-pass, high-pass, band-pass dan notch)Penapis aktif lolos-rendah dan tinggi OrderPertamaPenapis VCVS Order KeduaPenapis Ragam-umpanbalik Order KeduaPenapis-penapis Order TinggiPenapis aktif Notch dan Lolos-pitaPenapis Peubah-kondisi (state variable).

Anda bisa mendownload daftar isi37 dan/atau contoh bab38 serta bonus39 yang ada di buku ini…monggo…

Untuk pemesanan secara online:

http://www.gavamedia.net/products-page/komputer-dan-teknologi-informasi/penapis-aktif-elektronika-teori-dan-praktek/

37 http://www.esnips.com/doc/d5dd6e60-4940-4d7b-b58d-dec153ba4ca7/isi_tap38 http://www.esnips.com/doc/ddd17fc3-cc8f-4eff-b131-b838d9003e7f/tapis0439 http://www.esnips.com/doc/4808c7b5-55f0-4838-a6e7-f0b3551b9c02/filters

Page 86: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 86

Belajar Bahasa Assembly dengan Emu8086Segala sesuatu untuk mempelajari Bahasa Assembly dapatAnda peroleh menggunakan perangkat lunak Emu8086(Emu8086, Inc), yang digunakan dalam buku ini adalahversi 2.58.

Bab 1 Membicarakan tentang pengertian sistem bilangandalam dunia komputer terutama dalam pemrogramanBahasa Assembly, termasuk operasi aritmetika yangterkait. Bab 2 membicarakan tentang perkembanganprosesor atau CPU pengertian Bahasa Assembly termasukpenggunaan secara umum Emu8086, Emulator dan Drivesemu (virtual drive). Bab 3 menjelaskan cara-carapengaksesan memori dalam pemrograman BahasaAssembly termasuk pengertian memori stack danwataknya, dilengkapi dengan contoh-contoh program. Juga

diberikan penjelasan tentang variabel dalam permograman Bahasa Assembly serta cara-carapenggunaannya. Termasuk dalam bab ini dibahas tentang larik (array), pengalamatan variabel dankonstanta serta tentang stack.

Pada Bab 4 dibicarakan secara singkat instruksi-instruksi pada prosesor 80×86 yang meliputiinstruksi untuk transfer data, aritmetika, manipulasi bit, transfer kontrol, string, interupsi dan kontrolprosesor. Bab 5 diulas berbagai macam interupsi Prosesor 8086 dan cara penggunaannya. Bab 6dibahas tentang cara membuat dan menggunakan prosedur dan makro dibicarakan pada bab ini.Selain itu program Emu8086 dilengkapi fungsi-fungsi siap pakai yang memudahkan dalampembuatan program Bahasa Assembly.

Sedangkan pada Bab 7, jika Anda suka dengan elektronika, maka dijelaskan bahwa dengan BahasaAssembly-pun Anda bisa melakukan pengamatan dan pengendalian perangkat keras di luar komputer(yang biasa juga dikenal sebagai Teknik Antarmuka PC), tentunya bisa disimulasikan dengan pirantisemu (virtual devices) yang telah disediakan oleh Emu8086.

Program EMU8086 bisa diunduh disini40 sedangkan listing program dalam buku bisadiunduh disini41. Anda bisa mendownload daftar isi42 dan/atau contoh bab43 yang ada di buku ini…monggo…

Untuk pemesanan secara online:

http://www.gavamedia.net/products-page/komputer-dan-teknologi-informasi/belajar-bahasa-assembly-dengan-emu-8086/

40 http://www.4shared.com/network/search.jsp?searchmode=2&searchName=emu808641 http://www.esnips.com/doc/72832fb6-3e0f-485a-a403-720c02e34c06/program42 http://agfi.staff.ugm.ac.id/pdf/daftar_isi_asm.pdf43 http://agfi.staff.ugm.ac.id/pdf/sampel_asm03.pdf

Page 87: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 87

Pengendalian Mobile Robot (MOBOT)dengan MOBOTSIM v1.0

Buku ini menjelaskan teknik-teknik pengendalian robotmobile atau mobot menggunakan bantuan perangkat lunaksimulasi mobot MOBOTSIM v1.0 dari mobotsoft. Bukuini cocok untuk siapa saja yang akan menekuni teknikpengendalian robotika dasar terutama mobot atau MobileRobot, sedangkan perangkat lunak MOBOTSIM bisadigunakan untuk belajar teknik pengendalian sekaligusmelakukan berbagai eksperimen pengendalian mobot,seperti penghindaran rintangan (obstacle avoidance),penerapan kecerdasan buatan dan lain sebagainya.

Buku ini tersusun atas 5 Bab. Pada Bab 1 diberikanpenjelasan tentang perangkat lunak MOBOTSIM v1.0,kemudian dilanjutkan pada Bab 2 dibahas tentang teknikpengendalian mobot dasar tanpa menggunakan sensor,

sedangkan pada Bab 3 dan 4 masing-masing dibahas bagaimana cara mengendalikan mobot denganbantuan sensor posisi dan sensor jarak (dalam dunia nyata biasanya berupa sensor ultrasonik atausejenisnya). Akhirnya pada Bab 5 dijelaskan teknik penghindaran rintangan dengan metode VFF danVFH yang dikembangkan sejak tahun 1989 oleh Borenstein dan kawan-kawan dari MichiganUniversity.

Buku ini juga dilengkapi dengan CDROM yang isinya perangkat lunak MOBOTSIM v1.0 edisievaluasi serta berbagai macam informasi yang berkaitan dengan robotika terutama mobot atauMobile Robot serta bonus-bonus lainnya khusus untuk para pembaca.

Anda bisa mendownload daftar isi44 dan/atau contoh bab45 yang ada di buku ini… monggo…

Untuk pemesanan secara online:

http://www.gavamedia.net/products-page/microcontroller-robotika-dan-plc/pengendalian-mobile-robot-mobot-dengan-mobotsim-v1-0/

44 http://www.esnips.com/doc/cec2661a-0c49-4e83-8bb5-f1840871a0a5/isi_mobot45 http://www.esnips.com/doc/ebb66bc3-823e-4606-b124-3b4157b63185/mobot02

Page 88: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 88

Pasti Ada Hikmahnya...!Subhanallah... dilihat dari covernya begitu sederhana namun ketika membuka halaman buku initrnyata "WAH..!!!" saya menemukan sesuatu yang amat sangat istimewa.. buku ini dapat mengubahmindset seseorang, dari yang berpikir tidak memiliki harapan menjadi memiliki smngt yang besartuk menjalani kehidupan ini, dengan rasa syukur dan sabar. Dan seseorang yang beruntung adalahdia yang dapat mengambil Hikmah dari setiap kejadian. Wallahu'alam – M.F. Hadikusuma

pengalaman hidup yang LUAR BIASA!!!!!!!!!!!membuka mata n hati, karena dari sebuah pengalaman yg

sangat kecill bisa menjadi pelajaran hdup bagi smuaumat. mengingatkan saya,yang tiap harinya hanya berdoan meminta, dan lalai untuk mensyukuri anugerahNYA ...salut ma pak agfi,bisa berbagi pengalaman hidup sambil

dakwah melalui media yang ringan tpi sangatmengenaaaa.. sukses selalu pak,.. – Eni Cute

Model penulisan per kasus yang simpel, tidak bertele-tele, langsung ke inti dari buku ini membuat yang

membaca tidak cepat bosan. Hal lain yang menarikadalah isi yang ditulis juga dialami oleh Pak Agfi, jadiketika membaca, saya merasa akrab, mungkin karena

memang isinya dapat terjadi sehari-hari (tidak mengada-ada), lebih terasa sebagai share pengalaman sendiri

sehingga terasa menyampaikan dengan hati dan mengena. Saya merasa tidak digurui, tapi sayamerasa diingatkan, terima kasih Pak. – Sri Supadmi

Buku ini COCOK untuk Anda maupun HADIAH dari untuk keluarga maupun sahabat-sahabat dekat Anda

Buku ini mengungkap renungan-renungan perjalanan hidup seorang dosen Elektronika &Instrumentasi (ELINS), AGFIANTO EKO PUTRA, yang banyak di-share kepada kolega maupunmahasiswa2-nya, sehingga banyak di antara mereka mulai memandang kehidupan ini menjadi lebihoptimis dan bersemangat, serta memiliki tujuan-tujuan yang mulia, Insya Allah Anda-pun juga bisamengalaminya...

Page 89: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 89

Dalam buku ini, Anda akan...

Mengetahui apa dan bagaimana menangani Virus KebiasaanMenemukan jawaban Mengapa Hasil Seminar Motivasi tidak bertahan lama...Mengetahui bahaya dari sikap "ntar dulu ach..."Menyadari bahwa Kegagalan adalah...Bagaimana sebuah Laptop yang error bisa memberikan pelajaran bagi pemiliknya...Mewaspadai pikiran-pikiran kotor...Bagaimana dompet yang (nyaris) hilang juga bisa memberikan pelajaran atau hikmah...Mengenal secara sekilas kekuatan D.U.I.T - Doa, Usaha, Ikhlas dan Tawakal...Mengetahui rahasia besar dalam film Kun Fayakun...dan masih banyak lagi lainnya...

Total lebih dari 40 kisah/artikel ditambah dengan 10 artikel BONUS!

Unduh ebooknya di http://klikdisini.com/pah

Pemesanan langsung secara ONLINE di http://klikdisini.com/jual_pah

Page 90: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 90

Tip dan Trik Mikrokontroler AT89 danAVR: Tingkat Pemula hingga Lanjut

Buku ini merupakan kumpulan berbagai macamcatatan atau artikel selama penulis melakukanberbagai macam penelitian dan eksperimen hinggatahun 2009. Banyak hal yang penulis dapatkanselama itu, terutama ilmu dan pengembanganaplikasi atau terapan mikrokontroler keluargaAtmel AT89 dan Atmel AVR. Semoga para pembacajuga mendapatkan hal yang sama serta bisa ikutserta dalam menyumbangkan acuan dalam bidangmikrokontroler AT89 dan AVR. Juga sayatambahkan sebuah artikel bagaimana caramendapatkan penghasilan dengan menguasaiteknologi mikrokontroler, sehingga diharapkan bisamenjadi ilmu bermanfaat bagi calon-calonTechnopreneur di Indonesia, amin!

saya tersugesti, klo baca bukunya pak agfi, sayabaru bisa paham… padahal saya juga uda punyabuku mikro yg lain, spt nya gak enak, klo gak bacapunya pak agfi, aneh memang…Teguh Budiman

Waduh, emang sip banget penjelasannya pak Agfi, salah satu yang saya kagumi dari pak Agfiadalah kalo pak Agfi njelasin sesuatu pasti dengan ringkas, padat, berisi, to the point danmudah di mengerti.. saya juga senang baca buku-bukunya pak Agfi lho, nah.. itu adalah tanda-tanda dari dosen, entrepreneur dan sekaligus penulis yang profesional..| salut dah buat pakAgfi.. Seandainya sebagian besar dosen bisa aktif seperti pak Agfi, pasti Indonesia makin majuneh..Herlambang (http://indomicron.co.cc/)

Pak Agfi, salut buat jiwa “technopreneur” yang kuat dan inovatif. Saya bisa lihat di tulisan -tulisan Bapak. Btw, saya sendiri juga sedang belajar untuk mengembangkan bidang otomasi,esp. PLC dan SCADAHandy (http://learnautomation.wordpress.com/)

Pesan secara ONLINE dihttp://www.gavamedia.net/products-page/buku-baru/tip-dan-trik-

mikrokontroler-at89-dan-avr/

Page 91: Tutorial.pemrograman.mikrokontroler.avr v1.0

Copyright (c) 2010 by Agfianto Eko Putra and Dhani Nugraha - 91

Untuk Kerjasama Seminar/Proyek/Coachingsilahkan hubungi 08886931260 atau email ke [email protected]

Seminar Teknologi Embedded Electronics (mikrokontroler, fpga, plc)Seminar/Talkshow Pasti Ada Hikmahnya & Transformasi Diri

Otomasi Sistem, Coaching Tugas Akhir (S1, S2, S3)