Anda di halaman 1dari 113

DAFTAR ISI

HALAMAN JUDUL…………….…………… …........... i


HALAMAN PENGESAHAN…………………………..iii
PRAKATA…………………………………………..…..iv
KONTRAK PERKULIAHAN…………………….. ,,,....vi
SILABUS……………………………………………....xiii
SATUAN ACARA PERKULIAHAN………………...xvii
DAFTAR ISI…………...…………………………… xxxi
DAFTAR GAMBAR……………………………….xxxiii
BAB I MIKROKONTROLER AVR DAN CODE
VISION AVR
1.1 SEKILAS TENTANG KELUARGA AVR………….1
1.2 MIKROKONTROLER AVR DAN BAHASA C ….. 4
1.3 CODE VISION AVR………………………………...7
1.4 INSTALASI CODEVISIONAVR ….……………….9
1.5 UNINSTALL CODEVISIONAVR………………...13
1.6 MEMBUAT PROGRAM BARU ………………….13
1.7 RANGKUMAN…………………………………….18
1.8 TUGAS……………………………………………..19
1.9 DAFTAR BACAAN……………………………….19
BAB II SOFTWARE PROTEUS 7
2.1 PENGENALAN …………………………………....21
2.2 INSTALASI ………………………………………..22
2.3 TAMPILAN PROGRAM ………………………….22
2.4 MEMBUAT SIMULASI PROGRAM ……………. 23
2.5 RANGKUMAN…………………………………….27
2.6 TUGAS……………………………………………..28
1.9 DAFTAR BACAAN……………………………….28
BAB III INPUT OUTPUT
3.1 REGISTER UNTUK PORT INPUT OUTPUT……29
3.2 APLIKASI LAMPU LED………………………….32
3.3 TUGAS PROGRAM APLIKASI LED ……………33
3.4 APLIKASI TOMBOL PUSH BUTTON…… ……..35

xxxii
3.5 APLIKASI LCD……………………………………36
3.6 RANGKUMAN…………………………………….39
3.7 TUGAS……………………………………………..39
3.8 DAFTAR BACAAN……………………………….40
BAB IV INTERUPSI
4.1 REGISTER INTERUPSI…………………………...41
4.2 CONTOH PROGRAM DENGAN KETIGA
EKSTERNAL INTERRUPT………………………..44
4.3 APLIKASI LED DENGAN INTERUPSI…………..45
4.4 RANGKUMAN……………………………………..47
4.5 TUGAS……………………………………………...47
4.6 DAFTAR BACAAN………………………………..48
BAB V TIMER / COUNTER
5.1 TIMER/COUNTER 0 ……………………………...49
5.2 TIMER/COUNTER1 (16-BIT) …………………… 64
5.3 APLIKASI TIMER…………………………………67
5.4 RANGKUMAN…………………………………….73.
5.5 TUGAS……………………………………………...73
5.6 DAFTAR BACAAN………………………………..78
BAB VI ANALOG TO DIGITAL CONVERTER (ADC)
6.1 REGISTER-REGISTER ADC…………………….. 75
6.2 KONFIGURASI ADC…………………………...... 80
6.3 APLIKASI ADC……………………………………81
6.4 RANGKUMAN……………………………………..83
6.5 TUGAS……………………………………………...83
6.6 DAFTAR BACAAN………………………………..84
BAB VII KOMUNIKASI SERIAL MIKROKONTROLER
7.1 INISIALISASI USART…………………………….85
7.2 APLIKASI USART………………………………...86
7.3 REGISTER USART………………………………. 87
7.4 APLIKASI USART……………………………….. 93
7.5 RANGKUMAN…………………………………….96
7.6 TUGAS……………………………………………...96
7.7 DAFTAR BACAAN………………………………..97

xxxiii
BAB VIII FUNGSI LIBRARY PADA CODE VISION AVR
8.1 FUNGSI INPUT/OUTPUT …………………………...99
8.2 FUNGSI TIPE KARAKTER …………………… 100
8.3 FUNGSI LIBRARY STANDART …………………. 100
8.4 FUNGSI MATEMATIKA …………………………. 100
8.5 FUNGSI KONVERSI BCD …………………….. 101
8.6 FUNGSI LCD …………………………………… 101
8.7 FUNGSI DELAY………………………………….102
8.8 RANGKUMAN………………………………….. 102
8.9 DAFTAR BACAAN…………………………… .. 103
DAFTAR PUSTAKA………………………………...105

xxxiv
DAFTAR GAMBAR

Gambar 1.1 Ikon file setup.exe…………………………9


Gambar 1.2 Pilihan bahasa……………………………..9
Gambar 1.3 Klik tombol next…………………………10
Gambar 1.4 Menyetujui syarat-syarat yang diberikan.. 10
Gambar 1.5 Menentukan lokasi tujuan………………..11
Gambar 1.6 Setuju untuk membuat tempat baru……...11
Gambar 1.7 Nama folder pada Start Menu,…………...11
Gambar 1.8 Nama folder pada Start Menu……………12
Gambar 1.9 Proses instalasi sedang berlangsung…….. 12
Gambar 1.10 Informasi tambahan……………………. 12
Gambar 1.11 Proses instalasi selesai…………………. 13
Gambar 1.12 Icon CodeVisionAVR…………………. 14
Gambar 1.13 Tampilan CodeVisionAVR……………. 14
Gambar 1.14 Jendela Pilihan Tipe File………………. 14
Gambar 1.15 Jendela Confirm CodeWizardAVR…… 15
Gambar 1.16 CodeWizardAVR pada tab Chip………. 15
Gambar 1.17 CodeWizardAVR pada tab Ports……… 16
Gambar 1.18 Program CodeVisionAVR yang
terkonfigurasi………………………………………… 17
Gambar 1.19 Menyisipkan program utama…………. 17
Gambar 1.20 Jendela Informasi ……………………… 18
Gambar 2.1 Tampilan Program ISIS………………… 23
Gambar 2.2 Rangkaian ATMega8535………………....24
Gambar 2.3 Tampilan jendela baru ………………….. 24
Gambar 2.4 Tombol Pick Devices ………………….. 25
Gambar 2.5 Jendela Pick Devices …………………… 25
Gambar 2.6 Posisi komponen…………………………,26
Gambar 2.7 Hubungan Jalur Komponen ……………. ,26
Gambar 2.8 Jendela Edit Component………………....,27
Gambar 3.1 Susunan pin mikrokontroler AVR 8535... 30
Gambar 3.2 Simbol LED (Light Emitting Diode)…… 33
Gambar 3.3 Rangkaian Lampu Flip-flop…………… 33

xxxv
Gambar 3.4 CodeWizardAVR seperti konfigurasi…... 34
Gambar 3.5 Seting kode wizard untuk Port B sebagai
input dan port A sebagai output……………………… 35
Gambar 3.6 Aplikasi Tombol Push Button dan LED... 36
Gambar 3.7 Rangkaian LCD dan hubungannya dengan
mikrokontroler…………………………………………. 37
Gambar 3.8 Code Vision Wizard AVR untuk LCD 16x2
tipe HD44780………………………………………….. 38
Gambar 3.9 Potongan program untuk tampilan LCD… 38
Gambar 3.10 Tampilan program LCD setelah
dimasukkan simulasi Proteus………………………….. 39
Gambar 4.1 Rangkaian LED dan Codewizard interupsi
eksternal………………………………………………...46
Gambar 5.1 Diagram blok timer0 / counter 0………... 50
Gambar 5.2 Diagram blok counter dan lingkungannya 51
Gambar 5.3 Diagram blok unit Output Compare……. 52
Gambar 5.4 Diagram timing untuk mode CTC……… 54
Gambar 5.5 Diagram timing untuk mode fast PWM.. 56
Gambar 5.6 Diagram timing untuk mode phase correct
PWM…………………………………………………...58
Gambar 5.7 Blok diagram counter 16 bit dan
sekelilingnya………………………………………….. 66
Gambar 5.8 Rangkaian simulasi proteus timer detik…69
Gambar 5.9 Setting timer 1 pada Code Wizard AVR 70
Gambar 5.10 Setting timer 0 pada CodeWizard AVR 72
Gambar 6.1 Rangkaian simulasi ADC pada LCD……81
Gambar 6.2 Setting code wizard AVR untuk LCD dan
ADC……………………………………………………82
Gambar 7.1 IC MAX232 menyesuaikan level tegangan
dari ke port serial……………………………………. 86
Gambar 7.2 Seting code wizard AVR untuk komunikasi
USART……………………………………………….. 94
Gambar 7.3.Rangkaian komunikasi serial USART pada
simulasi proteus………………………………………. 94

xxxvi
Gambar 7.4. Tampilan eksekusi program simulasi serial
USART ……………………………………………….95

xxxvii
xxxviii
1

BAB I
MIKROKONTROLER AVR DAN
CODE VISION AVR

RINGKASAN
AVR merupakan mikrokontroler RISC dengan
lebar bus data 8 bit. Frekuensi kerja mikrokontroler AVR
ini pada dasarnya sama dengan frekuensi oscilator,
sehingga kecepatan kerja AVR lebih cepat dibandingkan
mikrokontroler keluarga AT89S51/52. AVR juga
dilengkapi dengan 32 register general purpose yang
semuanya terhubung langsung ke ALU. Bahasa C
merupakan bahasa pemrograman yang sangat fleksibel
dan tidak terlalu terikat dengan berbagai aturan yang
sifatnya kaku. CodeVisionAVR merupakan sebuah cross-
compiler C, Integrated Development Environtment (IDE),
dan Automatic Program Generator yang didesain untuk
mikrokontroler AVR.

1.1 SEKILAS TENTANG KELUARGA AVR


Secara historis mikrokontroler seri AVR pertama
kali diperkenalkan ke pasaran sekitar tahun 1997 oleh
perusahaan Atmel, yaitu sebuah perusahaan yang sangat
terkenal dengan produk mikrokontroler seri AT89S51/52-
nya yang sampai sekarang masih banyak digunakan di
lapangan. Tidak seperti mikrokontroler seri AT89S51/52
yang masih mempertahankan arsitektur dan set instruksi
dasar mikrokontroler 8031 dari perusahaan INTEL.
Mikrokontroler AVR ini diklaim memiliki arsitektur dan
set instruksi yang benar-benar baru dan berbeda dengan
arsitektur mikrokontroler sebelumnya yang diproduksi
oleh perusahaan tersebut. Tetapi walaupun demikian, bagi
para programmer yang sebelumnya telah terbiasa dengan
mikrokontroler seri AT89S51/52, dan berencana untuk
2

beralih ke mikrokontroler AVR, maka secara teknis tidak


akan banyak kesulitan yang berarti, hal ini karena selain
seri AVR ditinjau dari jumlah memori yang dimilikinya,
konsep dan istilah-istilah dasarnya hampir sama,
pemrograman level assemblernya pun relative sama.
Berdasarkan arsitekturnya, AVR merupakan mi-
krokontroler RISC (Reduce Instruction Set Computer )
dengan lebar bus data 8 bit. Berbeda dengan sistem
AT89S51/52 yang memiliki frekuensi kerja seperduabelas
kali frekuensi oscilator, frekuensi kerja mikrokontroler
AVR ini pada dasarnya sama dengan frekuensi oscilator,
sehingga hal tersebut menyebabkan kecepatan kerja AVR
untuk frekuensi oscilator yang sama, akan dua belas kali
lebih cepat dibandingkan dengan mikrokontroler keluarga
AT89S51/52. Dengan instruksi yang sangat variatif (mirip
dengan sistem CISC-Complex Instruction Set Computer)
serta jumlah register serbaguna (general Purpose Register)
sebanyak 32 buah yang semuanya terhubung secara
langsung ke ALU (Arithmetic Logic Unit), kecepatan
operasi mikrokontroler AVR ini dapat mencapai 16 MIPS
(enam belas juta instruksi per detik) —sebuah kecepatan
yang sangat tinggi untuk ukuran mikrokontroler 8 bit yang
ada di pasaran sampai saat ini.
Untuk memenuhi kebutuhan dan aplikasi industri
yang sangat beragam, mikrokontroler keluarga AVR ini
muncul di pasaran dengan tiga seri utama: tinyAVR,
ClasicAVR (AVR), megaAVR. Berikut ini beberapa seri
yang dapat anda jumpai di pasaran:
- ATtiny13 - AT90S2313 - ATmega103
- ATtiny22 - AT90S2323 - ATmega128
- ATtiny22L - AT90S2333 - ATmega16
- ATtiny2213 - AT90S4414 - ATmega162
- ATtiny2213V- AT90S4433 - ATmega168
- ATtiny26 - AT90S8515 - ATmega8535
3

Keseluruhan seri AVR ini pada dasarnya memi-liki


organisasi memori dan set instruksi yang sama (sehingga
dengan demikian jika kita telah mahir menggunakan salah
satu seri AVR, untuk beralih ke seri yang lain akan
relative mudah). Perbedaan antara tinyAVR, AVR dan
megaAVR pada kenyataannya hanya merefleksikan
tambahan-tambahan fitur yang ditawarkannya saja (misal
adanya tambahan ADC internal pada seri AVR tertentu,
jumlah Port I/O serta memori yang berbeda, dan sebagai-
nya). Diantara ketiganya, megaAVR umumnya memiliki
fitur yang paling lengkap, disusul oleh AVR, dan terakhir
tinyAVR. Untuk memberi gambaran yang lebih jelas,
tabel 1.1 memperlihatkan perbedaan ketiganya.
Tabel 1.1. Perbedaan seri AVR berdasarkan jumlah memori
Mikrokontroler Memori (byte)
AVR
Jenis Paket IC Flash EEPROM SRAM
TinyAVR 8–32 pin 1 – 2K 64 – 128 0 – 128
AVR (classic 20–44 pin 1 – 8K 128 – 512 0–1K
AVR)
MegaAVR 32–64 pin 8 – 128 K 512 – 4 K 512 – 4 K

Seperti terlihat pada tabel 1.1, Semua jenis AVR


ini telah dilengkapi dengan memori flash sebagai memori
program. Tergantung serinya, kapasitas memori flash
yang dimiliki bervariasi dari 1K sampai 128 KB. Secara
teknis, memori jenis ini dapat diprogram melalui saluran
antarmuka yang dikenal dengan nama Serial Peripheral
Interface (SPI) yang terdapat pada setiap seri AVR
tersebut. Dengan menggunakan perangkat lunak
programmer(downloader) yang tepat, pengisian memori
Flash dengan menggunakan saluran SPI ini dapat
dilakukan bahkan ketika chip AVR telah terpasang pada
sistem akhir (end system), sehingga dengan demikian
4

pemrogramannya sangat fleksibel dan tidak merepotkan


pengguna (Secara praktis metoda ini dikenal dengan
istilah ISP-In System Programming – sedangkan
perangkat lunaknya dinamakan In System Programmer).
Untuk penyimpanan data, mikrokontroler AVR
menyediakan dua jenis memori yang berbeda: EEPROM
(Electrically Erasable Programmable Read Only
Memory) dan SRAM (Static Random Access memory).
EEPROM umumnya digunakan untuk menyimpan data-
data program yang bersifat permanen, sedangkan SRAM
digunakan untuk menyimpan data variabel yang di-
mungkinkan berubah setiap saatnya. Kapasitas simpan
data kedua memori ini bervariasi tergantung pada jenis
AVR-nya (lihat tabel 1.1). Untuk seri AVR yang tidak
memiliki SRAM, penyimpanan data variabel dapat
dilakukan pada register serbaguna yang terdapat pada
CPU mikrokontroler tersebut.
Selain seri-seri di atas yang sifatnya lebih umum,
Perusahaan Atmel juga memproduksi beberapa jenis
mikrokontroler AVR untuk tujuan yang lebih khusus dan
terbatas, seperti seri AT86RF401 yang khusus digunakan
untuk aplikasi wireless remote control dengan meng-
gunakan gelombang radio (RF), seri AT90SC yang
khusus digunakan untuk peralatan sistem-sistem ke-
amanan kartu SIM GSM, pembayaran via internet, dan
lain sebagainya.

1.2 MIKROKONTROLER AVR DAN BAHASA C


Tak dapat disangkal, dewasa ini penggunaan
bahasa pemrograman aras tinggi (seperti C, Basic, Pascal,
Forth dan sebagainya) semakin populer dan banyak
digunakan untuk memprogram sistem. Berdasarkan
sifatnya yang sangat fleksibel dalam hal keleluasaan
pemrogram untuk mengakses perangkat keras, Bahasa C
5

merupakan bahasa pemrograman yang paling cocok


dibandingkan bahasa-bahasa pemrograman aras tinggi
lainnya.
Dikembangkan pertama kali oleh Dennis Ritchie
dan Ken Thomson pada tahun 1972, Bahasa C merupakan
salah satu bahasa pemrograman yang paling populer
untuk pengembangan program-program aplikasi yang
berjalan pada sistem mikroprosesor (komputer). Karena
kepopulerannya, vendor-vendor perangkat lunak
kemudian mengembangkan compiler C sehingga menjadi
beberapa varian berikut: Turbo C, Borland C, Microsoft
C, Power C, Zortech C dan lain sebagainya. Untuk
menjaga portabilitas, compiler-compiler C tersebut
menerapkan ANSI C (ANSI: American National
Standards Institute) sebagai standar bakunya. Perbedaan
antara compiler-compiler tersebut umumnya hanya
terletak pada pengembangan fungsi-fungsi library serta
fasilitas IDE (Integrated Development Environment) saja.
Relatif dibandingkan dengan bahasa aras tinggi
lain, bahasa C merupakan bahasa pemrograman yang
sangat fleksibel dan tidak terlalu terikat dengan berbagai
aturan yang sifatnya kaku. Satu-satunya hal yang
membatasi penggunaan bahasa C dalam sebuah aplikasi
adalah semata-mata kemampuan imaginasi programmer-
nya saja. Sebagai ilustrasi, dalam program C kita dapat
saja secara bebas menjumlahkan karakter huruf (misal
‘A’) dengan sebuah bilangan bulat (misal ‘2’), dimana hal
yang sama tidak mungkin dapat dilakukan dengan
menggunakan bahasa aras tinggi lainnya. Karena sifatnya
ini, seringkali bahasa C dikatagorikan sebagai bahasa aras
menengah (mid level language).
Dalam kaitannya dengan pemrograman, tak pelak
lagi bahasa C saat ini mulai menggeser penggunaan
bahasa aras rendah assembler. Penggunaan bahasa C akan
6

sangat efisien terutama untuk program yang berukuran


relatif besar. Dibandingkan dengan bahasa assembler,
penggunaan bahasa C dalam pemrograman memiliki
beberapa kelebihan berikut: Mempercepat waktu
pengembangan, bersifat modular dan terstruktur,
sedangkan kelemahannya adalah kode program hasil
kompilasi akan relative lebih besar (dan sebagai
konsekuensinya hal ini terkadang akan mengurangi
kecepatan eksekusi).
Khusus pada AVR, untuk mereduksi konsekuensi
negative ini, Perusahaan Atmel merancang sedemikian
sehingga arsitektur AVR ini efisien dalam mendekode
serta mengeksekusi instruksi-instruksi yang umum
dibangkitkan oleh compiler C (Dalam kenyataannya,
pengembangan arsitektur AVR ini tidak dilakukan sendiri
oleh perusahaan Atmel tetapi ada kerja sama dengan salah
satu vendor pemasok compiler C untuk mikrokontroler
tersebut, yaitu IAR C)
Table 1.2. Beberapa Compiler C untuk
mikrokontroler AVR
Compiler C Platform Keterangan
IAR C -DOS Komersil
-Windows
CodeVisionAVR -Windows Komersil,
ImageCraft’s C -DOS Komersil
-Windows
-Linux
AVR-GCC -DOS General Public
-Windows Licence
C-AVR -Windows Komersil
Small C for AVR -DOS Komersil
GNU C for AVR -Linux General Public
Licence
LCC-AVR -Linux, Free
-Windows
Dunfields AVR -Windows Komersil
7

1.3 CODE VISION AVR


CodeVisionAVR merupakan sebuah cross-
compiler C, Integrated Development Environtment (IDE),
dan Automatic Program Generator yang didesain untuk
buatan Atmel seri AVR. CodeVisionAVR dapat
dijalankan pada system operasi Windows 95, 98, Me,
NT4, 2000, XP dan 7. Cross-compiler C mampu
menerjemahkan hampir semua perintah dari bahasa ANSI
C, sejauh yang diijinkan oleh arsitektur dari AVR, dengan
tambahan beberapa fitur untuk mengambil kelebihan
khusus dari arsitektur AVR dan kebutuhan pada system
embedded.
File object COFF hasil kompilasi dapat digunakan
untuk keperluan debugging pada tingkatan C, dengan
pengamatan variabel, menggunakan debugger Atmel
AVR Studio. IDE mempunyai fasilitas internal berupa
software AVR Chip In-System Programmer yang
memungkinkan Anda untuk melakukan transfer program
kedalam chip setelah sukses melakukan
kompilasi/asembli secara otomatis. Software In-System
Programmer didesain untuk bekerja dengan Atmel
STK500/AVRISP/AVRProg, Kanda Systems
STK200+/300, Dontronics DT006, Vogel Elektronik
VTEC-ISP, Futurlec JRAVR dan MicroTronics
ATCPU/Mega2000 programmers / development boards.
Untuk keperluan debugging sistem embedded, yang
menggunakan komunikasi serial, IDE mempunyai fasilitas
internal berupa sebuah Terminal. Selain library standar C,
CodeVisionAVR juga mempunyai library tertentu untuk:
• Modul LCD alphanumeric
• Bus I2C dari Philips
• Sensor Suhu LM75 dari National Semiconductor
8

• Real-Time Clock: PCF8563, PCF8583 dari Philips,


DS1302 dan DS1307 dari Maxim/Dallas
Semiconductor
• Protokol 1-Wire dari Maxim/Dallas Semiconductor
• Sensor Suhu DS1820, DS18S20, dan DS18B20 dari
Maxim/Dallas Semiconductor
• Termometer/Termostat DS1621 dari Maxim /Dallas
Semiconductor
• EEPROM DS2430 dan DS2433 dari Maxim/ Dallas
Semiconductor
• SPI
• Power Management
• Delay
• Konversi ke Kode Gray
CodeVisionAVR juga mempunyai Automatic
Program Generator bernama Code Wizard AVR, yang
mengijinkan Anda untuk menulis, dalam hitungan menit,
semua instruksi yang diperlukan untuk membuat fungsi-
fungsi berikut:
• Set-up akses memori eksternal
• Identifikasi sumber reset untuk chip
• Inisialisasi port input/output
• Inisialisasi interupsi eksternal
• Inisialisasi Timer/Counter
• Inisialisasi Watchdog-Timer
• Inisialisasi UART (USART) dan komunikasi serial
berbasis buffer yang digerakkan oleh interupsi
• Inisialisasi Pembanding Analog
• Inisialisasi ADC
• Inisialisasi Antarmuka SPI
• Inisialisasi Antarmuka Two-Wire
• Inisialisasi Antarmuka CAN
9

• Inisialisasi Bus I2C, Sensor Suhu LM75 Thermometer/


Thermostat DS1621 dan Real-Time Clock PCF8563,
PCF8583, DS1302, dan DS1307
• Inisialisasi Bus 1-Wire dan Sensor Suhu DS1820,
DS18S20
• Inisialisasi modul LCD
CodeVisionAVR merupakan hak cipta dari Pavel
Haiduc, HP Info Tech s.r.l.

1.4 INSTALASI CODEVISIONAVR


Anda dapat memperoleh file instalasi
CodeVisionAVR dengan cara mendownload pada situs
pembuatnya yaitu HP InfoTech di http://www.hpinfotech.
com. File yang dapat didownload adalah tipe evaluation
yang artinya mempunyai keterbatasan, salah satunya
adalah ukuran program yang dapat dikompilasi terbatas.
Contoh yang digunakan adalah CodeVisionAVR versi
1.24.7a. Klik ganda file setup.exe yang didapat dari proses
download dari situs HP InfoTech.

Gambar 1.1 Ikon file setup.exe


Untuk pilihan bahasa pilih English, klik OK, seperti pada
Gambar 1.2.

Gambar 1.2 Pilihan bahasa


10

Kemudian akan muncul kotak dialog seperti pada gambar


1.3, klik tombol next.

Gambar 1.3 Klik tombol next


Selanjutnya pada kotak dialog Licence Agreement, pilih I
accept the agreement lalu klik tombol next seperti pada
gambar 1.4.

Gambar 1.4 Menyetujui syarat-syarat yang diberikan


Berikutnya kotak dialog Select Destination Location
seperti pada gambar 1.5 menanyakan tempat dimana
software akan diletakkan. Gunakan tempat yang telah
ditentukan lalu klik tombol next.
11

Gambar 1.5 Menentukan lokasi tujuan


Akan muncul kotak dialog yang menginformasikan bahwa
tempat tersebut belum ada sebelumnya. Klik tombol Yes
untuk membuat tempat baru tersebut seperti yang
ditunjukkan oleh gambar 1.6.

Gambar 1.6 Setuju untuk membuat tempat baru


Kemudian muncul kotak dialog seperti pada gambar 1.7
untuk menanyakan nama program shortcut pada menu
Start dari Windows. Lanjutkan dengan menekan tombol
next

Gambar 1.7 Nama folder pada Start Menu


12

Program CodeVisionAVR telah siap untuk diinstall.


Tekan tombol Install seperti pada gambar 1.8. Maka
proses instalasi akan bekerja seperti ditunjukkan oleh
gambar 1.9. Setelah selesai akan dimunculkan kotak
dialog informasi seperti pada gambar 1.10.

Gambar 1.8 Nama folder pada Start Menu

Gambar 1.9 Proses instalasi sedang berlangsung

Gambar 1.10 Informasi tambahan


13

Klik tombol next pada gambar 1.10 untuk mengakhiri


proses instalasi. Setelah kotak dialog seperti yang
ditunjukkan oleh gambar 1.11 muncul, Anda dapat
menekan tombol Finish dengan pilihan langsung
menjalankan software CodeVisionAVR atau tidak.

Gambar 1.11 Proses instalasi selesai


1.5 UNINSTALL CODEVISIONAVR
Bila suatu saat Anda tidak membutuhkan aplikasi
CodeVisionAVR, Anda dapat membuang hasil instalasi
dari komputer Anda. Pada menu Start dari Windows, klik
shortcut “Uninstall Code Vision AVR C Compiler
Evaluation” Proses pembuangan tersebut biasanya tidak
bersih, artinya masih ada file yang tertinggal. Anda dapat
melanjutkan dengan melakukan proses delete secara
manual menggunakan aplikasi windows explorer.

1.6 MEMBUAT PROGRAM BARU


Membuat program baru menggunakan Code
VisionAVR tidaklah sulit. Adapun langkah-langkah yang
harus dilakukan adalah sebagai berikut:
1. Jalankan program CodeVisionAVR. Dengan cara klik
dua kali pada Icon CodeVisionAVR seperti pada
gambar 1.12.
14

Gambar 1.12 Icon CodeVisionAVR

2. Pada saat jalankan program CodeVisionAVR maka


layar kosong tampak seperti pada gambar 1.13.

Gambar 1.13 Tampilan CodeVisionAVR


3. Klik Menu File dan pilih New, maka tampil jendela
pilihan seperti pada gambar 1.14.

Gambar 1.14 Jendela Pilihan Tipe File


4. Untuk membuat program baru pilihlah Project
kemudian klik OK, maka muncul pertanyaan yang
menanyakan apakah kita ingin menggunakan Code
Wizard AVR seperti pada gambar 1.15 berikut,
kemudian pilih Yes.
15

Gambar 1.15 Jendela Confirm CodeWizardAVR 15

5. Jendela CodeWizardAVR tampil seperti gambar 1.16.


Pada tab Chip, lakukan konfigurasi seperti pada
gambar 1.16.

Gambar 1.16 CodeWizardAVR pada tab Chip


6. Selanjutnya pilih tab Ports, lalu lakukan pengaturan
seperti pada gambar 1.17..
16

Gambar 1.17 CodeWizardAVR pada tab Ports


7. Kemudian pilih menu File lalu pilih Generat, Save
and Exit. Lalu kita diminta menyimpan tiga jenis file
secara berurut. Di-anjurkan simpan ketiga file tersebut
dalam sebuah folder yang sama.
8. Setelah selesai, maka program CodeVisionAVR akan
tampak seperti gambar 1.18, yang menunjukan bahwa
sudah terdapat program yang telah dikonfigurasi dan
siap digunakan atau disisipkan program tambahan.
17

Gambar 1.18 Program CodeVisionAVR yang terkonfigurasi 17


9. Kemudian sisipkan program utama seperti yang tampak
pada gambar 1.19.

Gambar 1.19 Menyisipkan program utama


10. Setelah selesai kita dapat melakukan kompilasi pada
program dengan cara pilih menu Project lalu pilih
Build All atau Ctrl+ F9.
11. Jika program sudah benar atau tidak terdapat kesala-
han, maka akan tampil jendela informasi seperti
gambar 1.20.
18

Gambar 1.20 Jendela Informasi 18


12. Kemudian klik OK, dan program siap di download ke
rangkaian.
Langkah-langkah yang sudah diuraikan adalah
proses untuk menghasilkan file dengan bahasa mesin
yaitu file dengan ekstensi hexa (*.hex). File ini dibutuh-
kan untuk diisi (download) ke IC, karena dia hanya
mengerti bahasa mesin. Tahap-tahap ini akan terus dila-
kukan setiap membuat program.

1.7 RANGKUMAN
1. AVR merupakan mikrokontroler RISC dengan lebar
bus data 8 bit dengan frekuensi kerja sama dengan
frekuensi oscillator.
2. AVR dilengkapi dengan 32 register general purpose
yang semuanya terhubung langsung ke ALU.
19

3. Bahasa C merupakan bahasa pemrograman yang


sangat fleksibel dan tidak terlalu terikat dengan
berbagai aturan yang sifatnya kaku.
4. CodeVisionAVR merupakan sebuah cross-compiler
C, Integrated Development Environtment (IDE), dan
Automatic Program Generator yang didesain untuk
mikrokontroler AVR.

1.8 TUGAS
1. Buat satu contoh program I/O tanpa memakai code
wizard AVR, coba compile dan running.
2. Apa kelebihan dan kekurangan pemrograman code
vision dengan memakai code wizard dibandingkan
dengan tanpa code wizard.

1.9 DAFTAR BACAAN


1. Barrett, Steven F., Pack, Daniel J.. 2008. Atmel
AVR Microcontroller Primer : Programming and
Interfacing. Laramie and Colorado Springs: Morgan &
Claypool
2. P Wisnu Adi., Heryanto, M Ary. 2008. Pemrograman
Bahasa C untuk Mikrokontroler ATmega 8535.
Yogyakarta: Andi
3. Setiawan, Iwan.2006.Tutorial Microcontroler AVR
Part I. UNDIP: Elektro
4. Politeknik Caltex. 2012. Buku-Mikrokontroler-
Atmega8535-Dengan-CodevisionAVR tersedia di
https://www.yumpu.com/id/document/view/1671741
9/tutorial-microcontroller-avr-part-i-123seminarsonly
id.scribd.com diakses 21 April 2014
5. Atmel. Data sheet AVR ATmega8535/8535L. tersedia
di http://www.atmel.com/images/doc2502.pdf diakses
tgl 16 Mei 2009
20

6. CodeVisionAVR tersedia di http://www.hpinfotech.


ro. diakses tgl 1 Mei 2013
21

BAB II
SOFTWARE PROTEUS 7

RINGKASAN
Proteus adalah perangkat lunak untuk
menggambarkan skematik rangkaian sekaligus mensi-
mulasikankannya. Simulasi dilengkapi dengan system
embedded dan bisa diintegrasikan dengan compiler C
seperti Code Vision AVR. File Code Vision C yang akan
dimasukkan ke dalam Proteus harus sudah dikompail
sehingga dihasilkan file dengan ekstensi COFF atau HEX.

2.1 PENGENALAN
Pada umumnya setiap pegguna yang baru mulai
belajar mengalami kesulitan untuk mempelajari apabila
tidak ada pendukung secara langsung seperti pengajar dan
peralatan yang memadai. Untuk itu dibutuhkan suatu
sarana yang dapat digunakan untuk mencoba suatu
rangkaian . Salah satunya adalah software Proteus 7
Professional. Software Proteus 7 Professional ini tidak
free, maka hanya bisa memberikan Proteus 7 Professional
versi demo. Penggunaannya tidak jauh berbeda dengan
Proteus 7 Professional. Proteus 7 Professional memiliki
program yang dapat berfungsi untuk mensimulasikan
rangkaian seolah-olah pengguna berhadapan dengan
rangkaian yang sesungguhnya. Software Proteus terdiri
dari dua program utama yaitu ARES dan ISIS. Masing-
masing program memiliki fungsi yang berbeda. ARES
biasa digunakan untuk membuat layout PCB (Printed
Circuit Board), sedangkan ISIS biasa digunakan untuk
menggambar schematic rangkaian serta mensimulasikan
program. Pada buku ini hanya menggunakan program
ISIS yang digunakan untuk mensimulasikan rangkaian .
22

Sedangkan untuk membuat layoutnya silahkan anda pilih


sesuai selera mau menggunakan software mana.

2.2 INSTALASI
Untuk instalasi program, tidak jauh berbeda dengan
cara menginstal program lain pada umumnya. Yang
diinstal disini adalah software Proteus-nya, namun pada
penggunaannya kita hanya akan menggunakan program
ISIS-nya saja yang dapat digunakan sebagai simulator,
agar rangkaian nya tampak seperti rangkaian
sesungguhnya. Adapun proses instalasi nya adalah
sebagai berikut :
1. Klik dua kali master program Proteus 7 Professional
versi Demo yang ada di CD buku ini atau download
dari http://www. labcenter.co.uk/download/ prodemo _
download.cfm
2. Ikuti langkah-langkah yang diminta dan lakukan
perubahan seperlunya jika dibutuhkan.
3. Setelah selesai, program dapat langsung dijalankan.

2.3 TAMPILAN PROGRAM


Pada software Proteus, kita menggunakan program
ISIS yang berfungsi sebagai simulator. Pada program ISIS
banyak sekali fasi-litas yang disajikan dan akan memakan
banyak waktu jika harus menjelaskan semuanya. Oleh
karena itu hanya akan dijelaskan beberapa saja yang
diperlukan. Secara umum tampilan program ISIS pada
Software Proteus 7 Professional seperti gambar 2.1.
23

Gambar 2.1 Tampilan Program ISIS


2.4 MEMBUAT SIMULASI PROGRAM
Secara garis besar ada 3 tahap dalam membuat
simulasi pada Proteus , yaitu :
1. Pemilihan komponen yang akan digunakan.
2. Peletakan komponen dan penyusunan rangkaian.
3. Download program pada rangkaian.
Namun sebelum pengguna membuat schematic
rangkaian, pengguna harus paham prinsip kerja dari
rangkaian yang ingin dibuat, sehingga pengguna dapat
memeriksa kesalahan sedini mungkin pada rangkaian jika
terdapat error atau ketidaksesuaian prinsip kerja pada
rangkaian.
Untuk mensimulasikan rangkaian menggunakan
program ISIS ini, pengguna tidak perlu membuat
schematic secara ”lengkap”, tapi cukup membuat
rangkaian input/outputnya saja seperti pada gambar-
gambar schematic yang nanti akan ditemukan pada
contoh-contoh rangkaian.
Pada rangkaian sebenarnya kita menggunakan IC
ATMega8535, tetapi pada simulator jika tidak terdapat IC
24

ATMega8535, maka bisa menggunakan IC yang sekelas


dengan ATMega8535 yaitu AT90S8535. Berikut ini
adalah langkah-langkah membuat simulasi program
menggunakan program ISIS :
1. Siapkan gambar rangkaian yang ingin disimulasikan.
contohnya seperti gambar 2.2.
2. Jalankan program ISIS dan buka lembar baru,tampak
seperti gambar 2.3.

Gambar 2.2 Rangkaian ATMega8535

Gambar 2.3 Tampilan jendela baru


3. Pilih komponen yang akan digunakan, klik Component
Mode kemudian tekan tombol Pick Devices seperti
gambar 2.4 dan cari komponen IC AT90S8535 dan
komponen LED.
25

Gambar 2.4 Tombol Pick Devices


4. Pilih kategori, dan ambil komponen yang dibutuhkan
dengan cara klik dua kali nama komponen yang dipilih
seperti gambar 2.5.

Gambar 2.5 Jendela Pick Devices


5. Setelah semua komponen terkumpul di bagian Object
Selector, klik OK.
6. Pilih toolbar Terminal Mode, ambil komponen Power
dan letakkan pada rangkaian, atur posisi komponen
pada Editing Window seperti gambar 2.6.
26

Gambar 2.6 Posisi komponen


7. Hubungkan jalur pada masing-masing komponen sesuai
gambar rangkaian sehingga tampak seperti gambar 2.7.

Gambar 2.7 Hubungan Jalur Komponen


8. Gambar rangkaian tidak perlu lengkap seperti aslinya.
Yang penting input dan output rangkaian terhubung de-
ngan komponen yang diinginkan seperti contoh gambar
2.7. Setelah selesai, rangkaian siap disimulasikan dan
27

lihatlah tampilan yang dihasilkan pada gambar


simulasi.
9. Klik dua kali IC pada rangkaian, akan muncul jendela
Edit Component seperti gambar 2.8. Pada bagian
Program File, klik lambang folder, maka akan muncul
jendela Select File Name, pilih program LED. HEX
yang telah dibuat dan berhasil dicompile sebelumnya.
Klik Open, lalu Klik OK.

Gambar 2.8 Jendela Edit Component


10. Jalankan simulasi rangkaian dengan cara menekan
tombol Play pada bagian sudut kiri bawah.
11. Jika LED pada rangkaian berkedap-kedip, maka be-
rarti rangkaian anda telah berhasil disimulasikan.
2.5 RANGKUMAN
1. Proteus adalah perangkat lunak untuk menggambarkan
skematik rangkaian dan sekaligus mensimu-
lasikankannya.
2. Simulasi dilengkapi dengan system embedded dan bisa
diintegrasikan dengan compiler C seperti Code Vision
AVR.
28

3. File Code Vision C yang akan dimasukkan ke dalam


Proteus harus sudah dikompail sehingga dihasilkan file
dengan ekstensi COFF atau HEX.

2.6 TUGAS
1. Buat program pada kode vision dan simulasi proteus
sehingga LED berlari ke kiri balik ke kanan lagi
selamanya.
2. Dari soal 1 buat program yang sama denngan
memasukkan/memakai bahasa assembly pada code
vision

2.7 DAFTAR BACAAN


1. Atmel. Data sheet AVR ATmega8535/8535L. tersedia
di http://www.atmel.com/images/doc2502.pdf diakses
tgl 16 Mei 2009
2. AVR033: Getting Started with the CodeVisionAVR C
Compiler. tersedia di http://www.atmel.com / images
/doc2500.pdf diakses tgl 16 Mei 2009
3. Barrett, Steven F., Pack, Daniel J.. 2008. Atmel
AVR Microcontroller Primer : Programming and
Interfacing. Laramie and Colorado Springs: Morgan &
Claypool
4. Proteus. Tersedia di http://www. labcenter.co.uk/
download/prodemo_download.cfm diakses tgl 12 Mei
2014
5. Rangkuti, Syahban. 2011. Mikrokontroler Atel AVR
Simulasi dan Praktek Menggunakan ISIS Proteus dan
Code Vision. Informatika. Bandung.
6. Wardana, Lingga. 2006. Belajar Sendiri
Mikrokontroler AVRSeri ATmega 8535 Simulasi
Hardware dan Aplikasi. Yogyakarta: Andi
29

BAB III
INPUT OUTPUT

RINGKASAN
Fasilitas input/output merupakan fungsi
mikrokontroller AVR untuk dapat menerima sinyal
masukan (input) dan memberikan sinyal keluaran
(output). Pada setiap port I/O terdapat 3 buah register 8 bit
yaitu DDRxn, PORTxn, dan PINxn dengan x berupa port
A,B,C,D dan n adalah bit 0-7. Aplikasi port output
memakai rangkaian LED sedangkan aplikasi pin input
memakai push button. Untuk mempermudah
membuktikan hasil input output dipakai tampilan berupa
rangkaian LCD.

3.1 REGISTER UNTUK PORT INPUT OUTPUT


Mikrokontroller ATMEGA8535 memiliki 4 buah
PORT 8 bit bidirectional yang dapat difungsikan sebagai
PORT input maupun PORT output yaitu PORTA,
PORTB , PORTC, dan PORT D. Register digunakan
untuk mengatur fungsi dari pin-pin pada tiap port.
Register dapat dianalogikan sebagai kumpulan switch
on/off yang digunakan untuk mengaktifkan fungsi apa
yang akan dipakai dari port mikrokontroller. Pada setiap
port pin terdapat 3 buah register 8 bit: DDRxn, PORTxn,
dan PINxn. Susunan pin dan port pada mikrokontroler
AVR 8535 bisa dilihat pada gambar 3.1.
Register DDRxn digunakan untuk menentukan
arah dari pin yang bersangkutan. Jika DDRxn diberikan
nilai 1 (high), maka pin digunakan sebagai output. Jika
DDRxn diberikan nilai 0 (low), maka pin difungsikan
sebagai input. Register PORTxn digunakan untuk
mengaktifkan pull-up resistor (pada saat pin difungsikan
30

sebagai input), dan memberikan nilai keluaran pin


high/low (pada saat difungsikan sebagai output).

Gambar 3.1 Susunan pin mikrokontroler AVR 8535


Pada proyek ini anda akan membuat code
sederhana yaitu memberikan nilai logika 0 atau 1 pada
port output ATmega8535. Port I/O akan diset menjadi
port output. Port yang sama dapat dialihkan fungsinya
menjadi port input dengan mengatur DDR (Data Direction
Register) dari tiap-tiap port. Konfigurasi port I/O pada
ATmega 8535 dapat dilakukan dengan melakukan setting
berikut:
Port I/O sebagai output:
DDR diset high atau bit 1 dengan mengetikkan DDRx =1;
x bisa berarti A,B,C,D (port). Penyettingan ini dilakukan
dengan akses per byte pada satu port dengan delapan pin
sekaligus. Misal kita ingin menjadikan PA0 menjadi port
output, contoh kodenya:
DDRA = 0x01; //menjadikan porta.0 menjadi port output
(hex)
DDRA = 0b00000001;
//sama dengan di atas namun dengan bilangan bit,
31

//kedua perintah di atas membuat port selain porta.0


//menjadi port input
Untuk melakukan penyettingan terhadap satu pin
saja maka dapat dilakukan dengan DDRx.y = 1; y bisa
terdiri angka 0,1,...,7 (8 bit). Contoh kodenya:
DDRA.0 = 1;
//menjadikan porta.0 menjadi port output
Memberikan keluaran high pada PA0 dilakukan dengan
mengetikan kode:
PORTA = 1; //porta.0 diberi logic high ‘1’
Jika ingin memberikan logic high pada lebih dari satu port
ketikkan kode:
PORTA = 0xAA; //porta.1,3,5,7 diberi logic high
atau
PORTA = 0b10101010;
Penyettingan hanya terhadap satu pin saja dari satu port
dapat menggunakan kode:
PORTA.2 = 1; //porta.2 memiliki logic high
Port output pada ATmega8535 dapat memberikan arus
source sebesar 20 mA. Arus ini cukup untuk menyalakan
LED ukuran sedang. Arus ini dapat terjadi karena AVR
telah memiliki internal pull up resistor di dalamnya untuk
setiap pinnya.

Port I/O sebagai input:


Untuk menjadikan port I/O menjadi port input DDR diset
low atau ‘0’. Ketikkan kode
DDRA.0 = 0; //porta.0 menjadi port input
Untuk mengambil data dari port input kita gunakan
perintah PINA . Akses byte atau per bit dari port input
sama dengan penjelasan pada DDR dan port output di
atas. Contoh dari penggunaan perintah PINA :
If (PINA.0 == 1)
{
32

PORTA.2 = 1;
}
// jika pin A0 = 1, maka port A2 diberi logic high
Port input dapat di pullup dengan menambahkan
perintah PORT setelah DDR seperti pada contoh ini:

Contoh program kecil:


#include <mega8535.h>
void main()
{
DDRA.0 = 1;
PORTA.0 = 1;
DDRB = 0b00110011;
PORTB.3 = 1;
}

3.2 APLIKASI LAMPU LED


LED (Light Emitting Diode) adalah komponen
semikonduktor yang dapat mengemisikan cahaya ketika
dialiri arus listrik. Penggunaan LED sudah sangat populer
sehingga banyak digunakan diindustri perangkat
elektronika. LED mempunyai banyak kelebihan yaitu
penggunaan arus yang kecil dan dapat menghasilkan
cahaya yang bermacam-macam, sehingga LED banyak
digunakan sebagai indikator dan lampu display.
Aplikasi lampu LED (Light Emitting Diode)
adalah aplikasi yang paling sederhana dan yang paling
dasar dalam mempelajari dasar pengontrolan
menggunakan mikrokontroler. Maka dianggap penting
sekali memahami prinsip kerja dari LED ini. LED terdiri
dari 2 kaki yaitu anoda dan katoda, dimana LED akan
menyala jika arus mengalir dari anoda ke katoda. Simbol
LED bisa dilihat pada gambar 3.2.Pada apliksi lampu LED
33

kali ini, kita akan menghubung-kan LED ke


mikrokontroler melalui Port A. Rangkaian Simulasi
Animasi LED. bisa dilihat pada gambar 3.3.

Gambar 3.2 Simbol LED (Light Emitting Diode)


Rangkaian Simulasi Animasi LED.

Gambar 3.3 Rangkaian Lampu Flip-flop

Kedelapan LED kita hubungkan ke PortA dengan


menghubungkan semua pin Anoda dari LED ke sumber
positif dari tegangan atau biasa disebut Common Anoda
(CA). Maka untuk menyalakan LED, data pada Port A
harus diberi data logika 0.

3.3 TUGAS PROGRAM APLIKASI LED


Buatlah program baru dengan CodeWizardAVR seperti
konfigurasi gambar 3.4. Kemudian edit program seperti
bagian berikutnya.
34

Gambar 3.4 CodeWizardAVR seperti konfigurasi


Program 1. Aplikasi Lampu LED

Program 2. Animasi Lampu LED Flip-Flop


35

3.4 APLIKASI TOMBOL PUSH BUTTON


Tombol salah satu komponen yang paling sering
digunakan pada aplikasi elektronik. Tombol biasa
digunakan sebagai pemilih, pengatur dan juga sebagai
sensor yang kemudian diproses untuk mengerjakan
sesuatu. Umumnya jenis tombol ada 2 macam, yaitu
tombol Push Button (Tombol Tekan) dan Tombol Toggle
(On/Off). Terdapat berbagai macam bentuk dan ukuran
tombol dari yang kecil sampai yang besar, sehingga
pengguna harus memilih tombol yang sesuai tergantung
kebutuhan.
Tombol Push Button sering kita lihat dalam
kehidupan sehari-hari pada peralatan elektronik, seperti
radio, televisi, keyboard dan kalkulator lain-lain. Biasanya
tombol push button ini digunakan untuk memilih atau
menentukan suatu proses, misalnya memilih channel
televisi atau mengetik komputer. Seting kode wizard
untuk Port B sebagai input dan port A sebagai output
seperti gambar 3.5.

Gambar 3.5 Seting kode wizard untuk Port B sebagai input dan port
A sebagai output
36

Rangkaian Aplikasi Tombol Push Button dan LED pada


Proteus adalah seperti gambar 3.6.

Gambar 3.6 Aplikasi Tombol Push Button dan LED


Program Baca Masukan Tombol Push Button ke LED
#include <mega8535.h>
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTB=0xFF;
DDRB=0x00;
while (1)
{
// Place your code here
PORTA=PINB;
}}

3.5 APLIKASI LCD


Penampil LCD sangat membantu dalam
memprogram sehingga kita tidak perlu menggunakan
37

program debug. Hasil perhitungan, isi variable atau suatu


proses perlu ditampilkan sehingga bisa diketahui dengan
pasti. LCD bisa juga menampilkan hasil pengambilan data
dari sensor, bahkan bisa juga untuk interaksi antara
mikrokontroler dengan manusia.
Untuk rangkaian antarmuka dengan LCD hanya
diperlukan satu resistor dan satu resistor variable untuk
memberi tegangan kontras pada matrik LCD. Gambar
rangkaian LCD dan hubungannya dengan mikrokontroler
bisa dilihat pada gambar 3.7.

Gambar 3.7 Rangkaian LCD dan hubungannya dengan


mikrokontroler
Memakai Code Vision Wizard AVR dengan tampilan seperti gambar
3.8 untuk LCD 16x2 tipe HD44780.
38

Gambar 3.8 Code Vision Wizard AVR untuk LCD 16x2 tipe
HD44780
Sedangkan potongan kode program untuk menampilkan
nama pada LCD adalah seperti gambar 3.9.

Gambar 3.9 Potongan program untuk tampilan LCD


Sedangkan tampilan program setelah dimasukkan dan
dieksekusi pada simulasi Proteus seperti gambar 3.10
39

Gambar 3.10 Tampilan program LCD setelah dimasukkan simulasi


Proteus

3.6 RANGKUMAN
1. Fasilitas input/output merupakan fungsi
mikrokontroller AVR untuk dapat menerima sinyal
masukan (input) dan memberikan sinyal keluaran
(output).
2. Pada setiap port I/O terdapat 3 buah register 8 bit yaitu
DDRxn, PORTxn, dan PINxn dengan x berupa port
A,B,C,D dan n adalah bit 0-7.
3. Aplikasi port output memakai rangkaian LED
sedangkan aplikasi pin input memakai push button.
Untuk mempermudah membuktikan hasil input output
dipakai tampilan berupa rangkaian LCD.

3.7 TUGAS
1. Buat program dan simulasinya sehingga input dari push
button bisa membuat LED berjalan atau variasi lainnya
tambahkan juga komentar kondisi LED ini pada LCD
2. Buat program dan simulasinya berupa input dari keypad
matrik dan tampilan tombol yang ditekan pada LCD
40

1.8 DAFTAR BACAAN


1. Atmel. Data sheet AVR ATmega8535/8535L. tersedia
di http://www.atmel.com/images/doc2502.pdf diakses
tgl 16 Mei 2009
2. AVR033: Getting Started with the CodeVisionAVR C
Compiler. tersedia di http://www.atmel.com / images
/doc2500.pdf diakses tgl 16 Mei 2009
3. Barrett, Steven F., Pack, Daniel J.. 2008. Atmel
AVR Microcontroller Primer : Programming and
Interfacing. Laramie and Colorado Springs: Morgan &
Claypool
4. Politeknik Caltex. 2012. Buku-Mikrokontroler-
Atmega8535-Dengan-CodevisionAVR tersedia di
https://www.yumpu.com/id/document/view/16717419/tu
torial-microcontroller-avr-part-i-123seminarsonlyid.
scribd.com diakses 21 April 2014
5. Proteus. Tersedia di http://www.labcenter.com
diakses tgl 12 Mei 2014
6. Rangkuti, Syahban. 2011. Mikrokontroler Atel AVR
Simulasi dan Praktek Menggunakan ISIS Proteus dan
Code Vision. Informatika. Bandung.
7. Wardana, Lingga. 2006. Belajar Sendiri
Mikrokontroler AVRSeri ATmega 8535 Simulasi
Hardware dan Aplikasi. Yogyakarta: Andi
41

BAB IV
INTERUPSI

RINGKASAN
Interrupt/Interupsi ialah suatu kondisi dimana CPU
(Central Processing Unit) berhenti dari rutinitas yang
sedang dikerjakan dan mengerjakan rutinitas lain yang
ditunjuk oleh interupsi tersebut. Ketika rutinitas yang
ditunjuk interupsi telah selesai dieksekusi, maka CPU
akan mulai mengekseskusi rutinitas awal sebelum adanya
interupsi yang terhenti dari tempat terakhir. ATmega8535
memiliki tiga buah eksternal interrupt yaitu INT0 (PD2),
INT1(PD3), dan INT2(PB2). Ketiga interrupt ini yaitu
INT0 s.d INT2 akan tertrigger walaupun portnya
dikonfigurasi sebagai output. Fitur ini memungkinkan
interrupt yang dikondisikan oleh software yaitu dengan
menseting register interupsi yang sesuai. Semua interupsi
akan tertrigger jika terdapat perubahan rising edge atau
falling edge. Mode any change tidak dimiliki INT2,
sedangkan INT0 dan INT1 memilikinya. Mode any
change memungkinkan interrupt terpanggil baik ketika
rising dan falling edge.

4.1 REGISTER INTERUPSI


Pada AVR ATmega8535 terdapat 21 buah
interupsi yang ditunjukkan pada tabel 4.1. Register-
register yang harus disetting untuk mengaktifkan eksternal
interupsi ialah GICR (General Interrupt Control Register),
GIFR (General Interrupt Flag Register), MCUCR (MCU
Control Register), dan MCUCSR (MCU Control and
Status Register).
42

Tabel 4.1 Reset dan vector interrupt

GICR (General Interrupt Control Register)

• Bit 7 – INT1: External Interrupt Request 1 Enable


Untuk enable External Interrupt 1
• Bit 6 – INT0: External Interrupt Request 0 Enable
Untuk enable External Interrupt 0
• Bit 5 – INT2: External Interrupt Request 2 Enable
Untuk enable External Interrupt 2
43

GIFR (General Interrupt Flag Register)

• Bit 7 – INTF1: External Interrupt Flag 1


Ketika terjadi eksternal interrupt pada INT1, maka Flag
INTF1 diset 1. Setelah routine eksternal interrupt selesai
dieksekusi maka Flag INTF1 diset 0.
• Bit 6 – INTF0: External Interrupt Flag 0
Ketika terjadi eksternal interrupt pada INT0, maka Flag
INTF0 diset 1. Setelah routine eksternal interrupt selesai
di eksekusi maka Flag INTF0 diset 0.
• Bit 5 – INTF2: External Interrupt Flag 2
Ketika terjadi eksternal interrupt pada INT2, maka Flag
INTF2 diset 1. Setelah routine eksternal interupt selesai
dieksekusi maka Flag INTF2 diset 0.
MCUCR (MCU Control Register)

• Bit 3, 2 – ISC11, ISC10: Interrupt Sense Control 1 Bit 1


and Bit 0
Bit ini mengatur sensitifitas yang akan dimiliki oleh port
eksternal interrupt 1. Pilihan sensitifitas dapat dilihat
pada tabel 4.2.
Tabel 4.2 Sensitivitas control interupt 1
44

• Bit 1, 0 – ISC01, ISC00: Interrupt Sense Control 0 Bit 1


and Bit 0
Bit ini mengatur sensitivitas yang akan dimiliki oleh
port eksternal interrupt 0. Pilihan sensitivitas dapat
dilihat pada tabel 4.3.
Tabel 4.3 Sensitivitas control interrupt 0.

MCUCSR (MCU Control and Status Register)

• Bit 6 – ISC2: Interrupt Sense Control 2


Jika ISC2 ditulis 0 maka falling edge pada INT2 akan
mengaktifasi interupsi. Jika ISC2 ditulis 1, maka rising
edge pada INT2 akan mengaktifasi interupsi.

4.2 CONTOH PROGRAM DENGAN KETIGA


EKSTERNAL INTERRUPT
#include <mega32.h>
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
PORTA.0 = 1;
}
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
PORTA.1 = 1;
}
45

// External Interrupt 2 service routine


interrupt [EXT_INT2] void ext_int2_isr(void)
{
PORTA.2 = 1;
}
void main()
{
DDRD.2 = 0; //pind.2 INT0 (input)
DDRD.3 = 0; //pind.3 INT1 (input)
DDRB.2 = 0; //pinb.2 INT2 (input)
DDRA.0 = 1; //output
DDRA.1 = 1; //output
DDRA.2 = 1; //output
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Rising Edge
// INT1: On
// INT1 Mode: Rising Edge
// INT2: On
// INT2 Mode: Rising Edge
GICR |=0xE0; // GICR |=0b11100000
MCUCR =0x0F; // MCUCR =0b00001111
MCUCSR=0x40; // MCUCSR=0b01000000
GIFR =0xE0; // GIFR =0b11100000
#asm("sei") //global enable interrupts (SREG)
While(1)
{};
}
4.3 APLIKASI LED DENGAN INTERUPSI
Interupsi bisa digunakan untuk menyela rutin 8 led
berjalan menjadi 4 led hidup mati dengan interup 0.
Gambar rangkaian dan seting code Wizard adalah seperti
gambar 4.1.
46

Gambar 4.1 Rangkaian LED dan Codewizard interupsi eksternal


Potongan program untuk rangkaian LED interupsi adalah
seperti berikut.
47

4.4 RANGKUMAN
1. Interrupt/Interupsi ialah suatu kondisi dimana CPU
(Central Processing Unit) berhenti dari rutinitas yang
sedang dikerjakan dan mengerjakan rutinitas lain yang
ditunjuk oleh interupsi tersebut.
2. ATmega8535 memiliki tiga buah eksternal interrupt
yaitu INT0 (PD2), INT1(PD3), dan INT2(PB2).
Ketiga interrupt ini yaitu INT0 s.d INT2 akan
tertrigger walaupun portnya dikonfigurasi sebagai
output.
3. Fitur interupsi perangkat keras ini memungkinkan
interupsi yang dikondisikan oleh software yaitu
dengan menseting register interupsi yang sesuai.

4.5 TUGAS
1. Buatlah program dengan memakai ketiga interup
eksternal sesuai dengan urutan prioritasnya. Pakai
48

output berupa LED berjalan satu-satu, dua-dua dan


tiga- tiga

4.6 DAFTAR BACAAN


1. Atmel. Data sheet AVR ATmega8535/8535L. tersedia
di http://www.atmel.com/images/doc2502.pdf diakses
tgl 16 Mei 2009
2. AVR033: Getting Started with the CodeVisionAVR C
Compiler. tersedia di http://www.atmel.com / images /
doc2500.pdf diakses tgl 16 Mei 2009
3. Barrett, Steven F., Pack, Daniel J.. 2008. Atmel AVR
Microcontroller Primer : Programming and Interfacing.
Laramie and Colorado Springs: Morgan & Claypool
4. CodeVisionAVR tersedia di http://www.hpinfotech. ro.
diakses tgl 1 Mei 2013
5. DIVISI WORKSHOP HME ITB. 2010. MODUL
TRAINING. MIKROKONTROLER AVR. Tersedia
pada http://125.161.127.119/arsip/uploads/arsip/6-
MODUL _AVR.pdf diakses tgl 29 Mei 2014
6. P Wisnu Adi., Heryanto, M Ary. 2008. Pemrograman
Bahasa C untuk Mikrokontroler ATmega 8535.
Yogyakarta: Andi
7. Rangkuti,Syahban. 2011. Mikrokontroler Atel AVR
Simulasi dan Praktek Menggunakan ISIS Proteus dan
Code Vision. Informatika. Bandung.
49

BAB V
TIMER / COUNTER

RINGKASAN
Timer/Counter pada AVR dapat digunakan untuk
melakukan pencacahan waktu seperti pada jam digital
maupun untuk menghasilkan sinyal PWM (Pulse Width
Modulation) yakni sinyal kotak dengan frekuensi dan duty
cycle yang nilainya bisa diatur. Atmega8535 memiliki
tiga unit Timer/Counter yaitu Timer/Counter 0 (8 bit),
Timer/Counter 1 (16 bit), dan Timer/Counter 2 (8 bit).

5.1 TIMER/COUNTER 0
Fitur-fitur yang dimiliki:
• Satu buah unit Compare Counter (Unit ini akan
mengcount dan mengcompare)
• Clear timer pada saat compare match (Auto reload)
• Phase Correct PWM yang bebas glitch
• Frequency generator
• External event counter
• Prescaler clock hingga 10 bit
• Source interrupt overflow dan compare match (TOV0
dan OCF0)
Definisi timer
Timer/Counter adalah sebuah unit yang dapat
menghitung (Counter) dan melakukan timing dengan
menggunakan frekuensi kristal se-bagai sumber clock
counter internalnya atau sumber eksternal melalui pin T0.
Gambar 5.1 adalah blok diagram Timer/Counter 0.
50

Gambar 5.1 Diagram blok timer0 / counter 0


Register
Timer/Counter (TCNT0) dan Output Compare
Register (OCR0) adalah register 8 bit. Sinyal permintaan
interrupt dapat dilihat pada TIFR (Timer Interrupt Flag
Register). Semua interrupt secara individual terlindungi
oleh Timer Interrupt Mask Register (TIMSK). TIMSK
dan TIFR tidak diperlihatkan pada gambar di atas karena
penggunaannya dishare dengan unit timer yang lain.
Timer/Counter dapat diberi sumber clock secara
internal dan dapat diatur frekuensinya dengan prescaler
bit (bit pembagi) atau diberi sumber clock eksternal
melalui pin T0. Blok Clock Select Logic akan
menentukan sumber clock mana yang digunakan untuk
menambah atau mengurangi nilai yang terdapat pada
register timernya. Timer/Counter akan tidak aktif ketika
tidak ada sumber clock yang dipilih.
Nilai yang ada pada Output Compare Register
(OCR) akan dibandingkan dengan nilai yang ada pada
Timer/Counter setiap saat. Hasil dari proses
pembandingan ini dapat digunakan waveform generation
untuk menghasilkan PWM (Pulse Width Modulation) atau
51

output yang memiliki frekuensi yang berubah pada pin


Output Compare (OC0). Kejadian pembandingan output
yang sesuai nilainya antara OCR dan nilai pada
Timer/Counter akan mengeset nilai pada Output Compare
Flag (OCF0) yang dapat digunakan untuk menghasilkan
permintaan output compare interrupt.
Definisi
Beberapa definisi mengenai batasan nilai pada
Timer/Counter0:
BOTTOM: Counter akan mencapai BOTTOM ketika
bernilai 0x00
MAX: Counter akan mencapai MAX ketika bernilai
0xFF
TOP: Counter akan mencapai TOP ketika bernilai
sama dengan nilai tertinggi dalam urutan
penghitungan. Nilai TOP ini dapat ditetapkan
dari nilai fix seperti 0xFF (MAX) atau nilai
yang terdapat pada register OCR0. Penetapan
nilai TOP ini bergantung pada mode operasi
yang sedang dijalankan.
Unit Counter
Bagian utama dari Timer/Counter 8-bit ialah unit
counter yang dapat diprogram secara bidirectional.
Gambar 5.2 memperlihatkan diagram blok dari unit
counter dan lingkungannya.

Gambar 5.2 Diagram blok counter dan lingkungannya


52

Deskripsi sinyal:
Count: Increment (menambah) atau decrement
(mengurangi) TCNT0 dengan nilai 1
Direction: Untuk memilih antara menambah atau
mengurangi
Clear: TCNT0 (mengeset semua nilai menjadi 0)
TOP: Memberi sinyal bahwa TCNT0 telah
mencapai nilai maksimum
BOTTOM: Memberi sinyal bahwa TCNT0 telah
mencapai nilai minimum (nol)
Unit Output Compare
Komparator 8 bit secara kontinu membandingkan
nilai TCNT0 dengan nilai register Output Compare
(OCR0). Ketika TCNT0 sama dengan OCR0, maka
komparator akan memberi sinyal bahwa terjadi kesamaan.
Kesamaan ini akan mengeset Output Compare Flag
(OCF0) pada saat clock cycle timer selanjutnya. Jika
OCIE0 = 1 dan Global Interrupt Flag di SREG di set,
maka Output Compare Flag akan menghasilkan interupsi
output compare. Flag OCF0 akan secara otomatis di clear
kan ketika interupsi dieksekusi. Gambar 5.3
memperlihatkan blok diagram unit Output Compare.

Gambar 5.3 Diagram blok unit Output Compare.


53

Mode
Mode operasi ialah kelakuan dari Timer/Counter
dan pin Output Compare. Mode ini dibedakan melalui
kombinasi dari bit mode Waveform Generation
(WGM01:0) dan bit mode Compare Output (COM01:0).
Mode Compare Output tidak akan mempengaruhi alur
peng-hitungan, sedangkan mode Waveform Generation
mempengaruhinya. Bit-bit COM01:0 mengatur apakan
output PWM yang dihasilkan dibalik atau tidak (inverted
atau noninverted PWM). Untuk mode yang non PWM
maka bit-bit COM01:0 yang akan mengontrol output akan
diset, diclear, atau dibalik (toggle) saat terjadi compare
match.
Mode-mode yang terdapat antara lain:
• Mode Normal
Mode operasi yang paling simpel ialah mode
normal (WGM01:0 = 0). Pada mode ini arah
penghitungan selalu naik (incrementing), dan tidak
terdapat clear terhadap counter yang dilaksanakan.
Counter akan mengalami overrun ketika telah mencapai
nilai maksi-mumnya yaitu 8 bit (TOP = 0xFF) dan
direstart dari bawah (0x00). Pada operasi normal, Flag
Overflow Timer/Counter (TOV0) akan di set pada saat
clock cycle timer yang sama ketika TCNT0 menjadi nol.
Flag TOV0 ini jika digabungkan dengan dengan
interupsi timer overflow yang akan secara otomatis
mengclearkan flag TOV0, maka resolusi timer akan
dapat ditingkatkan melalui software.
• Mode Clear Timer on Compare (CTC) match
Pada mode CTC ini (WGM01:0 = 2), register
OCR0 digunakan untuk memanipulasi resolusi counter.
Pada mode ini counter akan diclear menjadi nol ketika
nilai counter (TCNT0) mengalami nilai yang sama
dengan OCR0. OCR0 mendefinisikan nilai TOP dari
54

counter dan juga resolusi dari counter tersebut. Mode ini


memberikan kontrol yang lebih besar pada frekuensi
output compare match. Hal ini pula mempermudah
operasi penghi-tungan event eksternal. Diagram timing
untuk mode CTC ditunjukkan pada gambar 5.4. Nilai
counter (TCNT0) naik terus hingga terjadi compare
match antara TCNT0 dan OCR0, lalu counter (TCNT0)
diclearkan (dinolkan).

Gambar 5.4 Diagram timing untuk mode CTC


Interupsi dapat dibangkitkan setiap kali nilai
counter mencapai TOP dengan menggunakan flag OCF0.
Jika interupsi diaktifkan, maka interrupt handler routine
(rutinitas yang akan dieksekusi ketika terjadi interupsi)
dapat digunakan untuk mengupdate nilai TOP.
Bagaimana-pun, mengubah nilai TOP dengan nilai yang
dekat dengan nilai BOTTOM ketika counter sedang
berjalan dengan nilai prescaler yang rendah atau nol harus
dilakukan dengan ekstra hati-hati karena mode CTC tidak
memiliki fitur double buffering. Jika nilai yang
dimasukkan ke dalam OCR0 lebih rendah daripada nilai
saat itu yang terdapat pada TCNT0, maka counter akan
kehilangan event compare match. Counter akan
menghitung hingga nilai maksimum (0xFF) lalu mulai
kembali dari 0x00 sebelum event compare match terjadi.
Untuk menghasilkan output yang berupa gelombang pada
55

mode CTC, output OC0 dapat diset untuk men-toggle


logic level output tersebut setiap terjadi event compare
match dengan mensetting mode Compare Output menjadi
mode toggle (COM01:0 = 1). Nilai OC0 tidak akan
muncul pada port pin hingga data direction untuk pin di
set menjadi output. Baca kembali bagian Basic Input
Output di atas pada seksi Port I/O sebagai output.
Frekuensi dari gelombang yang di-bangkitkan akan
memiliki frekuensi maksimum fOC0 = fclk_I/O/2 ketika
OCR0 diset bernilai nol (0x00). Frekuensi dari gelombang
didefinisikan melalui persamaan sebagai berikut:

Variabel N merepresentasikan faktor nilai prescaler (1, 8,


64, 256, atau 1024) Sama dengan mode operasi normal,
flag TOV0 akan diset pada saat clock cycle timer yang
sama ketika peralihan dari MAX ke 0x00.
• Mode Fast PWM
Mode fast Pulse Width Modulation atau mode fast
PWM (WGM01:0 = 3) memberikan opsi untuk
membangkitkan gelombang PWM yang berfrekuensi
tinggi. Operasi fast PWM ini berbeda dengan dengan opsi
PWM lain yang ditandai dengan operasi kemiringan
tunggalnya (single slope operation). Counter akan
menghitung mulai dari BOTTOM hingga MAX lalu
restart kembali dari BOTTOM. Pada mode noninverting
Compare Output, Output Compare (OC0) akan diclear
kan (0) ketika terjadi event compare match antara TCNT0
dan OCR0, dan di set (1) pada nilai BOTTOM. Pada
mode inverting Compare Output, output diset ketika
terjadi event compare match dan diclearkan pada
BOTTOM. Karena operasinya yang single slope, maka
56

frekuensi operasinya fast PWM dapat mencapai dua kali


lebih tinggi dari frekuensi operasi mode phase correct
PWM yang menggunakan operasi dual slope. Frekuensi
yang tinggi ini membuat mode fast PWM cocok
digunakan untuk aplikasi power regulation, rectification,
dan aplikasi DAC (Digital to Analog Converter).
Frekuensi yang tinggi membolehkan penggunaan
komponen fisik eksternal seperti kapasitor dan induktor
yang kecil yang dapat mengurangi biaya total sistem.
Pada mode fast PWM, counter akan menghitung secara
naik (incremented) hingga nilai counter mencapai nilai
MAX. Counter kemudian di cear kan pada saat clock
cycle timer selanjutnya. Diagram timing untuk mode fast
PWM ditunjukkan pada gambar 5.5. Nilai TCNT0 pada
diagram ditunjukkan dengan setengah segitiga histogram
untuk meng-ilustrasikan operasi single slope. Garis panah
horizontal kecil yang menandai kemiringan TCNT0
merepresentasikan event compare match antara TCNT0
dan OCR0.

Gambar 5.5 Diagram timing untuk mode fast PWM


Flag overflow Timer/Counter (TOV0) akan diset setiap
kali counter mencapai nilai MAX. Jika interupsi diaktif-
57

kan, maka interrupt handler routine dapat digunakan


untuk mengupdate nilai compare.
Pada mode fast PWM, unit compare dapat
digunakan untuk membangkitkan gelombang PWM pada
pin OC0. Mengeset bit-bit COM01:0 menjadi 2 akan
menghasilkan noninverted PWM dan inverted PWM
dapat dihasilkan dengan mengeset bit-bit tersebut menjadi
3. Nilai OC0 yang aktual akan dapat didapat pada port pin
jika data direction pada port pin di set sebagai ouput.
Gelombang PWM dibangkitkan dengan mengeset (atau
mengclearkan) register OC0 pada saat terjadi compare
match antara TCNT0 dan OCR0, dan mengclearkan (atau
me-ngeset) register OC0 pada clock cycle timer saat
counter di clearkan (perubahan ketika MAX menuju
BOTTOM). Frekuensi PWM dari output dapat dihitung
melalui persamaan berikut ini:

Variabel N merepresentasikan nilai faktor prescaler (1, 8,


64, 256, 1024).
• Mode Phase Correct PWM
Mode phase correct PWM (WGM01:0 = 1)
memberikan opsi untuk membangkitkan gelombang phase
correct PWM yang memiliki resolusi tinggi. Mode phase
correct PWM ini berdasarkan pada operasi dual slope (dua
kemiringan yaitu kemiringan naik dan turun). Counter
akan menghitung secara berulang-ulang dari BOTTOM
menuju MAX lalu dari MAX menuju BOTTOM. Pada
mode non-inverting Compare Output, Output Compare
(OC0) akan di clear kan ketika terjadi event compare
match antara TCNT0 dan OCR0 ketika peng-hitungan
naik (upcounting), dan di set ketika terjadi event compare
match pada saat penghi-tungan mundur (downcounting).
58

Pada mode inverting Output Compare, operasinya di


invert atau dibalik. Operasi dual slope memiliki frekuensi
maksimum yang lebih rendah dari pada operasi single
slope. Bagaimanapun, karena fitur kesimetrisan dari mode
PWM dual slope ini menjadikannya cocok untuk aplikasi
kontrol motor. Resolusi PWM untuk mode phase correct
PWM di fix kan menjadi delapan bit. Pada mode phase
correct PWM counter akan melakukan penghitungan naik
hingga mencapai nilai MAX. Ketika telah mencapai nilai
MAX maka arah penghitungan dibalik yaitu mundur atau
berkurang. Nilai TCNT0 akan sama dengan nilai MAX
dalam waktu satu clock cycle timer. Diagram timing
untuk mode phase correct PWM ini diperlihatkan pada
gambar 5.6. Nilai TCNT0 pada diagram menunjukkan
bentuk histogram segitiga penuh untuk mengilustrasikan
operasi dual slope. Diagram ini memberikan ilustrasi
output inverting dan non inverting. Garis panah horizon
yang menandai kemiringan TCNT0 merepresentasikan
event compare match antara TCNT0 dan OCR0.

Gambar 5.6 Diagram timing untuk mode phase correct PWM


Flag overflow Timer/Counter (TOV0) akan diset
setiap kali counter mencapai BOTTOM. Flag interupsi
dapat digunakan untuk membangkitkan interupsi setiap
kali counter mencapai nilai BOTTOM. Pada mode phase
correct PWM, unit compare dapat digunakan untuk
59

membangkitkan gelombang PWM pada pin OC0. Dengan


mengeset bit-bit COM01:0 menjadi 2 akan menghasilkan
PWM non-inverting. Output PWM inverting dapat
dihasilkan dengan mengeset bit-bit COM01:0 menjadi 3.
Nilai aktual OC0 akan terlihat pada port pin jika data
direction untuk port pin diset menjadi output. Gelombang
PWM dibangkit-kan dengan mengclearkan (atau
mengeset) register OC0 pada saat compare match antara
TCNT0 dan OCR0 ketika counter menghitung naik
(increment), dan mengeset (atau meng-clearkan) register
OC0 pada saat compare match antara TCNT0 dan OCR0
ketika counter melakukan penghitungan mundur
(decrement). Frekuensi output PWM ketika menggunakan
phase correct PWM dapat dihitung melalui persamaan:

variabel N merepresentasikan nilai faktor prescaler (1, 8,


64, 256, atau 1024). Nilai ekstrim untuk register OCR0
merepresentasikan kasus spesial ketika membangkitkan
output gelom-bang PWM pada mode phase correct PWM.
Jika OCR0 di set sama dengan BOTTOM, maka output
akan secara kontinyu bernilai low atau 0 dan jika OCR0
diset sama dengan MAX maka output akan secara
kontinyu bernilai high atau 1. untuk PWM inverted
nilainya akan memiliki logika yang berkebalikan. Pada
permulaan perioda 2 pada gambar OCn memiliki transisi
dari high menuju low walaupun tidak terdapat compare
match. Poin penting dari kejadian ini adalah untuk
menjamin kesimetrisan disekitar BOTTOM. Terdapat dua
kasus yang yang dapat menghasilkan transisi walaupun
pada keadaan aslinya tidak terdapat compare match:
1. Nilai OCR0A berubah dari nilai MAX seperti pada
60

gambar. Ketika nilai OCR0A ialah MAX maka nilai


pin OCn akan sama dengan hasil compare match
ketika down counting. Untu memastikan kesimetrian
disekitas BOTTOM maka nilai OCn ketika MAX
berkorespondensi dengan hasil compare match ketika
up counting.
2. Timer mulai menghitung pada nilai yang lebih besar
dari OCR0A, dan untuk alasan itu akan mengalami
kehilangan event compare match dan juga perubahan
pada OCn yang seharusnya terjadi ketika up counting.
Deskripsi register timer/counter 8 bit
Timer/Counter Control Register (TCCR0)

• Bit 7 – FOC0 : Force Output Compare


Bit FOC0 hanya aktif ketika bit WGM00 menspe-
sifikasikan mode non-PWM. Bagaimanapun, untuk me-
mastikan kompatibilitas dengan peralatan masa depan,
bit ini harus diset nol ketika TCCR0 ditulis ketika ber-
operasi pada mode PWM.
• Bit 6, 3 – WGM01:0 : Waveform Generation Mode
Bit ini mengontrol urutan penghitungan dari
counter, sumber bagi nilai counter maksimum (TOP),
dan tipe apa dari Waveform Generation yang akan di-
gunakan. Mode operasi yang disupport oleh unit Timer
/Counter ialah: mode Normal, mode Clear Timer on
Compare Match (CTC), dan dua tipe mode PWM.
61

Tabel 5.1 Deskripsi bit mode pembangkitan bentuk gelombang

• Bit 5, 4 – COM01:0 : Compare Match Output Mode


Bit ini mengontrol kelakuan pin Output Compare
(OC0). Jika satu atau lebih bit pada COM01:0 di set,
maka output OC0 akan mengesampingkan fungsionalitas
normal port dari pin I/O yang terhubung padanya.
Bagaimanapun, harus dicatat bahwa bit Data Direction
Register (DDR) yang berhubungan dengan pin OC0 harus
di set dalam rangka untuk meng- aktifkan driver output.
Ketika OC0 terhubung pada pin, fungsi dari bit-bit
COM01:0 ber-gantung kepada settingan bit WGM01:0.
Tabel memperlihatkan fungsionalitas dari tiap-tiap bit
COM01:0 ketika bit-bit WGM01:0 di set ke mode Normal
atau mode CTC (non-PWM).
Tabel 5.2 Mode non PWM, compare output mode

Tabel 5.3 memperlihatkan fungsionalitas dari tiap-tiap bit


COM01:0 ketika bit-bit WGM01:0 diset ke mode fast
PWM.
62

Tabel 5.3 Mode fast PWM, compare output mode

Tabel 5.4 memperlihatkan fungsionalitas dari tiap-tiap bit


COM01:0 ketika bit-bit WGM01:0 di set ke mode phase
correct PWM.
Tabel 5.4 Mode phase correct PWM, compare output mode

• Bit 2:0 - CS02:0 : Clock Select


Tiga buah bit Clock Select akan memilih sumber clock
yang akan dipakai oleh Timer/Counter.
Tabel 5.5 Deskripsi bit clock select

Jika mode pin eksternal digunakan untuk Timer /


Counter0, transisi pada pin T0 akan memberi clock pada
counter walaupun pin tersebut dikonfigurasi sebagai pin
63

output. Fitur ini mem-berikan kesempatan untuk me-


ngontrol clock secara software.
Timer/Counter Register - TCNT0

Register Timer/Counter memberikan akses langsung, baik


untuk operasi baca dan tulis ke unit counter 8-bit Timer
/Counter0. Memodifikasi counter (TCNT0) ketika counter
sedang berjalan, akan menampilkan resiko kehilangan
compare match antara register TCNT0 dan OCR0.
Output Compare Register - OCR0

Output Compare Register memiliki 8 bit nilai yang secara


kontinyu dibandingkan dengan nilai counter (TCNT0).
Sebuah match atau kesamaan dapat diguna-kan untuk
menghasilkan interupsi output compare, atau untuk mem-
bangkitkan output berupa gelombang pada pin OC0.
Timer/Counter Interrupt Mask Register - TIMSK

• Bit 1 - OCIE0: Timer/Counter0 Output Compare


Match Interrupt Enable
Ketika bit OCIE0 di tulis 1, dan bit-I pada Status Regis-
ter di set (1), maka interupsi compare match Timer/
Counter0 diaktifkan. Interupsi yang bersangkutan akan
dieksekusi jika compare match pada Timer/Counter0
64

terjadi atau dengan kata lain bit OCF0 diset di Timer/


Counter Interrupt Flag Register - TIFR.
• Bit 0 - TOIE0: Timer/Counter0 Overflow Interrupt
Enable
Ketika bit TOIE0 di tulis 1, dan bit-I pada Status Register
di set (1), maka interupsi overflow Timer/ Counter 0
diaktifkan. Interupsi yang bersangkutan akan dieksekusi
jika overflow pada Timer/Counter 0 terjadi atau dengan
kata lain bit TOV0 diset di Timer/Counter Interrupt Flag
Register - TIFR.
Timer/Counter Interrupt Flag Register – TIFR

• Bit 1 - OCF0: Output Compare Flag 0


Bit OCF0 akan di set (1) ketika terjadi compare match
antara Timer/ Counter0 dan data pada OCR0 - Output
Compare Register. OCF0 akan di clearkan oleh hard-ware
ketika mengeksekusi interrupt handling vektor yang
berkaitan.
• Bit 0 - TOV0: Timer/Counter0 Overflow Flag
Bit TOV akan di set (1) ketika terjadi overflow pada
Timer /Counter0. TOV akan di clear kan oleh hardware
ketika mengeksekusi interrupt handling vektor yang ber-
kaitan.

5.2 TIMER/COUNTER1 (16-BIT)


Unit Timer/Counter 16-bit mengijinkan timing
eksekusi program yang akurat (event management),
pembangkitan gelombang dan mengukur timing sinyal.
Fitur utama unit ini adalah:
• Desain 16 bit yang sesungguhnya
• Dua unit independen Output Compare
65

• Double buffered Output Compare Register


• Satu buah unit Input Capture
• Clear Timer ketika terjadi Compare Match (Auto
Reload)
• Phase Correct PWM yang bebas glitch
• Periode PWM yang variabel
• Generator Frekuensi
• External Event Counter
• Empat buah sumber Interupsi independen (TOV1,
OCF1A, OCF1B, dan ICF1)
Register
Register Timer/Counter (TCNT1), Output Com-
pare Register (OCR1A/B), dan Input Capture Register
(ICR1) ialah register 16-bit. Untuk melakukan penulisan
16-bit, high byte harus dituliskan ter-lebih dahulu sebe-
lum low byte. Untuk melakukan pembacaan 16-bit,
pembacaan low byte dilakukan terlebih dahulu sebelum
pembacaan high byte.
Definisi
BOTTOM: Counter akan mencapai BOTTOM ketika
bernilai 0x0000.
MAX: Counter akan mencapai MAXimum ketika
bernilai 0xFFFF (desimal 65535).
TOP: Counter akan mencapai TOP ketika menca-
pai nilai tertinggi dalam alur penghitungan.
Nilai TOP dapat dimasukkan ke dalam salah
satu nilai fix, 0x00FF, 0x01FF, atau 0x03FF
atau pada nilai yang tersimpan pada register
OCR1A atau ICR1. Pemasukan nilai TOP ini
bergantung pada mode operasi yang dijalan-
kan.
Unit Counter
Bagian utama dari Timer/Counter 16 bit ialah
sebuah unit counter 16 bit yang dapat diprogram secara
66

bidirectional. Gambar 5.7 memperlihatkan blok diagram


counter dan sekelilingnya.

Gambar 5.7 Blok diagram counter 16 bit dan sekelilingnya.


Deskripsi sinyal (sinyal internal):
Count: Increment atau decrement TCNT dengan nilai
1.
Direction: Pilih antara increment dan decrement
Clear: Clear TCNT1 (mengeset semua bit menjadi
nol)
TOP: Memberi sinyal bahwa TCNT1 telah
mencapai nilai maksimum
BOTTOM: Memberi sinyal bahwa TCNT1 telah
mencapai nilai minimum (nol)
Counter 16-bit dipetakan ke dalam dua buah lokasi
I/O memori 8-bit: Counter High (TCNT1H) mengandung
delapan bit paling atas dari counter, dan Counter Low
(TCNT1L) mengandung delapan bit yang bawah. Register
TCNT1H hanya dapat diakses secara indirect oleh CPU.
Ketika CPU mengakses lokasi I/O TCNT1H, CPU akan
mengakses high byte register temporary (TEMP). Register
temporary ini diupdate dengan nilai TCNT1H ketika
TCNT1L dibaca, dan TCNT1H diupdate dengan nilai
pada register temporary ketika TCNT1L ditulis.
Bergantung pada mode operasi yang digunakan, counter
akan diclearkan, diincrement, atau didecrement setiap
clock timer. Sumber clock timer ini dapat dibangkitkan
67

dari sumber internal atau eksternal, yang dipilih melalui


bit Clock Select (CS12:0). Ketika tidak ada sumber clock
yang dipilih (CS12:0 = 0) maka timer akan berhenti. Alur
peng-hitungan ditentukan dengan mengeset bit-bit
Waveform Generation Mode (WGM13:0) yang berlokasi
di Timer/Counter Control Register A dan B (TCCR1A dan
TCCR1B).
Mode Operasi
Mode operasi ialah kelakuan dari Timer/Counter
dan pin output compare yang didefinisikan melalui
kombinasi bit-bit yang ada pada Waveform Generation
mode (WGM13:0) dan bit-bit pada Compare Output mode
(COM1x1:0). Bit-bit mode Compare Output tidak
mempe-ngaruhi alur penghitungan, sedangkan bit-bit
mode Waveform Generation mempengaruhi. Bit-bit
COM1x1:0 mengontrol apakah output PWM yang
dibangkitkan akan diinvert atau tidak (inverted atau
noninverted PWM). Untuk mode nonPWM, bit-bit
COM1x1:0 mengontrol apakah output akan diset, diclear
atau ditoggle ketika terjadi compare match.
• Mode Normal
Mode operasi yang paling simpel ialah mode
Normal (WGM13:0 = 0). Pada mode ini arah
penghitungan selalu naik atau up counting (incrementing),
dan tidak ada clear counter yang dilakukan. Counter akan
secara simple mengalami overrun atau overflow ketika
telah mencapai nilai maksimum 16 bit.

5.3 APLIKASI TIMER


Mode Normal
Pada ATmega 8535 terdapat 3 buah timer, yaitu
Timer 0 (8 bit), Timer 1 (16 bit) dan Timer 2 (8 bit).
Untuk perbedaan dan cara kerja masing-masing timer
secara lengkap dapat dibaca pa-da datasheet. Disini akan
membahas Timer 0 dan Timer1 sedangkan Timer 2
68

memiliki perlakuan yang sama dengan Timer 0. Per-


hitungan untuk Timer 0 Timer 1 adalah sebagai berikut:
Ttimer0 = Tosc*(256-TCNT0)*N →(8 bit = 256)
Ttimer1 = Tosc*(65536-TCNT1)*N → (16 bit = 65536)
Tosc = 1/Fosc → pada aplikasi ini menggunakan kristal
12 MHz, sehingga:
Tosc = 1/12Mhz = 0,0000000833 detik
Dengan: Ttimer 0 = lamanya periode Timer 0
Ttimer 1 = lamanya periode Timer 1
TCNT0 = Register Timer 0
TCNT1 = Register Timer 1
N = Skala clock (mempunyai nilai 1, 8, 64, 256
dan 1024)
Tosc = periode clock, Fosc = frekuensi clock
kristal
Sekarang kita akan membuat aplikasi timer yang
ditampilkan pada LCD. LCD menampilkan suatu nilai
yang akan selalu bertambah setiap detik (menggunakan
fitur timer), nilai awal yaitu 0 setelah 1 detik
(menggunakan timer) kemudian nilai tersebut akan naik
menjadi 1, kemudian 2 dan seterusnya, jika sudah sampai
100 maka akan diset kembali menjadi 0. Rangkaian
simulasi proteusnya bisa dilihat pada gambar 5.8.
69

Gambar 5.8 Rangkaian simulasi proteus timer detik


Menggunakan Timer1:
Ttimer1 = Tosc*(65536-TCNT1)*N
Pada aplikasi diatas diinginkan lamanya timer adalah 1
detik (Ttimer1 = 1 detik) dan jika menggunakan kristal 12
MHz dan menggunakan skala clock N = 1024, maka
didapat:
1 = 0,0000000833*(65536-TCNT1)*1024
TCNT1= 53817.25 dibulatkan menjadi 53818
TCNT1= 53818 = D23A (dalam hexa)
Dari perhitungan ini didapat nilai 53818 atau dalam hexa
D23A, nilai tersebut harus diisikan pada register TCNT1
agar Timer 1 bernilai 1 detik. Gambar 5.9 adalah setting
timer 1 pada Code Wizard AVR. Pada gambar 5.9
digunanakan nilai clock value yaitu 11.719 kHz, nilai
tersebut didapat dari Fosc/N atau 12 Mhz/1024.
70

Gambar 5.9 Setting timer 1 pada Code Wizard AVR


Berikut adalah listing program lengkapnya:
#include <mega8535.h>
#include <stdlib.h>
#asm .equ __lcd_port=0×15 ;
PORTC
#endasm
#include <lcd.h>
unsigned char temp[6]; int data;
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
TCNT1H=0xD23A >> 8;
TCNT1L=0xD23A & 0xff;
data++; //setelah 1 detik increament data
}
void main(void)
{
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
71

// Timer 1 Overflow Interrupt: On


// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0×00;
TCCR1B=0×05;
TCNT1H=0xD2;
TCNT1L=0x3A;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;
// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0×04;
// LCD module initialization lcd_init(16);
// Global enable interrupts
#asm(“sei”) while (1)
{
if (data==100)
{
lcd_clear(); data=0;
}
lcd_gotoxy(0,0);
lcd_puts(“Timer :”);
itoa(data,temp); //menampilkan di LCD
lcd_gotoxy(0,1);
lcd_puts(temp); };
}
Menggunakan Timer 0 :
Ttimer0 = Tosc*(256-TCNT0)*N
Dengan menggunakan Timer 0, untuk aplikasi
yang sama seperti pada timer 1, karena sebenarnya timer 0
ini tidak dapat menghasilkan periode timer selama 1 detik
karena keter-batasan jumlah bit yaitu hanya 8 bit (256)
saja.Tetapi kita masih dapat memanipulasi program agar
dapat menghasilkan timer selama 1 detik, caranya dengan
membuat timer selama 10 ms kemudian dilakukan
72

pengulangan sebanyak 100 kali, maka akan dihasilkan


timer selama 1 dt.
10 ms * 100= 1 detik
Pada aplikasi ini diinginkan lamanya timer adalah 10 ms
(Ttimer0 = 10 ms = 0.01 s), meng-gunakan kristal 12
MHz dan skala clock/prescaler N = 1024, maka didapat:
0.01 = 0,0000000833*(256-TCNT0)*1024
TCNT0= 138 = 8A (dalam hexa)
Hasil perhitungan ini mendapatkan nilai 138 atau dalam
hexa 8A, nilai tersebut harus diisikan pada register
TCNT0 agar Timer 0 bernilai 10 mili detik. Gambar 5.10
adalah gambar untuk mensetting CodeWizard pada
CodeVision AVR.
Pada setting ini digunanakan nilai clock 11.719
kHz, nilai tersebut didapat dari Fosc/N atau 12 Mhz/1024.

Gambar 5.10 Setting timer 0 pada CodeWizard AVR


Berikut adalah listing unsigned char temp[6], loop=0;
program lengkapnya: int data;
#include <mega16.h> // Timer 0 overflow interrupt
#include <stdlib.h> service routine
#asm interrupt [TIM0_OVF] void
.equ __lcd_port=0×15 ; timer0_ovf_isr(void)
PORTC {
#endasm // Reinitialize Timer 0 value
#include <lcd.h> TCNT0=0x8A;
73

loop++; // LCD module initialization


if (loop>=100) lcd_init(16);
{ // Global enable interrupts
data++; #asm(“sei”)
loop=0; while (1) {
}} if (data==100)
void main(void) { {
// Timer/Counter 0 lcd_clear();
initialization data=0;
// Clock source: System Clock }
// Clock value: 11.719 kHz lcd_gotoxy(0,0);
// Mode: Normal top=FFh lcd_putsf(“ElectrO-cOntrOl”);
// OC0 output: Disconnected itoa(data,temp);
TCCR0=0×05; //menampilkan di LCD
TCNT0=0x8A; lcd_gotoxy(0,1);
OCR0=0×00; lcd_puts(temp);
//Timer(s)/Counter(s) };}
Interrupt(s) initialization
TIMSK=0×01;

5.4 RANGKUMAN
1. Timer/Counter pada AVR dapat digunakan untuk
melakukan pencacahan waktu seperti pada jam digital
maupun untuk menghasilkan sinyal PWM
2. Atmega8535 memiliki tiga unit Timer/Counter yaitu
Timer/Counter 0 (8 bit), Timer/Counter 1 (16 bit), dan
Timer/Counter 2 (8 bit).
3. Lamanya periode unutk timer0 dan timer1 adalah
seperti persamaan berikut
Ttimer0 = Tosc*(256-TCNT0)*N →(8 bit = 256)
Ttimer1 = Tosc*(65536-TCNT1)*N → (16 bit = 65536)

5.5 TUGAS
1. Gunakan timer 1 untuk membangkitkan delay1 menit,
10 menit dan 1 jam. Tampilan bentuk gelombangnya
pada simulasi proteus.
74

5.6 DAFTAR BACAAN


1. Atmel. Data sheet AVR ATmega8535/8535L. tersedia
di http://www.atmel.com/images/doc2502.pdf diakses
tgl 16 Mei 2009
2. AVR033: Getting Started with the CodeVisionAVR C
Compiler. tersedia di http://www.atmel.com / images /
doc2500.pdf diakses tgl 16 Mei 2009
3. Barrett, Steven F., Pack, Daniel J.. 2008. Atmel AVR
Microcontroller Primer : Programming and Interfacing.
Laramie and Colorado Springs: Morgan & Claypool
4. CodeVisionAVR tersedia di http://www.hpinfotech. ro.
diakses tgl 1 Mei 2013
5. DIVISI WORKSHOP HME ITB. 2010. MODUL
TRAINING. MIKROKONTROLER AVR. Tersedia di
http://125.161.127.119/arsip/uploads/arsip/6- MODUL
_AVR.pdf diakses tgl 29 Mei 2014
6. P Wisnu Adi., Heryanto, M Ary. 2008. Pemrograman
Bahasa C untuk Mikrokontroler ATmega 8535.
Yogyakarta: Andi
7. Rangkuti, Syahban. 2011. Mikrokontroler Atel AVR
Simulasi dan Praktek Menggunakan ISIS Proteus dan
Code Vision. Informatika. Bandung.
75

BAB VI
ANALOG TO DIGITAL CONVERTER (ADC)

RINGKASAN
Pada AVR terdapat fitur ADC yang dapat diguna-
kan untuk melakukan pembacaan tegangan analog ke
dalam bentuk digital. Secara umum, proses inisialisasi
ADC meliputi proses penentuan clock, tegangan referensi,
format output data, dan mode pembacaan. Register yang
perlu diset nilainya adalah ADMUX (ADC Multiplexer
Selection Register), ADCSRA (ADC Control and Status
Register), dan SFIOR (Special Function IO Register).

6.1 REGISTER-REGISTER ADC


ADC Multiplexer Selection Register – ADMUX

• Bit 7:6 – REFS1:0: Reference Selection Bits


Bit bit ini memilih tegangan referensi untuk ADC,
seperti ditunjukkan pada table 6.1. Jika bit ini diubah
selama konversi, perubahan ini tidak akan mempengaruhi
konversi sampai proses konversi ini selesai. (ADIF pada
ADCSRA diset). Referensi tegangan internal bisa tidak
dipakai jika tegangan referensi eksternal dipasangkan ke
pin AREF.
Tabel 6.1 Pemilihan tegangan referensi untuk ADC

• Bit 5 – ADLAR: ADC Left Adjust Result


76

Bit ADLAR mempengaruhi tampilan dari hasil


konversi ADC pada register data ADC. Memberi 1 pada
ADLAR untuk hasil Left Adjust sebaliknya adlah right
adjust. Mengubah bit ADLAR akan mempengaruhi
register data ADC dengan segera dengan mengabaikan
proses yang sedang berjalan.
• Bits 4:0 – MUX4:0: Analog Channel and Gain
Selection Bits
Nilai dari kombinasi bit ini akan menentukan input
analog yang dihubungkan ke ADC, Bit ini juga akan
menentukan gain unutk saluran diferensial. Lihat table 6.2
untuk melihat detailnya. Jika bit-bit ini diubah selama
proses konversi perubahannya tidak akan mempengaruhi
sampai konversi selesai. (ADIF in ADCSRA is set).
Tabel 6.2 Pemilihan saluran input dan gain ADC
77

ADC Control and Status Register A – ADCSRA

• Bit 7 – ADEN: ADC Enable


Menulis bit ini dengan 1 akan mengenabel ADC,
dengan me-nuliskan 0 maka ADC akan disable. Membuat
ADEN 0 atau off saat proses konversi akan mengakhiri
proses konversi
• Bit 6 – ADSC: ADC Start Conversion
Saat mode Single Conversion, menulis bit ini
dengan 1 akan mulai setiap proses konversi. Pada mode
Free Running menulis bit ini dengan 1 akan mulai proses
konversi pertama. Konversi pertama se-sudah ADCS
ditulisi sesudah ADC dienabel atau jika ADCS ditulisi
saat bersamaan ADC dienabel akan mengambil 25 siklus
clock ADC menggantikan siklus normal 13. ADCS akan
membaca 1 selama pro-ses berjalan dan saat konversi
selesai dia akan menghasilkan 0. Me-nulis 0 pada bit ini
tidak akan ada pengaruhnya.
• Bit 5 – ADATE: ADC Auto Trigger Enable
Saat diisi dengan 1, auto triggering ADC dienabel.
ADC akan mulai konversi pada tepi positif dari sinyal
trigger yang dipilih. Sumber trigger dipilih dengan me-
ngatur bit selek trigger ADC, ADTS pada SFIOR
• Bit 4 – ADIF: ADC Interrupt Flag
Bit ini diset saat konversi ADC selesai dan register
data diupdate. Interrupt ADC Conversion Complete
dieksekusi jika bit ADIE dan bit I pada SREG diset. ADIF
diclear oleh hardware saat eksekusi vector interup yang
sesuai. Sebaliknya ADIF diclear dengan menulis logika 1
ke flag.
• Bit 3 – ADIE: ADC Interrupt Enable
78

Saat bit ini ditulisi dengan 1 dan bit I pada SREG


diset, Interup ADC konversi komplet diaktifkan.
• Bits 2:0 – ADPS2:0: ADC Prescaler Select Bits
Bit-bit ini menentukan factor pembagi antara
frekwensi XTAL dan clock input ke ADC.
Tabel 6.3 Seleksi prescaler ADC

Register Data ADC – ADCL and ADCH


ADLAR = 0

ADLAR = 1

Saat konversi ADC selesai, hasilnya didapat pada


dua register. Jika 2 saluran diferensial dipakai hasilnya
disajikan dalam bentuk komplemen 2. Saat ADCL dibaca
register data ADC tidak diupdate sampai ADCH dibaca.
79

Akibatnya jika hasilnya adalah left adjust dan tdak lebih


dari presisi 8 bit disyaratkan, ini tidak cukup unutk
membaca ADCH. Sebaliknya ADCL harus dibaca
pertama selanjutya ADCH. Bit ADLAR dalam ADMUX
dan bit MUXn pada ADMUX mempengaruhi hasil yang
dibaca dari register. Jika ADLAR diset hasilnya adalah
left adjusted. Jika ADLAR diclear (default) hasilnya
adalah right adjust.
• ADC9:0 Hasil konversion ADC
Bit ini menggambarkan hasil dari konversi

Special Function IO Register –SFIOR

• Bit 7:5 – ADTS2:0: ADC Auto Trigger Source


Jika ADATE pada ADCSRA diisi dengan 1, nilai
dari bit-bit ini memilih sumber mana yang akan mentriger
konversi ADC. Jika If ADATE diclear, ADTS2:0 tidak akan
mempunyai pengaruh. Konversi akan ditriger oleh tepi
naik dari flag interup yang dipilih. Perubahan dari sumber
trig-ger yang diclear ke sumber trigger yang diset akan
menghasilkan tepi positif dari sinyal trigger. Jika ADEN
pada ADCSRA diset, akan memulai konversi. Perubahan
ke mode free running tidak akan menyebabkan adanya
trigger (ADTS[2:0]=0). Walau flag ADC Interrupt diset.
Tabel 6.4 Pemilihan sumber trigger auto ADC
80

• Bit 4 – RES: Reserved Bit


Bit ini dicadangkan dalam ATmega8535 dan akan
selalu dibaca 0

6.2 KONFIGURASI ADC


Tegangan referensi ADC dapat ditentukan antara
lain dari pin AREF, pin AVCC atau menggunakan tegangan
referensi internal sebesar 2.56V. Agar fitur ADC dapat
digunakan maka ADEN (ADC Enable, dalam I/O register
ADCSRA) harus diberi nilai 1. Setelah konversi selesai
(ADIF high), hasil konversi dapat diperoleh pada register
hasil (ADCL, ADCH).Untuk konversi single ended,
hasilnya ialah :

VIN ialah tegangan pada input yang dipilih dan VREF


merupakan tegangan referensi. Jika hasil ADC =000H,
maka menunjukkan tegangan input sebesar 0V, jika hasil
ADC=3FFH menunjukkan tegangan input sebesar
tegangan referensi dikurangi 1 LSB. Sebagai contoh, jika
diberikan VIN sebesar 0.2V dengan VREF 5V, maka hasil
konversi ADC ialah 41. Jika menggunakan differensial
channel, hasilnya ialah 40.96, yang bila digenapkan bisa
sekitar 39,40,41 karena ketelitian ADC ATmega 16
sebesar ± 2LSB. Jika yang digunakan saluran diferensial,
maka hasilnya ialah :

VPOS ialah tegangan pada input pin positif, VNEG ialah


tegangan input pada pin negatif, GAIN ialah faktor pe-
nguatan dan VREF ialah tegangan referensi yang
81

digunakan. Kita dapat mengkonfigurasi fasilitas ADC


pada CodeVision AVR.

6.3 APLIKASI ADC


Aplikasi data analog sering digunakan pada
sensor-sensor seperti sensor suhu, kelembaban, asap dan
sensor lainnya. Pada rangkaian simulasi kita hanya
menggunakan resistor variabel sebagai pengatur output
analog yang nantinya diproses oleh mikrokontroler dan
kemudian ditampilkan melalui LCD Display. Gambar
rangkaian simulasi ADC pada LCD dapat dilihat pada
gambar 6.1.

Gambar 6.1 Rangkaian simulasi ADC pada LCD


Seting code wizard AVR bisa dilihat pada gambar 6.2.
82

Gambar 6.2 Setting code wizard AVR untuk LCD dan ADC
Program untuk membaca data analog pada ADC bisa
dilihat pada bagian berikut ini
83

6.4 RANGKUMAN
1. Pada AVR terdapat fitur ADC yang dapat digunakan
untuk melakukan konversi tegangan analog ke dalam
bentuk digital.
2. Proses inisialisasi ADC meliputi proses penentuan
clock, tegangan referensi, format output data, dan
mode pembacaan.
3. Register yang perlu diset nilainya adalah ADMUX
(ADC Multiplexer Selection Register), ADCSRA
(ADC Control and Status Register), dan SFIOR
(Special Function IO Register).

6.5 TUGAS
1. Eksplorasi fitur-fitur ADC pada AVR seperti
perbedaan tegangan referensi internal dengan
eksternal, bit seleksi gain,
2. Buatkan program untuk soal 1 pada code vision dan
simulasikan hasilnya.
84

6.6 DAFTAR BACAAN

1. Atmel. Data sheet AVR ATmega8535/8535L. tersedia


di http://www.atmel.com/images/doc2502.pdf diakses
tgl 16 Mei 2009
2. AVR033: Getting Started with the CodeVisionAVR C
Compiler. tersedia di http://www.atmel.com / images /
doc2500.pdf diakses tgl 16 Mei 2009
3. Barrett, Steven F., Pack, Daniel J.. 2008. Atmel AVR
Microcontroller Primer : Programming and Interfacing.
Laramie and Colorado Springs: Morgan & Claypool
4. CodeVisionAVR tersedia di http://www.hpinfotech. ro.
diakses tgl 1 Mei 2013
5. DIVISI WORKSHOP HME ITB. 2010. MODUL
TRAINING. MIKROKONTROLER AVR. Tersedia
pada http://125.161.127.119/arsip/uploads/arsip/6-
MODUL _AVR.pdf diakses tgl 29 Mei 2014
6. P Wisnu Adi., Heryanto, M Ary. 2008. Pemrograman
Bahasa C untuk Mikrokontroler ATmega 8535.
Yogyakarta: Andi
7. Rangkuti,Syahban. 2011. Mikrokontroler Atel AVR
Simulasi dan Praktek Menggunakan ISIS Proteus dan
Code Vision. Informatika. Bandung.
8. Soebhakti, Hendawan. 2009. Analog-to-Digital
Converter Atmega8535. Tersedia di http://hendawan.
files. wordpress.com/2009/02/analog-to-digital-avr.pdf.
diakses tgl 31 Maret 2014
9. Wardana, Lingga. 2006. Belajar Sendiri Mikrokontroler
AVRSeri ATmega 8535 Simulasi Hardware dan
Simulasi. Yogyakarta: Andi
85

BAB VII
KOMUNIKASI SERIAL MIKROKONTROLER

RINGKASAN
Sistem USART (Universal Synchronous and
Asynchronous serial Receiver and Transmitter) pada
mirokontroler AVR adalah piranti komunikasi serial
fleksibel. Proses inisialisasi USART terdiri dari penga-
turan baud rate, pengaturan format frame dan enabel pe-
mancar atau penerima. Register USART terdiri atas
UBRRL dan UBRRH, UCSRA, UCSRB, UCSRC. Untuk
komunikasi antaraUSART dengan computer diperlukan
IC converter RS232.

7.1 FITUR USART AVR


Fitur utama USART AVR adalah sebagai berikut:
• Operasi Full Duplex (Independent Serial Receive and
Transmit Registers)
• Operasi Asynchronous or Synchronous
• Operasi Master or Slave Clocked Synchronous
• Pembangkit High Resolution Baud Rate
• 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
didukung Hardware
• Deteksi Data OverRun
• Deteksi Framing Error
• Noise Filtering False termasuk deteksi Start Bit 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
86

Pada bagian ini akan dibahas sedikit mengenai


salah satu fitur AVR yakni komunikasi dengan komputer
melalui port serial / DB9 dengan 9 buah pin yang dapat
dijumpai di belakang CPU komputer desktop. Untuk
menyesuaikan level tegangan dari ke port serial
diperlukan IC MAX232 seperti terlihat pada gambar 7.1.
Pada IC MAX232, pin nomor 11 (TXD)
dihubungkan ke pin 14(RXD) dari AVR. Sedangkan pin
nomor 12 pada IC MAX232 (RXD) dihubungkan ke pin
15 (TXD) dari AVR ATMega.

Gambar 7.1 IC MAX232 menyesuaikan level tegangan dari ke port


serial
7.2 INISIALISASI USART
USART harus diinisialisasi sebelum komunikasi
apapun dapat terjadi. Proses inisialisasi biasanya terdiri
dari pengaturan baud rate, pengaturan format frame dan
enable Pemancar atau Penerima tergantung pada peng-
gunaan. Untuk interup yang mengatur operasi USART,
Global Interrupt Flag harus dibersihkan (dan interupsi
global dinonaktifkan) ketika melakukan inisialisasi. Se-
belum melakukan inisialisasi ulang dengan baud rate atau
format frame berubah, pastikan bahwa tidak ada transmisi
berkelanjutan selama periode register dirubah. TXC Flag
dapat digunakan untuk memeriksa bahwa Transmitter te-
lah menyelesaikan semua transfer dan RXC Flag dapat di-
gunakan untuk memeriksa bahwa tidak ada data yang be-
87

lum dibaca dalam buffer perima. Perhatikan bahwa TXC


Flag harus dibersihkan sebelum setiap trans-misi (sebelum
UDR ditulis) jika digunakan untuk tujuan ini.

7.3 REGISTER USART


USART Baud Rate Registers –UBRRL and UBRRH
UBRR adalah register 16 bit yang berfungsi untuk
menentukan kecepatan transmisi data. UBRR dibagi men-
jadi dua yaitu UBRRH dan UBRRL.

a. URSEL adalah bit untuk pemilihan akses UBRR


dan UCSRC. Reset ke 0 unutk akses UBRR, hal
ini karena UBRRH dan UCSRC menggunakan
lokasi I/O yang sama.
b. UBRR0-11 adalah untuk menyimpan konstanta ke-
cepatan komunikasi serial. Seting ini dilakukan de-
ngan rumus seperti table 7.1.
Tabel 7.1 Perhitungan nilai UBRR
Mode Operasi Nilai UBRR
Mode asinkron kecepatan
normal = −1
16
(U2X=0)
Mode asinkron kecepatan
ganda = −1
8
(U2X=1)
Mode sinkron
= −1
2
88

USART Control and Status Register A - Register


UCSRA

• Bit 7 – RXC: USART Receive Complete


Bit flag ini diset ketika ada data yang belum dibaca dalam
buffer perima dan dihapus ketika buffer perima kosong
(yaitu, tidak mengandung data yang belum dibaca). Jika
Receiver dinonaktifkan, buffer perima akan memerah dan
akibatnya bit RXC akan menjadi nol. The RXC Flag dapat
digunakan untuk menghasilkan interrupt perima Lengkap
(lihat penjelasan tentang bit RXCIE).
• Bit 6 – TXC: USART Transmit Complete
Bit flag ini diset ketika seluruh frame dalam transmit Shift
Register telah bergeser dan tidak ada data baru yang saat
ini hadir dalam buffer transmisi (UDR). Bit TXC Flag
secara otomatis dihapus ketika interupsi Transmit Com-
plete dijalankan, atau dapat dibersihkan dengan menulis
satu ke lokasi bit-nya. Flag TXC dapat menghasilkan
interrupt Transmit Complete (lihat penjelasan tentang bit
TXCIE) .
• Bit 5 – UDRE: USART Data Register Empty
Flag UDRE menunjukkan jika buffer transmit (UDR) si-
ap menerima data baru. Jika UDRE adalah satu, buffer
kosong, dan karena itu siap untuk ditulis. UDRE Flag da-
pat menghasilkan interrupt Data Register kosong (lihat
penjelasan tentang bit UDRIE). UDRE diatur setelah reset
untuk menunjukkan bahwa Transmitter siap
• Bit 4 – FE: Frame Error
Bit ini diset jika karakter berikutnya dalam buffer perima
memiliki Kesalahan frame saat diterima. Misalnya, ketika
pertama stop bit dari karakter berikutnya dalam buffer pe-
89

rima adalah nol. Bit ini berlaku sampai buffer perima


(UDR) dibaca. The FE bit adalah nol ketika stop bit dari
data yang diterima adalah satu. Selalu mengatur bit ini ke
nol saat menulis ke UCSRA.
• Bit 3 – DOR: Data OverRun
Bit ini diset jika kondisi data overrun terdeteksi. Overrun
data terjadi ketika buffer perima penuh (dua karakter), itu
adalah karakter baru tunggu di Shift Register perima, dan
bit start baru terdeteksi. Bit ini berlaku sampai buffer pe-
nerima (UDR) dibaca. Selalu mengatur bit ini ke nol saat
menulis ke UCSRA
• Bit 2 – PE: Parity Error
Bit ini diset jika karakter berikutnya dalam menerima
buffer memiliki Kesalahan Paritas saat diterima dan pari-
tas pengecekan diaktifkan pada saat itu (UPM1 = 1). Bit
ini berlaku sampai menerima buffer (UDR) dibaca. Selalu
mengatur bit ini ke nol saat menulis ke UCSRA.
• Bit 1 – U2X: Double the USART Transmission Speed
Bit ini hanya berpengaruh untuk operasi asynchronous.
Tulis bit ini nol ketika menggunakan operasi sinkron. Me-
nulis bit ini dengan satu akan mengurangi pembagi dari
pembagi baud rate 16 ke 8 dg efektif menggandakan ke-
cepatan transfer untuk komunikasi asynchronous.
• Bit 0 – MPCM: Multi-processor Communication
Mode
Bit ini memungkinkan mode komunikasi Multi-prosesor.
Ketika bit MPCM ditulis dengan satu, semua frame ma-
suk yang diterima oleh USART Receiver yang tidak me-
ngandung informasi alamat akan diabaikan. Transmitter
ini tidak terpengaruh oleh pengaturan MPCM.
USART Control and Status Register B – UCSRB
UCSRB adalah register untuk mengatur aktivasi penerima
dan pengirim USART
90

• Bit 7 – RXCIE: RX Complete Interrupt Enable


Menulis bit ini dengan satu memungkinkan interup pada
RXC Flag. Interrupt USART Receive Complete akan di-
hasilkan hanya jika bit RXCIE ditulis dengan satu, Global
Interrupt Flag di SREG ditulis satu dan bit RXC di
UCSRA diset.
• Bit 6 – TXCIE: TX Complete Interrupt Enable
Menulis bit ini satu memungkinkan interrupt pada TXC
Flag. Sebuah interrupt USART Transmit Complete akan
dihasilkan hanya jika bit TXCIE ditulis satu, Global
Interrupt Flag di SREG ditulis satu dan bit TXC di
UCSRA diset.
• Bit 5 – UDRIE: USART Data Register Empty
Interrupt Enable
Menulis bit ini satu memungkinkan interup pada UDRE
Flag. Interrupt Data Register Empty akan dihasilkan ha-
nya jika bit UDRIE ditulis satu, Global Interrupt Flag di
SREG ditulis ke satu dan bit UDRE di UCSRA diset.
• Bit 4 – RXEN: Receiver Enable
Menulis bit ini satu mengenabel USART Receiver.
Receiver akan menimpa operasi port normal untuk pin
RxD saat diaktifkan. Menonaktifkan Receiver akan mem-
buang buffer terima invalid flag FE, DOR, dan PE.
• Bit 3 – TXEN: Transmitter Enable
Menulis bit ini satu mengenabel USART Transmitter.
Transmitter akan menolak operasi port normal untuk pin
TXD ketika diaktifkan. Penghentian dari Transmitter (me-
nulis TXEN ke nol) tidak akan menjadi efektif sampai
transmisi yang sedang berlangsung dan tertunda selesai,
91

(yaitu, ketika mengirimkan para Pergeseran Register dan


mengirimkan Buffer Register tidak mengandung data
yang akan dikirimkan). Ketika dinonaktifkan, Transmitter
tidak akan lagi menolak port TxD.
• Bit 2 – UCSZ2: Character Size
The UCSZ2 bit dikombinasikan dengan UCSZ1: 0 bit di
UCSRC menetapkan jumlah bit data (Ukuran Karakter)
dalam penggunaan frame Receiver dan Transmitter
• Bit 1 – RXB8: Receive Data Bit 8
RXB8 adalah bit data kesembilan dari karakter yang
diterima ketika beroperasi dengan frame serial dengan
sembilan bit data. Harus dibaca sebelum membaca bit
rendah dari UDR.
• Bit 0 – TXB8: Transmit Data Bit 8
TXB8 adalah kesembilan bit data dalam karakter yang
akan dikirim ketika beroperasi dengan frame serial de-
ngan sembilan bit data. Harus ditulis sebelum menulis bit
rendah untuk UDR.
USART Control and Status Register C – UCSRC

• Bit 7 – URSEL: Register Select


Bit ini memilih antara mengakses register UCSRC atau
UBRRH. Hal ini dibaca sebagai satu ketika membaca
UCSRC. The URSEL harus menjadi satu ketika menulis
UCSRC.
92

• Bit 6 – UMSEL: USART Mode Select


Bit ini menyeleksi mode operasi sinkron (1) dan asinkron
(0)
• Bit 5:4 – UPM1:0: Parity Mode
Bit ini mengenabel dan mengatur jenis generasi paritas
dan cek. Jika diaktifkan, Transmitter secara otomatis akan
mengha-silkan dan mengirimkan paritas bit data yang di-
transmisikan dengan setiap frame. Receiver akan meng-
hasilkan nilai paritas untuk data yang masuk dan mem-
bandingkannya dengan pe-ngaturan UPM0. Jika keti-
dakcocokan terdeteksi, PE Flag UCSRA akan diset.
Tabel 7.2 Seting bit UPM

• Bit 3 – USBS: Stop Bit Select


Bit ini menyeleksi jumlah stop bits untuk disisipkan oleh
Transmitter. Receiver mengabaikan setting ini
Tabel 7.3 Seting bit USBS

• Bit 2:1 – UCSZ1:0: Character Size


UCSZ1:0 bit dikombinasikan dengan bit UCSZ2 di
UCSRB menetapkan jumlah bit data yang (ukuran ka-
rakter) digunakan dalam frame Receiver dan Transmitter.
93

Tabel 7.4 Seting bit UCSZ

• Bit 0- UCPOL: clock polarity


Bit ini digunakan untuk mode Synchronous saja. Tulis bit
ini nol saat mode asynchronous digunakan. Bit UCPOL
menetap-kan hubungan antara perubahan data output dan
sampel in-put data, dan waktu sinkron (XCK).
Tabel 7.5 Seting bit UCPOL

7.4 APLIKASI USART


Gambar 7.2 memperlihatkan seting code wizard
AVRuntuk komunikasi USART. Gambar rangkaian
komunikasi serial USART pada simulasi proteus seperti
pada gambar 7.3.
94

Gambar 7.2 Seting code wizard AVR untuk komunikasi USART

Gambar 7.3.Rangkaian komunikasi serial USART pada simulasi


proteus
95

Sedangkan potongan program untuk mengirim


data melalui port serial adalah seperti berikut ini dan
tampilan eksekusi programnya bisa dilihat pada gambar
7.4.

Gambar 7.4. Tampilan eksekusi program simulasi serial USART


96

7.5 RANGKUMAN
1. Sistem USART (Universal Synchronous and
Asynchronous serial Receiver and Transmitter) pada
mikrokontroler AVR adalah piranti komunikasi serial
fleksibel.
2. Proses inisialisasi USART terdiri dari penga-turan
baud rate, pengaturan format frame dan enabel pe-
mancar atau penerima.
3. Register USART terdiri atas UBRRL dan UBRRH,
UCSRA, UCSRB, UCSRC. Untuk komunikasi
antaraUSART dengan computer diperlukan IC
converter RS232.

7.6 TUGAS
1. Buat program untuk menerima data dari PC, tampilkan
data yang dikirim dari PC pada hypertermnal dan LCD

7.7 DAFTAR BACAAN


1. Atmel. Data sheet AVR ATmega8535/8535L. tersedia
di http://www.atmel.com/images/doc2502.pdf diakses
tgl 16 Mei 2009
2. AVR033: Getting Started with the CodeVisionAVR C
Compiler. tersedia di http://www.atmel.com / images /
doc2500.pdf diakses tgl 16 Mei 2009
3. Barrett, Steven F., Pack, Daniel J.. 2008. Atmel AVR
Microcontroller Primer : Programming and Interfacing.
Laramie and Colorado Springs: Morgan & Claypool
4. CodeVisionAVR tersedia di http://www.hpinfotech. ro.
diakses tgl 1 Mei 2013
5. DIVISI WORKSHOP HME ITB. 2010. MODUL
TRAINING. MIKROKONTROLER AVR. Tersedia
pada http://125.161.127.119/arsip/uploads/arsip/
6MODUL_AVR.pdf diakses tgl 29 Mei 2014
97

6. P Wisnu Adi., Heryanto, M Ary. 2008. Pemrograman


Bahasa C untuk Mikrokontroler ATmega 8535.
Yogyakarta: Andi
7. Politeknik Caltex. 2012. Buku-Mikrokontroler-AT-
mega8535-Dengan-CodevisionAVR tersedia di https://
www.yumpu.com/id/document/view/16717419/tutoria
l-microcontroller-avr-part-i-123seminarsonlyid.scribd.
com diakses 21 April 2014
8. Proteus. Tersedia di http://www. labcenter.co.uk/
download/prodemo_download.cfm diakses tgl 12 Mei
2014
9. Rangkuti, Syahban. 2011. Mikrokontroler Atel AVR
Simulasi dan Praktek Menggunakan ISIS Proteus dan
Code Vision. Informatika. Bandung.
10. Wardana, Lingga. 2006. Belajar Sendiri Mikrokontroler
AVRSeri ATmega 8535 Simulasi Hardware dan
Simulasi. Yogyakarta: Andi
98
99

BAB VIII
FUNGSI LIBRARY PADA CODE VISION AVR

RINGKASAN
Code Vision AVR dilengkapi dengan beberapa
fungsi seperti fungsi I/O, fungsi matematika termasuk
beberapa fungsi dengan peripheral misalnya LCD. Fungsi-
fungsi ini berada pada directori -\INC dan berekstensi -.h.
Fungsi -.h ini harus di include kalau mau dipanggil.

8.1 FUNGSI INPUT/OUTPUT


Berada di dalam file stdio.h, pada subdirektori ..\inc. Ada
beberapa fungsi I/O dasar yang disediakan Code Vison
AVR.
a. Void getchar (void) : menghasilkan nilai balik berupa ka-
rakter yang diterima dari UART, menggunakan sistem
polling (menerima data serial).
b. Void putchar (char c) : mengirim karakter “c”
menggunakan UART, menggunakan sistem polling (me-
ngirimkan data serial). Lakukan pengaturan komunikasi
serial seperti berikut ini sebelum menggunakan fungsi ini:
a. Inisialisasi baudrate UART
b. Mengaktifkan transmitter UART
c. Mengaktifkan receiver UART
Fungsi I/O yang lebih tinggi lainnya menggunakan fungsi
getchar dan putchar, seperti :
a. void puts(char*str) : output, menggunakan putchar, null
mengakhiri karakter string, berlokasi di SRAM.
b. Void putsf(char flash*str) : output menggunakan
putchar, null mengakhiri karakter string, berlokasi di
FLASH.
c. Void printf(char flash*fmtsr[ , arg1, arg2,…]) : output
text yang terformat, menggunakan putchar, sesuai dengan
format specifiers fmstr string.
100

8.2 FUNGSI TIPE KARAKTER


Berada di dalam file ctype.h, pada subdirektori \INC.
Berikut beberapa fungsi tipe karakter pada Code Vision
AVR :
a. Char toascii(char c) : konversi char c menjadi ascii
b. Char toint (char c) : menginterpretasikan karakter c
sebagai digit hexadecimal dan meng-konversikannya
menjadi unsigned char dari 0 hingga 15.
c. Char tolower (char c) : mengubah karakter c ke huruf
kecil.
d. Char toupper (char c) :mengubah karakter c ke huruf
besar.
8.3 FUNGSI LIBRARY STANDART
Berada pada file stdlib.h, pada subdirektori …\INC.
a. Int atoi (char*str) :mengubah string str menjadi interger.
b. Long it atoi (char*str) : mengubah string str menjadi
long interger.
c. Void itoa(int n, char*str) : mengubah interger n menjadi
karakter pada string str
d. Void itoa(long int n, char*str) : mengubah long interger
n menjadi karakter pada string str.
e. Void float(float n, unsigned char decimals, char*str) :
mengubah bilangan floating point n menjadi karakter pada
string str.

8.4 FUNGSI MATEMATIKA


a. Unsigned char cabs(signed char x) : menghasilkan nilai
absolute dari bit x.
b. Unsigned int abs(int x) : menghasilkan nilai absolut dari
bilangan interger x.
c. Unsigned long labs(long int x) : menghasilkan nilai
absolute dari bilangan long interger x.
d. Floating fabs(float x) : menghasilkan nilai absolute dari
bilangan floating point x.
e. Signed char cmax(signed char a, signed char b) :
menghasilkan nilai maksimum dari byte a dan b.
101

f. Int max(int a, int b) : menghasilkan nilai maksimal dari


interger a dan b.
g. Long int lmax(long int a, long int b) : menghasilkan nilai
maksimal dari long int a dan b.
h. Signed char csign(signed char x) : menghasilkan -1,0,1
jika byte x negatif, nol, positif.
i. Unsigned char isqrt(unsigned int x) : menghasilkan akar
kuadrat dari unsigned interger x.

8.5 FUNGSI KONVERSI BCD


Ada di dala file bcd.h, pada subdirektori …\INC.
a. Unsigned char bcd2bin(unsigned char n) : mengubah
bilangan n dari bcd ke nilai binernya.
b. Unsigned char bin2bcd(unsigned char n) : mengubah
bilangan n dai biner ke bcd (bilangan n antara 0 – 99).

8.6 FUNGSI LCD


Ada di dalam file lcd.h, pada subdirektori …\INC.
“lcd.h” harus dimasukkan ke dalam header. Format dalam
lcd.h mendukung lcd 1x8, 2x12, 3x12, 1x16, 2x16, 2x20,
4x20, 2x24, 2x40 karakter. Fungsi-fungsi untuk mengakses
lcd antara lain :
a. Unsigned char lcd_init(unsigned char lcd_columns)
Untuk menginisialisasi modul lcd, menghapus layar
dan mele-takkan posisi karakter pada baris ke-0 kolom ke-0.
Jumlah kolom pada lcd disebutkan (misal 16). Kursor tidak
ditampakkan. Nilai yang dikem-balikan adalah 1 bila modul
lcd terdeteksi, dan bernilai 0 bila tidak ter-dapat modul lcd.
Fungsi ini harus dipanggil pertama kali sebelum meng-
gunakan fungsi yang lain.
b. Void lcd_clear(void)
Menghapus layar lcd dan meletakkan posisi karakter
pada baris ke-0 kolom ke-0.
c. Void lcd_gotoxy(unsigned charx, unsigned char y)
Meletakkan posisi karakter pada kolom ke-x dan
baris ke-x. nomor baris dan kolom dimulai dari nol.
102

d. Void lcd_putchar(char c)
Menampilkan karakter c pada lcd.
e. Lcd_puts(char*str)
Menampilkan string yang disimpan pada SRAM pada lcd.
f. Lcd_putsf(lcd flash*str)
Menampilkan string yang disimpan pada flash pada lcd.

8.7 FUNGSI DELAY


Ada pada header delay.h yang harus di include
sebelum digunakan. Fungsi interupsi harus dimatikan agar
delay tidak lebih lama dari yang diperhitungkan. Jangan lupa
me-nyebutkan frekuensi clock chip IC AVR yang digunakan.
Fungsi delay yang tersedia :
a. Void delay_us(unsigned int n)
Fungsi ini menghasilkan delay selama n µ-detik, n adalah
nilai konstan.
b. Void delay_ms(unsigned int n)
Fungsi ini menghasilkan delay selama n milli-detik, n adalah
nilai konstan Kedua fungsi diatas secara otomatis akan me-
reset watchdog timer setiap 1 milli detik dengan meng-
aktifkan fungsi wdr. Untuk lebih lengkapnya silahkan
kunjungi www.hpinfotech.ro.

8.8 RANGKUMAN
1. Code Vision AVR dilengkapi dengan beberapa fungsi
seperti fungsi I/O, fungsi matematika termasuk
beberapa fungsi dengan peripheral misalnya LCD.
2. Fungsi-fungsi ini berada pada directori -\INC dan
berekstensi -.h. Fungsi -.h ini harus di include kalu mau
dipanggil.
103

8.9 DAFTAR BACAAN


1. Adriyanto, Heri. 2008. Pemrograman Mikrokontroler
AVR Atmega16 Menggunakan bahasa C (Code
Vision AVR). Informatika Bandung
2. Atmel. Data sheet AVR ATmega8535/8535L. tersedia
di http://www.atmel.com/images/doc2502.pdf diakses
tgl 16 Mei 2009
3. AVR033: Getting Started with the CodeVisionAVR C
Compiler. tersedia di http://www.atmel.com / images /
doc2500.pdf diakses tgl 16 Mei 2009
4. Barrett, Steven F., Pack, Daniel J.. 2008. Atmel AVR
Microcontroller Primer : Programming and Interfacing.
Laramie and Colorado Springs: Morgan & Claypool
5. CodeVisionAVR tersedia di http://www.hpinfotech. ro.
diakses tgl 1 Mei 2013
104
105

DAFTAR PUSTAKA
1. Adriyanto, Heri. 2008. Pemrograman Mikrokontroler
AVR Atmega16 Menggunakan bahasa C (Code
Vision AVR). Informatika Bandung
2. Atmel. Data sheet AVR ATmega8535/8535L. tersedia
di http://www.atmel.com/images/doc2502.pdf diakses
tgl 16 Mei 2009
3. AVR033: Getting Started with the CodeVisionAVR C
Compiler. tersedia di http://www.atmel.com / images /
doc2500.pdf diakses tgl 16 Mei 2009
4. Barrett, Steven F., Pack, Daniel J.. 2008. Atmel AVR
Microcontroller Primer : Programming and Interfacing.
Laramie and Colorado Springs: Morgan & Claypool
5. CodeVisionAVR tersedia di http://www.hpinfotech. ro.
diakses tgl 1 Mei 2013
6. DIVISI WORKSHOP HME ITB. 2010. MODUL
TRAINING. MIKROKONTROLER AVR. Tersedia
pada http://125.161.127.119/arsip/uploads/arsip/
6MODUL_AVR.pdf diakses tgl 29 Mei 2014
7. P Wisnu Adi., Heryanto, M Ary. 2008. Pemrograman
Bahasa C untuk Mikrokontroler ATmega 8535.
Yogyakarta: Andi
8. Politeknik Caltex. 2012. Buku-Mikrokontroler-AT-
mega8535-Dengan-CodevisionAVR tersedia di https://
www.yumpu.com/id/document/view/16717419/tutoria
l-microcontroller-avr-part-i-123seminarsonlyid.scribd.
com diakses 21 April 2014
9. Proteus. Tersedia di http://www. labcenter.co.uk/
download/prodemo_download.cfm diakses tgl 12 Mei
2014
10. Rangkuti, Syahban. 2011. Mikrokontroler Atel AVR
Simulasi dan Praktek Menggunakan ISIS Proteus dan
Code Vision. Informatika. Bandung.
106

11. Setiawan, Iwan.2006.Tutorial Microcontroler AVR Part


I. UNDIP: Elektro
12. Soebhakti, Hendawan. 2009. Analog-to-Digital
Converter Atmega8535. Tersedia di http://hendawan.
files. wordpress.com/2009/02/analog-to-digital-avr.pdf.
diakses tgl 31 Maret 2014
13. Wardana, Lingga. 2006. Belajar Sendiri Mikrokontroler
AVRSeri ATmega 8535 Simulasi Hardware dan
Simulasi. Yogyakarta: Andi

Anda mungkin juga menyukai