Anda di halaman 1dari 70

KEGIATAN BELAJAR 1

MIKROKONTROLER ATmega 8535

Lembar informasi
Mikrokontroller adalah rangkaian terintregrasi (Integrated Circuit-IC) yang telah
mengandung

secara

lengkap

berbagai

komponen

pembentuk

sebuah

komputer.Artinya bahwa didalam sebuah IC Mikrokontroler sebetulnya sudah


terdapat kebutuhan minimal agar Mikrokontroler dapat berkerja, yaitu berupa
mikroprosesor,ROM,RAM,I/O, dan clock seperti halnya yang dimiliki oleh sebuah
komputer.
Mikrokontroler AVR memiliki arsitektur RISC 8 bit, dimana semua instruksi
dikemas dalam kode 16-bit (16-bits word) dan sebagian besar instruksi
dieksekusi dalam 1 (satu) siklus clock , berbeda dengan instruksi MCS51 yang
membutuhkan 12 Siklus clock.tentu saja itu terjadi karena kedua jenis
mikrokontroler tersebut memiliki arsitektur yang berbeda.AVR Menggunakan
RISC(reduced instruction set computing), sedangkan MCS51 berteknologi
CISC(complex instruction set computing).
1.1 Macam-macam Mikrokontroler
Ada banyak jenis mikrokontroler yang masing-masing memiliki seri sendiri
sendiri, diantaranya:
1) Keluarga MCS-51 (Intel)
2) Keluarga AT89 (Atmel, arsitektur Intel 8051)
3) Keluarga AT90, ATtiny, ATMega ( Atmel, arsitektur AVR )
4) Keluarga MC68HC11 ( Motorola )
5) Keluarga PIC 8 ( Microchip )
6) Keluarga Z80 ( Zilog )
Yang membedakan kemungkinan hanya dalam hal kemasana fisik misalnya
jumlah pin dan fitur-fiturnya seperti ukuran kapasitas memori program dan
memori data, jumlah timer, jumlah interupsi, dan lain-lain.

1.2 Mikrokontroler Keluarga AVR


Secara histories mikrokontroller seri AVR pertama kali diperkenalkan ke pasaran
sekitar tahun 1997 oleh perusahaan Atmel, yaitu sebuah perusahaan yang
sangat terkenal dengan produk microcontroller seri AT89S51/52-nya yang
sampai sekarang masih banyak digunakan di lapangan. Tidak seperti
mikrokontroller seri AT89S51/52 yang masih mempertahankan arsitektur dan set
instruksi dasar mikrokontroller 8031 dari perusahaan INTEL.
Berdasarkan arsitekturnya, AVR merupakan mikrokontroller 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 mikrokontroller 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 mikrokontroller keluarga AT89S51/52. Pada modul ini akan di bahas
tentang Mikrokontroler ATMega 8535.

1.3 Karakteristik ATMega 8535


Prosesor yang digunakan sebagai pengendali utama robot adalah 8 bit
mikrokontroler dari keluarga AVR, yaitu ATmega8535. Alasan

penggunaan

mikrokontroler ini adalah karena harga yang relatif murah, mudah diperoleh,
kemudahan dalam pemrograman, dan fitur-fitur menarik yang dimilikinya.
Beberapa karakteristik dan fitur yang dimiliki mikrokontroler ATMega8535 antara
lain:
1) Resolusi data 8 bit.
2) RISC arsitektur.
3) 8 K byte In System Programmable Flash.
4) 512 Bytes EEPROM.
5) 512 Bytes SRAM internal.
6) 8 channel, 10 bit resolusi ADC.
7) 4 channel PWM.
8) 2 timer/counter 8 bit.
9) 1 timer/counter 16 bit.

10) Osilator internal yang dikalibrasi.


11) Internal dan eksternal sumber interrupt.
12) 6 mode sleep.
ATMega8535 memiliki bagian struktur bagian sebagai berikut :
1) Saluran I/O 32 buah, yaitu Port A, Port B, Port C, dan Port D.
2) Tiga buah Timer/Counter dengan kemampuan perbandingan.
3) CPU yang terdiri atas 32 buah register.
4) Memori Flash sebesar 8 kb dengan kemampuan Read While Write.
5) Unit interupsi internal dan eksternal.
6) Port antarmuka SPI
7) EEPROM sebesar 512 byte yang dapat diprogram saat operasi.
8) Antarmuka komparator analog.
9) Port Usart untuk komunikasi serial
1.4 Organisasi Memori
Mikrokontroler ATMega8535 memiliki 3 jenis memori yaitu Memori Program,
Memori Data dan Memori EEPROM.

1.4.1

Memori Program

ATMega8535 memiliki kapasitas memori program sebesar 8 Kbyte 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 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).

$000

Aplication Flash Section

Boot Fla sh Section

$FFF

Gambar 1.1

1.4.2

Memori Data
32 Registe rs

$0 00 - $ 001 F

64 I/O Re gisters

$ 0 20 - $ 0 05 F
$ 0 06 0

Inte rna l SRAM


51 2 x 8

$ 0 25 F

Gambar 1.2 SRAM (Static Random Access memory).

AVR ATmega 8535 memiliki memori data yang terbagi menjadi 3 bagian, yaitu 3
register umum, 64 buah register I/O, dan 512 SRAM internal.re

1.4.3

RAM

RAM dalam hal ini berperan untuk menyimpan data yang sifatnya sementara,
yang biasanya diperlukan pada saat proses manimpulasi data ( penjumlahan,
pengurangan, perkalian, pembagian, dan transfer data ).

1.4.4

SRAM

SRAM digunakan untuk menyimpan data variabel yang dimungkinkan berubah


setiap saatnya.
1.4.5 ATMega8535 memiliki kapasitas memori data sebesar 608 Byte yang
terbagi menjadi 3 bagian yaitu :
Serba guna (32 byte), untuk register serba guna R0 R31

Register I/O

(64 byte), untuk mengatur fasilitas seperti timer/counter,

interupsi, ADC, USART,SPI,EEPROM dan port I/O seperti Port A, Port B,


Port C dan Port D
SRAM (512 ), untuk memori SRAM

1.4.6

Memori EEPROM

EEPROM umumnya digunakan untuk menyimpan data-data program yang


bersifat permanen.
ATMega8535 memiliki EEPROM sebesar 512 Byte. Memori EEPROM ini
hanya dapat di akses dengan menggunakan register-register I/O yaitu
register EEPROM address (EEARH-EEARL), register EEPROM Data
(EEDR) dan register EEPROM Control (EECR).
$ 0 00 0

EEP RO M

$ 0 20 0

Gambar 1.3 EEPROM (Electrically Erasable Programmable Read Only Memory)

1.4.7

Perbandingan Jumlah Memori

Microcontroller AVR
JenisPaket
TinyAVR
AVR (classi
MegaAVR

832
C (AVR)2044
3264

Memori (byte)
IC

Flash EE
( Kb )
(K

EPROM
( (Kb
b )

SRAM
(Byte )

pin

1 2K

64

0128

128

pin

1 8K

128

0512

1K

4512
K

4K

pin 8 1 128 K 512

1.4.8 Sistem Minimum ATMega8535

Gambar 1.4 Sistem Minimum ATMega8535

1.4.9 Deskripsi Pin

Gambar 1.5 Deskripsi Pin ATMega8535

PIN

KETERANGAN
Port B, merupakan Port I/O 8-bit dua arah (bi-directional)
dengan resistor pull-up internal, selain sebagai Port I/O 8-bit
Port B juga dapat difungsikan secara individu sebagai berikut
:

1-8

PB7 : SCK ( SPI Bus Serial Clock )

PB6 : MISO (SPI Bus Master Input/Slave Output)

PB5 : MOSI ( SPI Bus Master Output/Slave Input )

PB4 : SS ( SPI slave Select Input )

PB3 : AIN 1 ( Analog Comparator Negatif Input )


OC0 ( Output Compare Timer/Counter 0 )

PB2 : AIN 0 ( Analog Comparator Positif Input )


INT2 ( External Interupt 2 Input )

PB1 : T1 ( timer / Counter 1 External Counter Input )

PB0 : To ( Timer/Counter 0 External Counter Input )


XCK ( USART External Clock Input/Output )

RESET, merupakan pin reset yang akan bekerja bila pulsa


rendah (aktif low ) selama minimal 1,5 us

10

VCC, Catu daya digital

11

GND, Ground untuk catu daya digital

12

XTAL2, merupakan output dari penguat osilator pembalik

13

XTAL1, merupakan input ke penguat osilator pembalik dan

input ke internal clock


Port D, merupakan port I/O 8-bit dua arah ( bi-directional )
dengan resistor pull-up internal, selain sebagai Port I/O 8-bit
Port D juga dapat difungsikan secara individu sebagai berikut
:

14-21

PD7 : OC2 ( Output Compare Timer/Counter 2 )

PD6 : ICP ( Timer/Counter 1 Input Capture )

PD5 : OC1A ( Output Compare A Timer/Compare A


Timer/Counter 1 )

PD4 : OC1B ( Output Compare B Timer/Compare A


Timer/Counter 1 )

PD3 : INT1 ( External Interupt 1 Input )

PD2 : INT0 ( External Interupt 0 Input )

PD1 : TXD( USART transmit )

PD0 : RXD ( USART receive )

Port C, merupakan port I/O 8-bit dua arah ( bi-directional


)dengan resistor pull-up internal, selain sebagai Port I/O 8-bit
Port C juga dapat difungsikan secara individu sebagai berikut
:

22-29

30

PC7 : TOSC2 ( Timer Oscilator 2 )

PC6 : TOSC1 ( Timer Oscialtor 1 )

PC1 : SDA ( Serial Data Input/Output, PC )

PC0 : SCL ( Serial Clock, PC )

AVCC,

merupakan

catu

daya

yang

digunakan

untuk

memasukan analog ADC yang terhubung ke Port A

31

GND, Ground untuk catu daya analog

32

AREF, merupakan tegangan referensi analog untuk ADC


Port A, merupakan port I/O 8-bit dua arah dengan resistor

33 40

pull-up internal, selain sebagai Port I/O 8-bit Port B juga


dapat berfungsi sebagai masukan 8 channel ADC

KEGIATAN BELAJAR 2

DASAR PEMROGRAMAN BAHASA C

2.1 Sejarah Bahasa C


Bahasa

m erupakan

perkembangan

dari

bahasa

BCPL

yang

dikembangkan oleh M artin Richards pada tahun 1967. Selanjutnya bahasa


ini

mem berikan

ide

kepada

Ken

Thompson

mengembangkan bahasa yang disebut bahasa

yang

kem udian

pada tahun 1970.

Perkembangan selanjutnya dari bahasa B adalah bahasa C oleh Dennis


Ricthie

sekitar

tahun 1970-an

di

Bell Telephone

Laboratories

(sekarang adalah AT&T Bell Laboratories). Bahasa


digunakan

di computer

menggunakan

Digital

Equipm ent

system operasi

UNIX.

Corporation

Hingga

pertama
PDP-11

saat ini

Inc.
kali
yang

penggunaan

bahasa C telah merata di seluruh dunia. Hampir semua perguruan


tinggi

di

dunia menjadikan

kuliah wajib. Selain

bahasa

itu, banyak

bahasa

sebagai

salah

satu

mata

pem rogram an populer seperti

PHP dan Java menggunakan sintaks dasar yang mirip bahasa C. Oleh
karena itu, kita juga sangat perlu mem pelajarinya.

2.2 Kekurangan dan Kelebihan Bahasa C


Kelebihan Bahasa C
1) Bahasa C tersedia ham pir di semua jenis com puter.
2) Kode bahasa C sifatnya portable dan fleksibel untuk semua jenis PC.
3) Bahasa C hanya menyediakan 32 kata kunci.
4) Proses executable program bahasa C lebih cepat.
5) Dukungan pustaka yang banyak.
6) C adalah bahasa yang terstruktur.
7) Bahasa C term asuk bahasa tingkat menengah

Kekurangan Bahasa C
1) Banyaknya O perator serta fleksibilitas penulisan program kadang-kadang
m embingungkan pem akai.
2) Bagi pemula pada umumnya akan kesulitan menggunakan pointer.

2.3 Pengena l
Pengenal (identifier) m erupakan nam a yang didefinisikan oleh program untuk
m enunjukan identitas dari sebuah ko nstanta,variabel,fungsi dan label atau tipe
data khusus.pem berian nam a sebuah pengenal dapat ditentukan bebas sesuai
yang diinginkan program tetapi harus m em enuhi aturan berikut :

Karakter pertama tidak boleh menggunakan angka.

Karakter kedua dapat berupa huruf,angka,atau garis bawah.

Tidak boleh menggunakan spasi.

Bersifat case sensitif yaitu huruf kecil dan huruf besar dianggap berbeda.

Contoh penamaan yang diperbolehkan :


- Irfan2
- irfan_dadi
- _dadi_herlino
Contoh penamaan yang tidak diperbolehkan :
-

2dadi (tidak boleh diawali dengan angka)

Dadi+2 (tidak boleh menggunakan operator +)

Irfan dadi (tidak boleh menggunakan spasi)

2.4 Tipe Data


Tipe data merupakan bagian program yang paling penting karena tipe data
mempengaruhi setiap instruksi yang akan dilaksanakan oleh computer. Misalnya
saja 5 dibagi 2 bisa saja menghasilkan hasil yang berbeda tergantung tipe
datanya. Jika 5 dan 2 bertipe integer maka akan menghasilkan nilai 2, namun
jika keduanya bertipe float maka akan menghasilkan nilai 2.5000000. Pemilihan
tipe data yang tepat akan membuat proses operasi data menjadi lebih efisien dan
efektif.

10

Dalam bahasa C terdapat lima tipe data dasar, yaitu :

2.5 Konstanta Dan Variabel


a. Konstanta
Konstanta merupakan suatu nilai yang tidak dapat diubah selama proses
program berlangsung. Konstanta nilainya selalu tetap. Konstanta harus
didefinisikan terlebih dahulu di awal program. Konstanta dapat bernilai integer,
pecahan, karakter dan string.

b. Variable
Variabel adalah suatu pengenal (identifier) yang digunakan untuk mewakili suatu
nilai tertentu di dalam proses program. Berbeda dengan konstanta yang nilainya
selalu tetap, nilai dari suatu variable bisa diubah-ubah sesuai kebutuhan. Nama
dari suatu variable dapat ditentukan sendiri

b.1 Variabel Global Dan Variabel Local


Variabel global adalah variable yang dapat dikenali oleh semua fungsi yang ada
dalam program sadangkan variable local adalah variable yang hanya dikenali
oleh fungsi tertentu saja. Variable local hanya akan dibentuk/dialokasikan dalam
memori untuk variable tersebut akan dibebaskan sehingga penggunaan variable
tersebut

akan

dibebaskan

sehingga

penggunaan

variable

mengguntungkan dari sisi pemakaian memori.

Contoh deklarasi variable global (dideklarasikan diluar fungsi)


char data_a;
int data_b;
long data_c=13;

11

local

lebih

Contoh deklarasi variable local (dideklarasikan didalam fungsi)


void main (void)
{
char data_a;
int data_b;
long data_c=13;
}
2.6 Komentar Program
Komentar program hanya diperlukan untuk memudahkan pembacaan dan
pemahaman suatu program (untuk keperluan dokumentasi program). Dengan
kata lain, komentar program hanya merupakan keterangan atau penjelasan
program. Untuk memberikan komentar atau penjelasan dalam bahasa C
digunakan pembatas /* dan */ atau menggunakan tanda // untuk komentar
yang hanya terdiri dari satu baris. Komentar program tidak akan ikut diproses
dalam program (akan diabaikan).
Contoh :
// program PWM untuk mengatur kecepatan motor
/*sedangkan yang ini adalah komentar yang digunakan lebih dari satu baris*/

2.7 Pengarah Prosesor


Pengarah prosesor digunakan untuk mendefinisikan prosesor yang digunakan,
dalam

hal

ini

adalah

untuk

mendefinisikan

jenis

mikrokontroler

yang

digunakan.dengan pengarahan prosesor ini maka pendeklarasian registerregister dan penamaannya dilakukan pada file lain yang disisipkan dalam
program utama dengan sintaks sebagai berikut.
# include <nama_prosesor>
Contoh :
# include <mega 8535>

2.8 Pernyataan
Pernyataan adalah satu buah intruksi lengkap yang berdiri sendiri. Berikut adalah
contoh sebuah pernyataan :
PORTC = 0x0F:
Pernyataan diatas merupakan sebuah interuksi untuk mengeluarkan data 0x0F
ke Port C.

12

2.9 Operator Aritmatika


Bahasa C menyediakan lima operator aritmatika, yaitu :
Operator
*
/
+
%

keterangan
Operator untuk operasi penjumlahan
Operator untuk operasi pembagian
Operator untuk operasi penambahan
Operator untuk operasi pengurangan
Operator untuk operasi sisa pembagian

Catatan : operator % digunakan untuk mencari sisa pembagian antara dua


bilangan.Misalnya :
9%2=1
9%3=0

2.10 Operator Pembanding


Operator Hubungan digunakan untuk membandingkan hubungan antara dua
buah operand (sebuah nilai atau variable. Operator hubungan dalam bahasa C

2.11 Operator Logika


Jika operator hubungan membandingkan hubungan antara dua buah operand,
maka operator logika digunakan untuk membandingkan logika hasil dari
operator-operator hubungan. Operator logika ada tiga macam, yaitu :

Operator
&&
||
!

keterangan
Operator untuk logika AND
Operator untuk logika OR
Operator untuk logika NOT

Contoh.
If (( a == b ) && (c ! = d )) PORTC = 0XFF;

13

Pernyataan diatas terdiri dari dua kondisi yaitu a==b dan c!=d yang keduanya
dihubungkan dengan logika &&(AND). Jika logika yang dihasilkan benar maka
perintah PORTC = 0xFF akan dikerjakan dan jika salah maka tidak dikerjakan.

2.12 Operator Bitwise


Operator bitwise adalah operasi logiika yang berkerja pada level bit.hal ini
berbeda dengan operator logika diatas dimana pada operator logika
menghasilkan benar atau salah (Boolean) sedangkan operator bit menghasilkan
data biner.
Operator
>>
&
^
|
~
2.13

keterangan
Pergeseran bit kekanan
Bitwise AND
Bitwise XOR (exclusive OR)
Bitwise OR
Bitwise NOT

Operator Penugasan

Operator Penugasan (Assignment operator) dalam bahasa C berupa tanda sama


dengan
(=). Contoh :
nilai = 80;
A = x * y;
Artinya : variable nilai diisi dengan 80 dan variable A diisi dengan hasil
perkalian antara x dan y.

2.14 Operator Aritmatika


Bahasa C menyediakan lima operator aritmatika, yaitu :
Operator
*
/
%
+
-

keterangan
Untuk perkalian
Untuk Pembagian
Untuk sisa pembagian (modulus)
Untuk pertambahan
Untuk pengurangan

Catatan : operator % digunakan untuk mencari sisa pembagian antara dua


bilangan. Misalnya :
9%2=1
9%3=0

14

2.15 Operator Unary


Operator Unary merupakan operator yang hanya membutuhkan satu operand
saja. Dalam bahasa C terdapat beberapa operator unary, yaitu :

Catatan Penting ! :
Operator peningkatan ++ dan penurunan -- jika diletakkan sebelum atau sesudah
operand terdapat perbedaan

2.16 Fungsi pustaka


Bahasa C mempunyai fungsi pustaka yang berada pada file-file tertentu dan
sengaja disediakan untuk menangani berbagai hal dengan cara memanggil
fungsi-fungsi yang telah dideklarasikan didalam file tersebut. Dalam banyak hal,
pustaka,pustaka yang tersedia tidak berbentuk kode sumber melainkan dalam
bentuk yang telah dikompilasi. Pada saat proses lingking,ditulis oleh pemrogram.
Sintaks untuk menggunakan fungsi pustaka ini adalah sebagai berikut :
#include <nama_file_pustaka>
Contoh :
#include <lcd.h>
Beberapa fungsi yang telah disediakan oleh codevisian AVR antara lain adalah :

Fungsi tipe karakter (ctype.h)

Fungsi standar I/O (stdio.h)

Fungsi matematika (math.h)

Fungsi string (string.h)

Fungsi konversi BCD (bcd.h)

Fungsi konversi akses memori (mem.h)

15

Fungsi tunda (delay.h)

Fungsi LCD (lcd.h)

Fungsi I2C (I2C.H)

Fungsi SPI (spi.h)

Fungsi real time clock (RTC) (ds1302.h,ds1307.h)

Fungsi sensor suhu LM75,DS1621 dll. (lm75.h, ds1621.h)

2.17 Struktur kondisi if.


Struktur if dibentuk dari pernyataan if dan sering digunakan untuk menyeleksi
suatu kondisi tunggal. Bila proses yang diseleksi terpenuhi atau bernilai benar,
maka pernyataan yang ada di dalam blok if akan diproses dan dikerjakan. Bentuk
umum struktur kondisi if adalah :
If (kondisi)
{
// blok pernyataan yang akan dikerjakan
// jika kondisi if terpenuhi
}
Contoh :
If (PINA>0x80)
{
dataku = PINA;
PORTC=0xFF;
}
Pernyataan if diatas akan mengecek apakah data yang terbaca pada port A
(PINA) nilainya lebih besar dari 0x80 atau tidak, jika ya maka variable dataku diisi
dengan nilai PINA dan data 0xFF dikeluarkan ke port C.
Apabila dalam blok pernyataan hanya terdapat satu pernyataan saja maka tanda
{ dan } dapat dihilangkan seperti contoh berikut :
If (PINA>0x80)

PORTC=0xFF;

2.18 struktur kondisi if......else.


Dalam struktur kondisi if....else minimal terdapat dua pernyataan. Jika kondisi
yang diperiksa bernilai benar atau terpenuhi maka pernyataan pertama yang
dilaksanakan dan jika kondisi yang diperiksa bernilai salah maka pernyataan
yang kedua yang dilaksanakan. Bentuk umumnya adalah sebagai berikut :
if(kondisi)

16

pernyataan-1
else
pernyataan-2
Contoh Program :
If (kondisi)
{
// blok pernyataan yang akan dikerjakan
// jika kondisi if terpenuhi
}
Else
}
// blok pernyataan lain yang akan dikerjakan
// jika kondisi if terpenuhi
}
Contoh :
If (PINA>0x80)
{
Dataku = PINA;
PORTC = 0xFF;
}
else
{
Dataku = ~PINA;
PORTC=0x00;}
Pernyataan if ..else akan mengecek apakah data yang terbaca pada Port A
(PINA) nilainya lebih dari 0x80 atau tidak, jika ya maka variabel dataku diisi
dengan nilai PINA dan data 0xFF dikeluarkan ke port C tetapi jika tidak variabel
dataku diisi dengan nilai komplemen dari PINA (~PINA) dan data 0x00
dikeluarkan ke port C.

2.19 Pernyataan If Bersarang


Pernyataan if bersarang (nested if) adalah pernyataan if maupun if...else dimana
didalam blok pernyataan yang akan dikerjakan terdapat pernyataan if atau if else
lagi.contoh bentuk pernyataan if bersarang 2 tingkat adalah sebagai berikut :
If (kondisi_1)
{
If (kondisi_2)
{
// blok pernyataan_1 yang akan dikerjakan
// jika kondisi_1 dan kondisi_2 terpenuhi
}

17

}
Else
{
If (kondisi_3)
{
// blok pernyataan_2 yang akan dikerjakan
// jika kondisi_1 dan kondisi_3 terpenuhi
}}
2.20 Pernyataan Switch
Pernyatan switch digunakan untuk melakukan pengambilan keputusan terhadap
banyak kemungkinan. Bentuk pernyataan switch adalah sebagai berikut :
switch (ekspresi)
{
case nilai_1

: pernyataan_1;break;

case nilai_2

: pernyataan_2;break;

case nilai_3

: pernyataan_3;break;

.................
default

: pernyataan_default;break;

}
Pada pernyataan switch, masing-masing pernyataan (pernyataan_1 sampai
dengan pernyataan_default)dapat berupa satu atau beberapa perintah dan tidak
perlu berupa blok pernyataan.pernyataan_1 akan dikerjakan jika eksperesi
bernilai sama dengan nilai_1. pernyataan_2 akan dikerjakan jika eksperesi
bernilai sama dengan nilai_2. pernyataan_3 akan dikerjakan jika eksperesi
bernilai sama dengan nilai_3 dan seterusnya. Default bersifat opsional artinya
boleh ada boleh tidak.
Contoh :
switch (ekspresi)
{
case 0xFE
: PORTD=0x00;break;
case 0xFD
: PORTC=0xFF;break;
}
Pernyataan diatas berarti membaca port A,kemudian datanya (PINA) akan
dicocokan dengan nilai case. Jika PINA bernilai 0xFE Maka data 0x00 akan
dikeluarkan ke PORTC kemudian program keluar dari blok pernyataan switch
tetapi jika PINA bernilai 0xFD Maka data 0xFF Akan dikeluarkan ke port C
kemudian program keluar dari pernyataan switch.

18

2.21 Pernyataan While


Pernyataan while digunakan untuk pengulangan sebuah pernyataan atau blok
pernyataan secara terus menerus selama kondisi tertentu masih terpenuhi.
Bentuk pernyataan while adalah sebagai berikut :
while (kondisi)
{
//sebuah pernyataan atau blok pernyataan
}
Jika pernyataan yang akan diulang hanya berupa sebuah pernyataan saja maka
tanda { dan } bisa dihilangkan.
Contoh :
Unsigned char a=0;
................
While (a<10)
{
PORTC=a;
a++;
}
Pernyataan diatas akan mengeluarkan data a ke port C secara berulang- ulang.
Setiap pengulangan nilai a mencapai 10 maka pengulangan selesai.

2.22. Pernyataan For


pernyataan for digunakan untuk melakukan pengulangan sebuah pernyataan
atau blok pernyataan, tetapi berapa kali jumlah pengulangan dapat ditentukan
secara lebih spesifik. Bentuk pernyataan for adalah sebagai berikut :
for (nilai_awal ; kondisi ; perubahan)
{
//sebuah blok pernyataan atau blok pernyataan
}
Nilai_awal adalah nilai inisialisasi awal sebuah variable yang didefinisikan
terlebih dahulu

untuk menentukan niali variable

pertama kali

sebelum

pengulangan.
Kondisi merupakan pernyataan pengetesan untuk mengontrol pengulangan, jika
pernyataan kondisi terpenuhi (benar) maka blok pernyataan akan diulang terus
sampai pernyataan kondisi tidak terpenuhi (salah).

19

Perubahan adalah pernyataan yang digunakan untuk melekukan perubahan nilai


variable baik naik maupun turun setiap kali pengulangan dilakukan.
Contoh :
unsigned int a;
for (a=1,a<10,a++)
{
PORTC=a;
}
Pertama kali nilai a adalah 1, kemudian data a dikeluarkan ke port C. selanjutnya
data a dinaikan (a++) jika kondisi a<10 masih terpenuhi maka data a akan terus
dikeluarkan ke PORTC.

2.23 Bentuk Dasar Program C


Sebuah program dalam bahasa C seharusnya memiliki sebuah fungsi. Fungsi
dasar ini disebut dengan fungsi utama (fungsi main) dan memiliki kerangka
program sebagai berikut :
void main (void)
{
//pernyataan_pernyataan
}
Jika kita memiliki beberapa fungsi yang lain maka fungsi utama inilah yang
memiliki kedudukan paling tinggi dibandingkan fungsi-fungsi yang lain sehingga
setiap kali program dijalankan akan selalu dimulai dengan memanggil fungsi
utama terlebih dahulu.fungsi-fungsi yang lain dapat dipanggil setelah fungsi
utama dijalankan melalui pernyataan-pernyataan yang berada didalam fungsi
utama.

Contoh :
//prototype fungsi inisialisasi port
void inisialisasi_port (char A, char B, char C, char D);
//definisi fungsi inisialisasi port
void inisialisasi_port (char A, char B, char C, char D);
{
DDRA=A;

20

DDRB=B
DDRC=C
DDRD=D
}
//fungsi utama
Void main (void)
{
inisialisasi_port (0xFF, 0xF0, 0x0F, 0x00);
}

21

KEGIATAN BELAJAR 3

TOOL PENDUKUNG

Lembar informasi
Bab ini akan membahas tentang tool_tool yang diperlukan /digunakan dalam
proses merancang sistem mikrokontroler,khususnya yang berupa software yaitu
software kompiler dan software downloader/programer. Sebenarnya penggunaan
software kompiler dan downloader ini terdapat banyak macam dan variasinya
sehingga tidak mutlak harus sama dengan yang ada dalam modul ini,namun
untuk memudahkan anda dalam

belajar dan memahami pembahasan-

pembahasan dalam buku ini maka penulis mnyarankan agar anda menggunakan
tool yang sama seperti yang penulis gunakan.

3.1 Code Vision AVR


Code Vision AVR m erupakan salah satu software kom piler yang khusus
digunaan untuk m ikrokontroler keluarga AVR. Salah satu kelebihan dari
software

Code

Vision

AVR

adalah

tersedianya

fasilitas

untuk

m endownload program ke m ikrokontroler yang telah terintegrasi sehingga


dengan dem ikian Code Vision AVR
software

kom piler

juga

ini

dapat

selain

dapat

berfungsi

berfungsi
sebagai

program er/downloader.
Adapun menu-menu dalam Code Vision AVR adalah sebagai berikut:

3.11 Menu File

Gambar 3.1 Menu File

22

sebagai
software

a. N ew , untuk m emulai program baru


b. Op en, untuk m engambil atau membuka program
c. S ave, untuk m enyimpan file/program
d. S ave as, untuk menyim pan file/program
e. S ave all, untuk menyimpan seluruh file/program yang berada dalam
project sekaligus
f.

C lose, untuk m enutup program

g. C lose P roject, untuk m enutup prject beserta seluruh file-filre program


di dalam nya
h. C on vert to library, m engkonversi file program (*.c) m enjadi sebuah file
pustaka/library (*.lib)
i.

P rint, untuk m encetak program

j.

P age Setup, untuk m engatur settinga halam an dan printer

k. E xit, untuk keluar dari Code Vision AVR

3.2 Menu Edit

Gambar 3.2 Menu Edit

1. U nd o, untuk m em batalkan pengeditan terakhir


2. R edo, untuk kembali ke pengeditan terakhir yang telah di undo
3. C ut, untuk m emotong bagian tertentu dari program

23

4. C opy , untuk m enduplikasi bagian program


5. P aste , m enam pilkan file yang telah di copy
6. D elete, untuk m enghapus bagian tertentu dari program
7. S e le c t A ll , d ig u n a ka n u n tu k m e m ilih s e m u a te ks
8. P rin t S e le c t io n , d ig u n a k a n u n tu k m e n g a tu r prin t e r
9. In d e n t B lo c k , d ig u n a ka n u n tu k m e m b u a t s a tu b lo k te ks g e s e r ke
ka n a n (m a s u k ke d a la m )
10. U n in d e n t B l o c k , d ig u n a k a n u n tu k m e m b u a t s a tu b lo k te ks g e s e r
ke k iri
11. F in d , F in d N e x t d a n F in d In F ile s , m e ru p a ka n fa s ilita s u n tu k
m e n ca ri k a ta a ta u f ile
12. R e p la c e , d ig u n a ka n u n tu k m e n u ka r s e b u a h ka ta d e n g a n ka ta la in

3.3 Menu Project

Gambar 3.3 Menu Project

1. C heck Syntax, digunakan untuk m elakukan pengecekan ada tidaknya


kesalahan program
2. C om pile, digunaan untuk m engkom pile program. Proses kom pile
ini hanya m enghasilkan file asem bler saja (*.asm )
3. M ake, digunakan untuk m engkom pile sekaligus m enghasilkan kode
m esin program . Proses m ake ini m enghasilkan beberapa file antara
lain file *.asm , *.list, *.obj, *.hex, *.rom dan *.eep.
4. Stop C om pilatio n, digunakan untuk m enghentikan proses kom pile
5. N otes , digunakan untuk m em berikan catatan pada project
6. C onfig ures, digunakan untuk m engatur project
Files, untuk m enam bahkan file-file program ke dalam project atau
m enghapus file-file program dari project

24

C C om pile r, digunakan untuk m engatur kom piler


7. C od e
dan

G eneration,
fitur

yang

digunakan

dim iliki

untuk

m enentukan

spesifikasi

oleh m ikrokontroler

8. M essag es, digunakan untuk m engatur tam pil tidaknya beberapa pesan
peringatan
9. G lob ally #define , digunakan untuk m endeklarasikan pengenal global
10. P aths, digunakan untuk m enentukan direktori-direktori file program
(*.c), file header (*.h) dan file pustaka (*.lib) yang dibutukan dalam
project
11. A fter M ake , digunakan untuk m engatur proses yang akan dilakukan
setelah m ake

3.4 Menu Tools

Gambar 3.4 Menu Tools

1. C od e W izard A V R , digunakan untuk m em bangkitkan kode program


secara otom atis
2. D ebbug e r , digunakan untuk pengecekan listing program dalam
assem bler. Program ini hanya bisa dijalankan
m endefinisikan

terlebih

dahulu

program

jika

kita
beserta

letak

3. C hip P rogram er, digunakan untuk m endownload program

yang

direktorinya m elalui m enu settin g


telah

dikom pile

ke

debbuger

sudah

debbu ger

dalam m ikrokontroler dengan m enggunakan

hardware tertentu yang telah didefinisikan oleh Cde Vision AVR


4. Term inal, digunakan untuk m em buka term inal kom unikasi serial
USART

5. C onfig ure,
program

digunakan
aplikasi

lain

untuk

m enam bahkan

kedalam

25

m enu tools.

atau

m enghapus

Contoh

Anda

m enam bahkan m enu notpad dengan cara : tools configure


add [direktori no tpad]

3.5 Menu Setting

Gambar 3.5 Menu Setting

1. G eneral, digunakan untuk pengaturan secara um um . M elalui m enu ini


Anda dapat m em ilih tam pil atau tidaknya toolbar, navigator, pesan dan
inform asi
2. E ditor, digunakan untuk pengaturan editor program . Kita dapat
m enentukan

warna-warna

text yang berbeda untuk m em bantu

m em perm udah dalam m engecek kesalahan penulisan program


3. A sse m ble r, digunakan untuk m enentukan apakah file *.asm atau
*.lst yang akan terbuka secara otom atis pada saat terjadi error pada
saat kom pile
4. D ebbug er, untuk m engecek kesalahan-kesalahan program dalam
assem bler

dengan

m enggunakan software kom piler lain seperti

m isalnya AVR Studio


5. P rogram m er,

digunakan

untuk

m enentukan

jenis

hardware

yang digunakan apabila proses download program ke m ikrokontroler


dilakukan oleh CVAVR
6. Term inal, digunakan untuk m engstur m ode form at data term inal
kom unikasi

serail

UART

pada CVAVR antara lain port yang

digunakan, lebar data, bit stop, paritas dan lain-lain.

26

3.6 Codevision AVR Chip Programer


Salah satu kelebihan dari codevision AVR adalah tersedianya fasilitas untuk
mendownload program ke mikrokontroler yang telah terintegrasi sehingga
dengan demikian codevision AVR ini selain dapat berfungsi sebagai software
kompiler juga dapat berfungsi sebagai software programer / downloader. Jadi
kita dapat melakukan proses download program yang telah di kompile dengan
menggunakan software code vision AVR juga.

Gambar 3.6 rangkaian kompatibel STK200

Agar fasilitas CodeVision AVR chip programer dengan menggunakan modul


hardware seperti gambar 4.6 diatas dapat berkerja maka pada setting
programernya harus dipilih modul STK200. caranya adalah setting |programer
kemudian pilih AVR chip programer type : kanda system STK200+/300.

Gambar 3.7 programer setting

27

KEGIATAN BELAJAR 4

KONVERSI BILANGAN

Lembar informasi
Dalam kehidupan sehari-hari kita telah terbiasa menggunakan sistem bilangan
desimal,suatu bilangan berbasis 10 (terdiri dari 10 simbol),yaitu 0,1,2,3,4........9.
akan tetapi dalam suatu aplikasi tidak selamanya kita menggunakan sistem
desimal ini. Jadi kita dituntut untuk mengerti jenis bilangan yang lain.seperti
biner,heksa, dan oktal. Ada baiknya anda mempelajari 3 jenis bilangan, yaitu
desimal, biner dan heksa. Bilangan oktal mungkin tidak perlu kita pelajari dahulu
karena bilangan ini jarang sekali digunakan dalam pemrograman ini.

4.1 Bentuk bilangan


Sebelum kita mengkonversi suatu bilangan. Kita harus mengenal terlebih dahulu
masing-masing bilangan :
Bilangan desimal
Bilangan ini terdiri dari 10 bentuk, yaitu 0,1,2,3,4,5,6,7,8,9.
Bilangan Biner
Bilangan ini terdiri dari 2 bentuk, yaitu 0 dan 1 saja.
Bilangan heksa
Bilangan ini terdiri dari 16 bentuk, yaitu 0,1,2,3,4,5,6,7,8,9,A,B, C,D,E,F.

Sistem Desimal Dan Biner


Dalam sistem bilangan desimal, nilai yang terdapat pada kolom ketiga pada
Tabel 1, yaitu A, disebut satuan, kolom kedua yaitu B disebut puluhan, C disebut
ratusan, dan seterusnya. Kolom A, B, C menunjukkan kenaikan pada eksponen
dengan basis 10 yaitu 100 = 1, 101 = 10, 102 = 100. Dengan cara yang sama,
setiap kolom pada sistem bilangan biner, yaitu sistem bilangan dengan basis,
menunjukkan eksponen dengan basis 2, yaitu 20 = 1, 21 = 2, 22 = 4, dan
seterusnya.

28

Tabel 4.1. Nilai Bilangan Desimal dan Biner


Kolom desimal
C
102 = 100
(ratusan)

Kolom biner

B
101 = 10
(puluhan)

A
100 = 1
(satuan)

C
22 = 4
(empatan)

B
21 = 2
(duaan)

A
20 = 1
(satuan)

Setiap digit biner disebut bit; bit paling kanan disebut least significant bit (LSB),
dan bit paling kiri disebut most significant bit (MSB).

Untuk membedakan bilangan pada sistem yang berbeda digunakan subskrip.


Sebagai contoh 910 menyatakan bilangan sembilan pada sistem bilangan
desimal, dan 011012 menunjukkan bilangan biner 01101. Subskrip tersebut
sering diabaikan jika sistem bilangan yang dipakai sudah jelas.
Tabel 4.2 . Contoh Pengubahan Bilangan Biner menjadi Desimal

Biner
1110
1011
11001
10111
110010

32
1

16
1
1
1

Kolom biner
8
4
1
1
1
0
1
0
0
1
0
0

Desimal
2
1
1
0
1
1

1
0
1
1
1
0

8 + 4 + 2 = 14
8 + 2 + 1 = 11
16 + 8 + 1 = 25
16 + 4 + 2 + 1 = 23
32 + 16 + 2 = 50

Konversi Desimal ke Biner


Cara untuk mengubah bilangan desimal ke biner adalah dengan pembagian.
Bilangan desimal yang akan diubah secara berturut-turut dibagi 2, dengan
memperhatikan sisa pembagiannya. Sisa pembagian akan bernilai 0 atau 1,
yang akan membentuk bilangan biner dengan sisa yang terakhir menunjukkan
MSBnya. Sebagai contoh, untuk mengubah 5210 menjadi bilangan biner,
diperlukan langkah-langkah berikut :
52/2 = 26 sisa 0, LSB
26/2 = 13 sisa 0
13/2 =

6 sisa 1

6/2

3 sisa 0

3/2

1 sisa 1

0 sisa 1, MSB

29

Sehingga bilangan desimal 5210 akan diubah menjadi bilangan biner 110100.
Cara di atas juga bisa digunakan untuk mengubah sistem bilangan yang lain,
yaitu oktal atau heksadesimal.

4.3 Bilangan Hexsadesimal


Bilangan heksadesimal, sering disingkat dengan hex, adalah bilangan dengan
basis 1610, dan mempunyai 16 simbol yang berbeda, yaitu 0 sampai dengan 15.
Bilangan yang lebih besar dari 1510 memerlukan lebih dari satu digit hex. Kolom
heksadesimal menunjukkan eksponen dengan basis 16, yaitu 160 = 1, 161 = 16,
162 = 256, dan seterusnya. Sebagai contoh :
152B16 = (1 x 163) + (5 x 162) + (2 x 161) + (11 x 160)
= 1 x 4096 + 5 x 256 + 2 x 16 + 11 x 1
= 4096 + 1280 + 32 + 11
= 541910
Sebaliknya, untuk mengubah bilangan desimal menjadi bilangan heksadesimal,
dapat dilakukan dengan cara membagi bilangan desimal tersebut dengan 16.
Sebagai

contoh,

untuk

mengubah

bilangan

340810

menjadi

bilangan

heksadesimal, dilakukan dengan langkah-langkah sebagai berikut :


3409/16 = 213, sisa 110 = 116, LSB
213/16 =
13/16

13, sisa 510 = 516


0, sisa 1310 = D16, MSB

Sehingga, 340910 = D5116.


Bilangan Hexsadesimal dan Biner
Setiap digit pada bilangan heksadesimal dapat disajikan dengan empat buah bit.
Untuk mengubah bilangan heksadesimal menjadi bilangan biner, setiap digit dari
bilangan heksadesimal diubah secara terpisah ke dalam empat bit bilangan
biner. Sebagai contoh, 2A5C16 dapat diubah ke bilangan biner sebagai berikut.
216 = 0010, MSB
A16 = 1010
516 = 0101
C16 = 1100, LSB

30

Sehingga, bilangan heksadesimal 2A5C akan diubah menjaid bilngan biner 0010
1010 0101 1100.
Sebaliknya, bilangan biner dapat diubah menjadi bilangan heksadesimal
dengan cara mengelompokkan setiap empat digit dari bilangan biner tersebut
dimulai dari sigit paling kanan. Sebagai contoh, 01001111010111002 dapat
dikelompokkan menjadi 0100 1111 0101 1110. Sehingga:
01002 = 416, MSB
11112 = F16
01012 = 516
11102 = E16, LSB
Dengan demikian, bilangan 01001111010111002 = 4F5E16.

Bilangan Biner Pecahan


Dalam

sistem

bilangan

desimal,

bilangan

pecahan

disajikan

dengan

menggunakan titik desimal. Digit-digit yang berada di sebelah kiri titik desimal
mempunyai nilai eksponen yang semakin besar, dan digit-digit yang berada di
sebelah kanan titik desimal mempunyai nilai eksponen yang semakin kecil.
Sehingga
0.110

= 10-1

= 1/10

0.1010 = 10-2-

= 1/100

0.2

= 2 x 10-1, dan seterusnya.

= 2 x 0.1

Cara yang sama juga bisa digunakan untuk menyajikan bilangan biner pecahan.
Sehingga,
0.12

= 2-1
-2-

0.012 = 2

= , dan
= 2 =

Sebagai contoh,
0.1112

= + + 1/8
= 0.5 + 0.25 + 0.125
= 0.87510

101.1012 = 4 + 0 + 1+ + 0 + 1/8
= 5 + 0.625
= 5.62510
Pengubahan bilangan pecahan dari desimal ke biner dapat dilakukan dengan
cara mengalihkan bagian pecahan dari bilangan desimal tersebut dengan 2,

31

bagian bulat dari hasil perkalian merupakan pecahan dalam bit biner. Proses
perkalian diteruskan pada sisa sebelumnya sampai hasil perkalian sama dengan
1 atau sampai ketelitian yang diinginkan. Bit biner pertama yang diperoleh
merupakan MSB dari bilangan biner pecahan. Sebagai contoh, untuk mengubah
0.62510 menjadi bilangan biner dapat dilaksanakan dengan
0.625 x 2

= 1.25, bagian bulat = 1 (MSB), sisa = 0.25

0.25 x 2

= 0.5,

bagian bulat = 0, sisa = 0.5

0.5 x 2

= 1.0,

bagian bulat = 1 (LSB), tanpa sisa

Sehingga,
0.62510

= 0.1012

32

KEGIATAN BELAJAR 5
PROJEK PERTAMA

Lembar informasi
Pembahasan pada bab ini bertujuan untuk memberikan gambaran tentang
bagaimana proses mendownload dengan menggunakan mikrokontroler ATmega
8535 mulai dari menuliskan program aplikasi ,proses mendownload program
aplikasi hingga sampai mengamati hasilnya.

5.1 Dasar Input Dan Output


Perintah dasar
OUTPUT
PORTX=data;
Yaitu untuk mengirim data secara byte ke portX (X= A,B,C,D).perintah ini sama
dengan out dalam bahasa assembly ATmega 8535.
INPUT
data_in=PINX;
yaitu mengambil data Byte dari PINX(X= A,B,C,D).yang kemudian disimpan ke
variabel data_in. Perintah ini sama dengan in dalam bahasa assembly ATmega
8535.
Sebelum memulai program dasar I/O dengan bahasa C perlu diketahui bahwa
mikrokontroller ATmega 8535 perlu disetting DDR dan PORT agar bisa
digunakan sebagai mana mestinya.

DDR bit = 1

DDR = 0

PORT bit = 1

Output ; High

Input ; R pull-up

PORT bit = 0

Output ; low

Input ; Floating

Tabel 5.1 setting DDR dan PORT

Port I/O untuk output hanya memberikan arus sebesar 20mA. Jadi jika diperlukan
untuk menggerakan piranti yang lebih besar (konsumsi arus/tegangan) harus
ditambahkan

rangkaian

driver

untuk

piranti

jelasnya.langsung saja kita coba input dan output.

33

tersebut.

Untuk

lebih

OUTPUT
Misalkan rangkaian LED kita hubungkan ke PORTB (rangkaian input nanti dulu,
OK)
Buatlah program dengan langkah seperti pada gambar dibawah ini dengan
menggunakan Code Vision AVR.

Gambar 5.1 setting chip dan clock


Pilih ATmega 8535 untuk chipnya dan setting cloknya 11.059200 (sesuai dengan
X-tall yang digunakan)

Gambar 5.2 PORTB sebagai output

34

Untuk bagian PORT, pilih PORT B.


1.

Port B disetting sebagai output dan value low (lihat gambar)

2.

Klik File>Generate,Save and Exit

3.

Ikuti petunjuk penyimpanan file. Bila perlu ganti folder penyimpanannya.

4.

Simpan dengan nama output1.c, output1.prj dan output1.cwp.


Selanjutnya akan tampak gambar seperti berikut :

Gambar 5.3 file hasil code wizard project.

Coba perhatikan baris berikut :


// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out
Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;
.........
Setting I/O untuk PORT B adalah sebagai output dengan kondisi low.

35

PROSES MENDOWNLOAD
Untuk proses mendownload bisa langsung kita lakukan dengan memilih menu
project

make atau dengan mengklik icon

namun sebelum itu kita harus

menyettingnya terlebih dahulu dengan memilih menu project


aftermake kemudian klik program the chip

configure

OK.

Maka akan muncul tampilan seperti berikut:

Gambar 5.4 proses mendownload

INPUT OUTPUT
Saat mempelajari input sudah seharusnya dilanjutkan dengan output sehingga
bisa langsung mengetahui hasilnya. Hubungkan rangkaian output ke PORTB
dan rangkaian input ke PORTA.
Kembali kita buat proyek baru. Setting chip dan clock kemudian setting PORT
seperti gambar dibawah ini :

PORTA

PORTB

Gambar 5.5 setting port untuk PORTB Output dan PORTA input

36

Generate,Save and Exit. Simpan dengan nama file project_pertama. Buat


deklarasi variabel data dibagian berikut ini:

............
Void main (void)

{
//declare your local variabel here
Unsigned char data; // lokal variabel

..........
Tambahkan interuksi sehingga nampak seperti berikut :

............
while (1)
{
// Place your code here

data = PINA; //tambahkan interuksi ini


PORTB = data;
};
}
Kompilasi,download dan perhatikan hasilnya (sambil tekan tombol).

Contoh program menggunakan LED :


Setting PORTB sebagai output simpan dengan nama proyek_led.c,
proyek_led.prj proyek_led.cwp.
Tambahkan kode program sehingga listingnya seperti berikut :
LED 1 (Megontrol nyala led dengan bilangan heksa)
............
#include <mega8535.h>
#include <delay.h>
..............
while (1)
{
// Place your code here
PORTB=0x00;delay_ms(500);
PORTB=0xFF;delay_ms(500);
PORTB=0x00;delay_ms(500);
PORTB=0x0F;delay_ms(500);
PORTB=0xF0;delay_ms(500); };}
Kompilasi,download dan perhatikan hasilnya, apakah LED kelap-kelip...?
LED 2 (Mengontrol nyala LED dengan bilangan Biner)
#include <mega8535.h>
#include <delay.h>
..........

37

..........
while (1)
{
// Place your code here
PORTB=0b011111111;delay_ms(200);
PORTB=0b101111111;delay_ms(200);
PORTB=0b110111111;delay_ms(200);
PORTB=0b111011111;delay_ms(200);
PORTB=0b111101111;delay_ms(200);
PORTB=0b111110111;delay_ms(200);
PORTB=0b111111011;delay_ms(200);
PORTB=0b111111101;delay_ms(200);
PORTB=0b111111110;delay_ms(200);
};
}
Kompilasi,download dan perhatikan hasilnya, apakah LED bergeser ke kanan.?

LED 4 (Mengontrol nyala LED dengan operator BITWISE)


............
#include <mega8535.h>
#include <delay.h>
unsigned int a; //a dengan nilai integer
// Timer 0 overflow interrupt service routine
//fungsi program pada timer 0
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
............
// Global enable interrupts
#asm("sei")
a=1<<7; //bit ke 7 diset ke logika 1
PORTB=~a;//di invert supaya hanya satu led yang nyala
delay_ms(100);
{
PORTB=a;
while (1)
{
delay_ms(100);
a>>=1;//geser ke kanan 1 kali
PORTB=~a;//diinvert supaya hanya satu led yang nyala
if(a==0)//jika variabel a==0
{
a=1<<7;//bit 7 diset (logika'1') kembali
} }
}; }
Kompilasi,download dan perhatikan hasilnya, apakah LED bergeser ke kanan.?

38

Sekarang coba gunakan logika anda untuk mengatur nyala LED.......serukan..!!


5.2 KONTROL I/O per bit.
Perintah input dan output pada AT mega 8535 juga bisa dilakukan per bit dengan
cara :
Output
PORTX.bitn=data;
Yaitu untuk mengirim data bit (0 atau 1) ke portX (X=A,B,C,D) Bit ke n. Perintah
ini setara dengan sbi dalam bahasa assembly.
Contoh
..........
PORTB.3=1;
.........
Artinya adalah bit 3 PORTB diberi nilai 1.

Input
data_in=PINX.bitn;
Yaitu mengambil data bit dari PINX(X=A,B,C,D) bit ke n yang kemudian disimpan
ke variable data_in. Perintah ini setara dengan cbi dalam bahasa assembly.
Contoh
............
data_n=PORTB.3;
............
Artinya adalah ATmega 8535 mengambil data bit ke 3. Nilai dari perintah ini
hanya 0 atau 1.

Contoh program LED menggunakan tombol :


Tambahkan kode program sehingga listingnya seperti berikut :
I/O LED 1 (Mengatur nyala led per bit)
Setting PORTB sebagai output dan PORTA sebagai input.
...........
#include <mega8535.h>
#include <delay.h>
#define pin0 PORTA.0
#define pin1 PORTA.1
#define pin2 PORTA.2
.............
while (1)
{

39

// Place your code here


pin0=0;delay_ms(200);pin0=1;delay_ms(200);
pin1=0;delay_ms(200);pin1=1;delay_ms(200);
pin2=1;delay_ms(200);pin2=0;delay_ms(200);
};
}
Kompilasi,download dan perhatikan hasilnya, apakah LED 1,2 dan 3 berubah.?

5.3 Tunda
Tunda atau delay akan sering kita gunakan. contoh saat memutar motor
stepper,pemberian bit ke motor stepper harus di tunda karena bila tidak diberi
waktu tunda maka motor tidak akan dapat berputar. Ada dua cara memberikan
penundaan, yaitu tunda yang kita buat sendiri dan penundaan yang disediakan
oleh code vision AVR. namun untuk memudahkan dalam pembelajaran hanya
pustaka tunda yang dipelajari dalam modul ini.

Membuat tunda dengan pustaka tunda


Untuk membuat tunda sangat mudah, Ok, sekarang buat fungsi tunda berikut ini :
Pertama, buat proyek baru lagi. Set PORTB sebagai output kemudian simpan
dengan nama delay.c, delay.prj, delay.cwp.
Tambahkan pustaka tunda dibagian header:
#include <mega8535.h> // blok header
#include <delay.h>

// tambahkan library delay disini

..................
Tambahkan interuksi berikut :
void main(void)
{
..........
// Place your code here
#asm {cli)
PORTB=0xFF;
delay_ms(500); // memanggil delay dari librari delay.
PORTB=0XF0;
delay_ms(500);
#asm(sei)
};

}
Bagaimana blink-blink kan....................!!

40

Instruksi-Instruksi Dipustaka delay.


Instruksi tunda bisa dijelaskan sebagai berikut :
delay_us (unsigned int n)
menghasilkan tundaan selama n mikrodetik, n harus merupakan suatu konstanta.
delay_ms (unsigned int n)
menghasilkan tundaan selama milidetik.
Fungsi ini secara otomatis akan mereset kondisi timer wachdog setiap 1 mili
second dengan membangkitkan instruksi wdr.
Catatan penting :
Ada dua instruksi tambahan yang harus disertakan pada saat memanggil fungsi
tunda, yaitu :
#asm {cli)
#asm(sei)
Instruksi pertama berfungsi untuk menonaktifkan semua interupsi dan interuksi
kedua untuk mengaktifkan semua interupsi. Jika hal ini tidak dilakukan maka
penundaan akan menjadi lebih lama dari yang diharapkan.

5.4 Penampilan LCD


LCD adalah suatu display dari bahan cairan kristal yang pengoprasiannya
menggunakan dot matriks.LCD banyak digunakan sebagai display dari alat-alat
elektronika seperti kalkulator,multitester digital,jam digital dan sebagainya.

Gambar 5.6 LCD 2x16 karakter


Dengan

menggunakan

codewizard

AVR

kita

dapat

dengan

mudah

mendefinisikan port yang terhubung dengan LCD, langkah-langkahnya yaitu:


Buka program codevision AVR melalui menu Star|All Program || Codevision ||
Code Vision Avr C Compiler atau melalui deskop klik lambang Codevision.
Kemudian pillih File |New |pilih File Type project.

41

Kemudian muncul tampilan konfirmasi, dan menanyakan apakah akan


menggunakan codewizard, pilih Yes.

Untuk setting IC(Chip yang digunakan) pilih Chip, isi informasi sebagai berikut :

Gambar 5.7 a setting chip ATmega 8535 clock 11.059200


Gambar 5.7 b setting PORTC sebagai output LCD
Jika sudah menkonfigurasi project,pilih File | Generate Save and Exit, sehingga
akan tampil source code dalam bahasa C. setelah itu, kita tinggal menambahkan
instruksi-instruksi tambahan kedalam program yang sudah ada.
Perhatikan blok-blok program berikut :
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
..
Blok ini harus disertakan (jika dengan cara generate fileakan otomatis
dibuatkan).arti dari blok diatas adalah setting LCD di PORTC kemudian akan
me_link ke pustaka lcd.h yang didalamnya terdapat instruksi-instruksi untuk
akses LCD secara langsung.
.

.equ __lcd_port=0x15 ;PORTC

42


Menggunakan PORTC(0x15) untuk LCD (lihat tentang register I/O di datasheet
ATmega 8535). Untuk inisialisasi cukup dengan instruksi berikut:

// LCD module initialization


lcd_init(16);

//inisialisasi LCD 16x2

Contoh program LCD :


Tambahkan kode program sehingga listingnya seperti berikut :
.
#include <mega8535.h>
#include <delay.h>
.
while (1)
{
// Place your code here
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("*SELAMAT DATANG*");
lcd_gotoxy(0,1);
lcd_putsf("PSERTA PELATIHAN");
delay_ms(5000);
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("*MIKROKONTROLER*");
lcd_gotoxy(0,1);
lcd_putsf(" -ATmega 8535- ");
delay_ms(5000);
};
}
Kemudian kompilasi, download dan perhatikan hasilnya. Coba dengan string dan
posisi baris yang berbeda.

5.5 Aplikasi Antar Muka Dengan Push Button


Push button atau tombol tekan adalah penghubung antara pemakai dengan alat
pengendali yang dibuat.tombol tekan yang dipakai mempunyai 8 buah tombol
yang masing masing dihubungkan dengan port A, tombol-tombol ini dipakai
untuk menjalankan berbagai fungsi pengendalian seperti misalnya untuk on/of
dan pilihan menu.
Push botton to LED

43

Pertama-tama kita akan membuat interfacing keypad ke mikro kontroler dimana


hasil penekanan tombol dikeluarkan ke LED (modul dasar I/O).modul LED
dihubungkan ke PORTB. Setelah itu buat proyek baru. Jangan lupa setting chip
dan clock dan kemudian setting PORT seperti gambar berikut :

Gambar 5.8 A untuk setting push botton di PORTA


Gambar 5.8 B untuk setting LED di PORTB
Kemudian File | Generate Save and Exit, simpan dengan nama file
push_botton.c, push_botton.prj, push_botton.cwp.
Kita akan membuat proyek push botton to led dengan perintah :

jika push botton 1 ditekan maka LED brucak-brinong.


jika push botton 2 ditekan maka LED plip-plop.
jika push botton 4 ditekan maka LED blink-blink.
jika push botton 7 ditekan maka LED 2blink.

Tambahkan intruksi sehingga menjadi seperti listing berikut :


............
#include <mega8535.h>
#include <delay.h>
#define saklar1 PINA.0
#define saklar2 PINA.1
#define saklar7 PINA.7
#define saklar4 PINA.3
#define led PORTB
..............
while (1)

44

{
// Place your code here
if (saklar1==0){
//jika saklar 1 ditekan
PORTB=0x00;delay_ms(100); //maka led brucak-brinong
PORTB=0xFF;delay_ms(100);
}
if (saklar2==0){
//jika saklar 2 ditekan
PORTB=0x0F;delay_ms(100); //maka led plip-plop
PORTB=0xF0;delay_ms(100);
}
if (saklar7==0){
//jika saklar 7 ditekan
PORTB=0xAA;delay_ms(100); //maka LED blink-blink
PORTB=0x55;delay_ms(100);
}
if (saklar4==0){
PORTB=0b11001100;delay_ms(200); //maka LED 2blink
PORTB=0b00110011;delay_ms(100);
}
PORTB=0xFF;
//jika tidak maka led mati
};
}
Kompilasi,download dan perhatikan hasilnya, tekan tombol 1,2,4 dan 7......?
Bagaimana tambah serukan.!!

5.6 ADC ( Analog To Digital Converter )


Penggunaan ADC sangat banyak,terutama dalam bidang pengukuran. Banyak
keluaran sensor yang masih berupa analog yang harus dikonversi kedigital agar
dapat diolah ke mikrokontroler.

Fitur dari ADC ATmega 8535 adalah sebagai berikut :

Resolusi 10 Bit,

Waktu konversi 65-260 us,

8 ch input,

0-Vcc input ADC,

3 mode pemilihan tegangan referensi.

Untuk mempelajari ADC pada ATmega 8535, kita cukup membuat rangkaian
sederhana dari potensio meter.

45

Gambar 5.9 rangkaian pembagi tegangan pada potensio meter.

Dengan rangkaian pembagi tegangan kita dapat memberi tegangan yang


bervariasi ke ADC.
Vout =

R2

x Vcc

R1+R2
Dari gambar rangkaian diatas, keluarannya dihubungkan ke input ADC, yaitu
misal ke PORTA.0 (ADC ch.0). untuk melihat hasil ADC, kita dapat memasang
rangkaian LED atau LCD, dalam contoh ini langsung kita tampilkan pada LCD.
DASAR ADC
Register-register yang kita bahas diatas dalam pengelementsialnya akan diset
pada saat kita membuat proyek baru dengan wizard code vision. Untuk lebih
jelasnya, perhatikan contoh berikut ini.
Buat proyek baru. Jangan lupa setting chip dan clock.setelah itu setting bagian
ADC seperti gambar berikut ini :

46

Gambar 5.10 setting ADC pada codewizard,PORTA output,PORTC LCD

Hubungkan rangkaian pembagi tegangan kesalah satu pin pada PORTA, yang
untuk contoh ini dihubungkan ke PINA.0 untuk setting LCD, samakan dengan
keypad, yaitu LCD ke PORTC. Generate file, save and exit. Simpan dengan
nama file adc.c,adc.prj,adc.cwp.
Tambahkan interuksi sehingga menjadi listing program berikut ini :

#include <mega8535.h>
#include <delay.h>
#include <stdio.h>
unsigned int adc;
unsigned char nilai[16];
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTC
#endasm
#include <lcd.h>
#define ADC_VREF_TYPE 0x60
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete

47

while ((ADCSRA & 0x10)==0);


ADCSRA|=0x10;
return ADCH;
}
// Declare your global variables here

void main(void)
{
..
// LCD module initialization
lcd_init(16);
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("pelatihan mikro");
delay_ms(50);

while (1)
{
// Place your code here
adc=read_adc(0);
lcd_clear();
sprintf(nilai,"nilai adc=%d",adc);
lcd_gotoxy(0,0);lcd_puts(nilai);
delay_ms(100);
};
}
Kompilasi download dan perhatikan hasilnya dengan memutar potensiometer.

Perhatikan bagian program berikut ini :


#define ADC_VREF_TYPE 0x60
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}

48

Blok-blok diatas adalah inisialisasi dan prosedur baca ADC yang dibentuk oleh
codevision. Untuk membaca ADC channel yang lain cukup dengan mengubah
instruksi menjadi seperti berikut :
data_adc=read_adc(3) ;

//membaca ADC dichanel 3

5.7 INTERUPSI
Interupsi adalah suatu kondisi dimana mikrokontroler akan berhenti sementara
dari program utama untuk melayani interuksi-intruksi pada interupsi kemudian
kembali mengerjakan instruksi program utama setelah instruksi-instruksi pada
interupsi selesai dikerjakan. Terdapat 21 interupsi pada ATmega 8535 (lihat data
sheet).

Atmega 8535 menyediakan 3 interupsi eksternal, yaitu INT0,INT1 dan INT2.


interupsi eksternal bias dilakukan dengan memberikan logika 0 atau perubahan
logika (rising edge dan falling edge) pada pin interupsi yang bersangkutan.

Tabel 5.2 hubungan PIN interrupt


Jenis interup

PIN

INT0

PORTD.2

INT1

PORTD.3

INT2

PORTB.2

Kontrol LED dengan interupsi


Sebelum mencoba membuat program untuk melayani interupsi,siapkan dulu
rangkaian berikut (bisa anda gunakan rangkaian dasar input dengan beberapa
modipikasi) :

Gambar 5.11 rangkaian push button untuk pemberian interupsi

49

Pada rangkaian diatas,logika yang kita dapat adalah jika tombol ditekan maka
keluaran akan menjadi sisi negative (falling edge) yang selanjutnya menjadi low.
Misal program yang kita inginkan adalah sebagai berkut :

Saat program dijalakan maka led akan menyala sehingga berjalan dan kemudian
saat terjadi interupsi maka led akan berkedip 10 kali.setelah interuksi pada
interupsi selesai dijalankan maka program akan kembali mengerjakan program
utama ,yaitu led berjalan. Siapkan proyek baru jangan lupa setting chip dan clock
dan kemudian setting PORTB sebagai output dan PORTD untuk tombol interrupt.
Hubungkan rangkaian pada gambar ke PORTD.2, yaitu INT.0 :

Gambar 5.12 interup pada codewizard


Generate save and exit. Simpan dengan nama file int_1.c, int_1.prj, int_1.cwp,
Sesuaikan listing program seperti berikut

#include <mega8535.h>
void tunda(unsigned char i);
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
unsigned char rr=0;
while (rr<5){
PORTB=0x0F; tunda (5); //program interuksi supaya LED kelap-kelip
PORTB=0xF0; tunda (5);
++rr;
}

50

}
// Declare your global variables here
unsigned char dt=0x01;
void main(void)
{
.
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
PORTB=dt; tunda(1);
dt=dt<<1;
if(dt==0){dt=0x01;}
};
}
//prosedur tunda
void tunda(unsigned char i){
unsigned char j;
j=0;
while (j<255){
j=j+1;
while (i--){
#asm
nop
nop
#endasm
};
};
}
Kompilasi,download dan perhatikan hasilnya dengan menekan tombolnya bagaimana berubahkan..?

5.8 EEPROM
EEPROM (electrically erasable programmable read only memory) adalah memori
yang masih dapat menyimpan data walaupun catu daya dimatikan.operasi
baca/tulis data ke EEPROM dapat dilakukan saat program berjalan. Untuk
mengakses EEPROM dilakukan dengan cara menentukan EEPROM addres
register, EEPROM data register , dan EEPROM control register.
Akses baca/tulis EEPROM.

51

EEPROM addres register-EEARL dan EEARL

EEPROM data register-EEDR

EEPROM control register-EEDR

Gambar 5.13 EEPROM addres Register

Untuk menulis ke EEPROM tentu saja kita harus menyeting register yang
bersangkutan, yaitu register EECR (baca data sheet ATmega 8535) namun
demikian sekali lagi, dengan code vision AVR kita bisa langsung mengakss
EEPROM dengan mudah.
Buat proyek baru berikut ini :
Setting chip dan clock ATmega 8535 ,11059200 Generate file,save and
exit.simpan dengan nama file eeprom.c, eeprom.prj, eeeprom.cwp.
Gunakan LCD di PORTC untuk melihat hasil penulisan dan pembacaan
EEPROM.
Tambahkan kode program sehingga listingnya seperti berikut :

#include <mega 8535>


#include <delay.h>
.
//declarate your global variable here
char buf [33];

52

eeprom int alfa;//pemesanan tempat untuk variable alfa di EEPROM


void main (void)
{
//declarate your local variables here
Int i;

//LCD module initialization


// LCD module initialization
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf("Data EEPROM alfa");
lcd_gotoxy(0,1);
sprintf(buf,"%x ",alfa);
lcd_puts(buf);
alfa=0x55;
lcd_gotoxy(6,1);
sprintf(buf,"%x ",alfa);
lcd_puts(buf);
i=alfa;
lcd_gotoxy(12,1);
sprintf(buf,"%x ",i);
lcd_puts(buf);
while (1)
{
// Place your code here
};
}
Kompilasi download dan perhatikan LCD.

Sesaat setelah dikompilasi bagian bawah LCD menunjukan angka 0. hal


ini menunjukan EEPROM (alfa) masih belum terisi nilainya.

eeprom int alfa; //pemesanan tempat untuk variabel alfa

Kemudian alfa diisi nilai 55h,ditampilkan ditengah bawah LCD.

alfa=0x55;//menulis ke variable alfa di EEPROM

Bagian kanan bawah LCD menampilkan hasil pembacaan EEPROM yang


disimpan divariabel i.

Matikan catu daya / direst kemudian nyalakan kembali tampilan LCD.

Tampak dikiri bawah LCD sudah menunjukan angka 55h, yaitu hasil
penulisan yang dilakukan oleh program saat berjalan.

53

5.9 TIMER DAN COUNTER


Sebelum menggunakan timer/counter. Harap diperhatikan konfigurasi bit
ATmega 8535. kesalahan konfigurasi dapat menyebabkan timer atau counter
tidak berjalan sebagaimana mestinya.

Timer/counter ATmega 8535 ada 3, yaitu :

Timer counter 0

Timer counter 1

Timer counter 2

Setting register tidak kita lakukan saat penulisan program.kita dapat langsung
menyesetnya saat melakukannya dengan wizard new project. Jadi untuk
register-register yang berkenaan dengan timer/counter tidak kita bahas.agar
lebih jelas tentang register pada timer/counter,anda dapat melihat data sheet
ATmega 8535.
Timer/counter 0
Timer/counter 0 adalah 8 bit timer/counter dengan fitur sebagai berikut :
a. 8 bit Timer/Counter 1 kanal.
b. Auto reload, yaitu timer akan dinolkan saat match compare.
c. Dapat menghasilkan pulsa PWM dengan glich free
d. Frequence generator.
e. Prescaler 10 bit untuk timer
f.

Membangkitkan interupsi saat timer overflow dan atau match compare.

Timer/counter 1
Timer/counter 1 adalah 16 bit timer/counter dengan fitur sebagai berikut :
a. 16 bit Timer atau counter
b. Memiliki 2 compare unit
c. Memiliki 2 register pembanding
d. Memiliki 1 input capture unit
e. Auto reload,timer akan dinolkan saat match compare

54

f.

Dapat menghasilkan pulsa PWM dengan glich free dan periode yang
bisa dirubah-ubah

g. Frequence generator
h. Memiliki 4 buah sumber interupsi, yaitu TOV1,OCF1A,OCF1B dan ICF1.

Timer/counter 2
Timer/counter 0 adalah 8 bit timer/counter dengan fitur sebagai berikut :
8 bit Timer/Counter 1 kanal.
Auto reload, yaitu timer akan dinolkan saat match compare.
Dapat menghasilkan pulsa PWM dengan glich free
Frequence generator.
Prescaler 10 bit untuk timer
Membangkitkan interupsi saat timer overflow dan atau match compare.

Cara menggunakan ketiga timer diatas adalah dengan menyetting register dari
masing-masing

timer/counter

yang

bersangkutan.namun

karena

kita

menggunakan codevisian AVR. Setting timer atau counter dilakukan saat


pembuatan proyek baru dimulai.

TIMER
Berikut ini adalah contoh penggunaan timer. Gunakan kembali rangkaian LED
untuk mempermudah pemahaman akan timer.disini kita akan membuat LED
blink dengan pewaktuan menggunakan timer.Gunakan kembali rangkaian I/O led
dan hubungkan ke PORTB Selanjutnya kita buat proyek baru dengan setting
mikro sebagai berikut :
Setting clock pada 11.059200,chip ATmega 8535 dan PORTB sebagai output :

55

Gambar 5.13 setting timer pada codewizard


Generate file,save and exit.simpan dengan nama file timer.c, timer.prj, timer.cwp.
Kemudia tambahkan listing program seperti berikut ini:
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer 1 value
TCNT1H=0xD5;
TCNT1L=0xD0;
// Place your code here
if (PINB==0){
PORTB=0xFF
}
else
{
PORTB=0x00;
}}
Kompilasi,download dan perhatikan LEDnya.

Perhatikan blok interupsi timer 1 overflow :


// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer 1 value
TCNT1H=0xD5;
TCNT1L=0xD0;
// Place your code here

56

if (PINB==0){PORTB=0xFF
}else{ PORTB=0x00;}}
Kita hanya memanfaatkan interupsi timer 1 overflow. Program ini akan
menambahkan nilai TCNT timer 1 yang semula kita set dengan nilai D5D0H
sehingga mencapai FFFFh kemudian overflow dan menghasilkan interupsi. Pada
saat interupsi dijalankan maka nilai TCNT diset kembali menjadi D5DOh. Diblok
interupsi ini juga terlihat kondisi dari PORTB, yaitu jika sebelumnya PORTB
berlogika 0 maka PORTB akan diset ke logika 1. begitu juga sebaliknya atau
dengan kata lain PORTB dalam kondisi toogle.
Ubah interuksi berikut :
.
TCCR1A=0x00;
TCCR1B=0x03; // ubah menjadi 0x01 hingga 0x05
Kompilasi,download dan perhatikan LEDnya.bagaimana hasilnya ?
COUNTER
Untuk memahami

counter,

gunakan

kembali

rangkaian

pada

gambar

5.11..hubungkan rangkaian pada gambar ke PORTB0 ,yaitu sebagai input


pulsa T0. hubungkan kembali rangkaian LED ke PORTB. kemudian kita buat
proyek baru dengan setting mikro sebagai berikut :
Setting clock pada 11.059200 dan chip ATmega 8535

Gambar 5.13 setting TIMER 0 dan PORTB sebagai I/O


Generate file,save and exit.simpan dengan nama file counter.c, counter.prj,
counter.cwp.

57

Tambahkan interuksi hingga menjadi listing berikut :


.
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0xFA;
// Place your code here
If (PINA==0) {PORTB=0xFF;}
else {PORTB=0x00;}
}
..
Blok interupsi tomer 0 akan dilaksanakan

apabila

nilai

TCNT

melimpah.penambahan/counter naik nilai TCNT dilakukan dengan menberikan


trigger/pemicu falling edge ke kaki T0 (PORTB 0). saat nilai TCNT melimpah,
nilai TCNT melimpah,nilai TCNT akan diset kembali menjadi FAh, dan kemudian
jika PINC sebelumnya berlogika 0 maka PORTC akan diberi logika 1 (LED
nyala dan LED

4-7

0-3

padam.ingat active high dan active low). Demikian juga saat

PINC sebelumnya berlogika 1 maka akan diset ke logika 0.


Kompilasi,download dan perhatikan nyala LEDnya dengan menekan pushbutton.
Berapa kali penekanan agar LED bergantian atau padam ? ya 6 kali, karena
counter naik dari Fah hingga FFh kemudian melimpah dan di-set kembali
menjadi FAh. Kadang jika terdapat keybouncing pada saklar yang kita gunakan
penekanan saklar tidak 6 kali.

5.10 PWM (pulse witdh modulation)


Pulse width modulation menggunakan gelombang kotak dengan duty circle
tertentu menghasilkan berbagai nilai rata-rata dari suatu bentuk gelombang. Jika
kita menganggap bentuk gelombang kotak f(t) dengan nilai batas bawah
ymin,batas atas ymax dan duty circle D,seperti dapat dilihat pada gambar dibawah
ini.

TIME
Gambar 5.14 gelombang kotak yang memiliki y max,ymin dan D

58

Nilai rata-rata dari bentuk gelombang diatas adalah :

Jika f(t) adalah gelombang kotak, maka nilai ymax adalah dari 0 < t < D.T dan nilai
ymin dari D.T < t < T.dari pernyataan diatas didapat :

Persamaan diatas dapat disederhankan dalam berbagai kasus dimana ymin=0


sehingga kita mendapatkan bentuk persamaan akhir y= D. ymax dari persamaan
ini jelas bahwa nilai rata-rata dari sinyal (y) secara langsung bergantung pada
duty circle D.

Hubungan antara duty circle dengan nilai rata-rata tegangan


Duty circle menyatakan presentase keadaan logika high (pulse) dalam satu
periode sinyal.satu siklus diawali oleh transisi low to high dari sinyal dan berakhir
pada transisi berikutnya. Selama satu siklus, jika waktu sinyal pada keadaan high
sama dengan low maka dikatakan sinyal mempunyai dutycircle 50%.

59

Gambar 5.15 duty circle VS Register OCR pada past PWM

Semakin besar nilai data pada register OCR ,maka semakin tinggi juga nilai ratarata tegangan DC, contoh semakin besar dutycircle semakin terang nyala LED.
Contoh program pengaturan tegangan LED menggunakan PWM :
PORTB sebagai output,PORTA sebagai input,gunakan Timer 0 sebagai
pembangkit pulsa PWM.

Gambar 5.16
Lengkapi listing program sehingga seperti berikut :

#include <mega8535.h>
#include <delay.h>
#define led1
PORTA.0
#define led2
PORTA.1
#define led3
PORTA.2
#define led4
PORTA.3
#define led5
PORTA.4
#define led6
PORTA.5
#define led7
PORTA.6
#define led8
PORTA.7
unsigned char
x=0,pwm1=0,pwm2=0,pwm3=0,pwm4=0,pwm5=0,pwm6=0,pwm7=0,pwm8=0;

60

// Timer 0 overflow interrupt service routine


interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
x++;
if (x>pwm1){led1=0;}
//proses untuk membandingkan sinyal PWM
else {led1=1;};
if (x>pwm2){led2=0;}
else {led2=1;};
if (x>pwm3){led3=0;}
else {led3=1;};
if (x>pwm4){led4=0;}
else {led4=1;};
if (x>pwm5){led5=0;}
else {led5=1;};
if (x>pwm6){led6=0;}
else {led6=1;};
if (x>pwm7){led7=0;}
else {led7=1;};
if (x>pwm8){led8=0;}
else {led8=1;};
}

// Global enable interrupts


#asm("sei")
while (1)
{
// Place your code here
pwm1=0;
pwm2=255;pwm3=0; pwm4=255; pwm5=0;
pwm6=255;pwm7=0;pwm8=255;
delay_ms(1000);
pwm1=100;pwm2=100;pwm3=100;pwm4=100;
pwm5=100;pwm6=100;pwm7=100;pwm8=100;
delay_ms(1000);
pwm1=0;pwm2=0;pwm3=0;pwm4=0;
pwm5=0;pwm6=0;pwm7=0;pwm8=0;
delay_ms(1000);
pwm1=255;pwm2=255;pwm3=255;pwm4=255;
pwm5=255;pwm6=255;pwm7=255;pwm8=255;
delay_ms(1000);
};
}
Kompilasi,download dan perhatikan LEDnya.

61

5.11 Komunikasi serial USART


Transmisi data seri dibedakan menjadi 2 macam, yaitu komunikasi data seri
sinkron dan komunikasi data assinkron, perbedaan ini tergantung pada clock
pendukung data.dalam komunikasi data seri sinkron,clock untuk shift register ikut
dikirimkan bersama dengan data seri.sebaliknya dalam komunikasi data seri
assinkron, clock pendukung data register tidak ikut dikirim, rangkaian penerima
data harus dilengkapi dengan rangkaian yang mampu membangkitkan clock
yang diperlukan.bagian yang terpenting dari komunikasi seri asinkron adalah
upaya agar penerima data bisa membangkitkan clock yang bisa dipakai untuk
mendorong shift register penerima. Untuk keperluan tersebut terlebih dahulu
ditentukan bahwa saat tidak ada pengiriman data, keadaan saluran adalah 1 saat
akan mulai mengirim data 1 byte sluran dibuat menjadi 0 dulu selama 1 periode
clock pendorong ,dalam 8 periode clock berikutnya dikirim data bit 0,bit 1 dan
seterusnya sampai bit 8, dan pada periode clock yang ke 10 saluran
dikembalikan menjadi 1.dengan demikian data 8 bit yang dikirim diawali dengan
bit star yang bernilai 0 dan diakhiri dengan bit stop yang bernilai 1 seperti terlihat
pada gambar. kemasan data ini dimaksudkan agar rangkaian penerima bisa
membangkitkan clock yang frequensinya sama dengan clock pengirim

dan

fasanya disinkronkan pada awal penerimaan data 1 byte.

Gambar 5.17 kemasan data seri assinkron

Pada computer, biasanya terdapat sebuah port untuk komunikasi serial.bebarapa


contoh penerapan komunikasi serial ialah mouse,scanner dan system akuisisi
data yang terhubung ke port serial COM1/COM2. bagian yang terpenting dari
komunikasi serial adalah konektor DB9 dan RS232. DB9 adalah konektor yang
digunakan untuk menghubungkan hadware dengan computer.

62

Kegunaan RS232 adalah sebagai driver, yang akan mengkonversi tegangan dari
hardware agar sesuai tegangan dengan computer sehingga data dapat dibaca.

RS 232
o

logic high (1) 15V s/d -3V

logic low (0)--+3V s/d +15V

TTL
o

logic high (1) +2 s/d +5V

logic low (0) 0V s/d +0.8V

Rangkaian interface menerjemahkan level tegangan RS232 ke level tegangan


TTL dan sebaliknya.rangkaian interface tersebut menggunakan IC MAX 232

Gambar 5.19 rangkaian IC max 232

Untuk menghubungkan antara 2 PC,atau antara rangkaian mikrokontroler


dengan PC biasanya digunakan format null mode, dimana pin TXD dihubungkan
dengan pinRXD pasangan,PIN sinyal ground (5) dihubungkan dengan sinyal
ground dipasangan.
Fungsi pin-pin DB9

Pins

Common Name

Decription

Signal direction on DCE

CD

Received line signal detector

63

RXD

Received data

out

TXD

Transmitted data

In

DTR

Data terminal ready

In

GND

Signal ground

DSR

Data set ready

out

RTS

Request to send

In

CTS

Clear to send

out

Ring indicator

out

USART (universal synchronous asynchronous receiver/transmitter)


USART

ATmega

memiliki

beberapa

keuntungan

dibandingkan

system

UART,yaitu :
a. operasi full duplex(mempunyai register receive dan transmit yang
terpisah)
b. mengandung komunikasi multiprosesor
c. mode kecepatan transmisi berorde mbps

inisialisasi USART reister yang perlu ditentukan nilainya,yaitu :

1. UBRR (USART baund rate register)


UBRR merupakan

register 16 bit, yang berfungsi untuk menentukan

kecepatan transmisi data yang akan digunakan. UBRR dibagi menjadi dua
bagian yaitu UBRRH dan UBBRL.UBRR [11..0] merupakan NIT penyimpan
konstanta kecepatan komunikasi serial.UBRRH menyimpan 4 bit tertinggi,
dan UBRRL menyimpan 8 bit sisanya.data yang dimasukan ke UBRRH dan
UBRRL dihitung menggunakan rumus pada table dibawah ini :

64

Table rumus perhitngan UBRR


Mode Operasi

Rumus Nilai UBRR

asinkron mode kecepatan normal UBRR=


(U2X=0)

fosc

-1

16x Baud rate

asinkron mode kecepatan ganda UBRR=


(U2X=1)

fosc

-1

8x Baud rate

sinkron

UBRR=

fosc

-1

2x Baud rate

Catatan :
U2X adalah bit pada register UCSRA, yang berfungsi untuk mengandakan
transfer rate menjadi dua kalinya. Hanya belaku untuk mode asinkron,untuk
mode sinkron bit ini diset 0.

UCSRA (USART control and status register A )

UCSRA

UCSRB (USART control and status register B )

Penjelasa bit penyusun register UCSRB :


a. RXCIE : bit pengatur aktivasi interupsi penerimaan data serial
b. TXCIE : bit pengatur aktivasi interupsi pengiriman data serial
c. UDRIE : bit pengaur aktivasi interupsi, yang berhubungan dengan
kondisi udre dan UCSRA.
d. RXEN : bit pengatur aktivasi penerima data serial ATmega 8535
e. TXEN : bit pengatur aktivasi pengirim data serial ATmega 8535
f. UCSZ2 : bersama-sama dengan bit UCSZ1 DAN UCSZ0 diregister

65

g. UCSZ0 menentukan ukuran karakter serial yang dikirimkan


Penentuan ukuran karakter
UCSZ[20]

Ukuran karakter bit

000

001

010

011

100-110

Tidak dipergunakan

111

UCSRC (USART control and status register C )


UCSRC merupakan register 8 bit yang digunakan untuk mengatur mode dan
kecepatan komunikasi serial yang dilakukan.komposisinya seperti gambar
dibawah ini.

a. URSEL

: Merupakan bit pemilih akses antara UCSRC DAN UBBR

b. UMSEL

: merupakan bit pemilih mode komunikasi serial antara


sinkron dan asinkron.

c. c. UPM [1..0] : merupakan bit pengatur paritas


d. d. USBS

: merupakan bit pemilih ukuran bit stop

e. UCSZ1 dan UCSZ0 : merupakan bit pengatur jumlah karakter serial


f.

f.

UCPOL

: merupakan bit pengatur hubungan antara perubahan

data keluaran dan data masukan serial dengan clock

sinkronisasi. Hanya

berlaku untuk mode sinkron,untuk mode asinkron bit ini diset 0.

66

KIRIM DAN TERIMA DATA SERIAL


Untuk memahami cara pengiriman dan terima data secara serial maka buatlah
proyek baru. Jangan lupa setting chip dan clock dan kemudian setting port
sebagai berikut :
Contoh :
Setting chip ATmega 8535,clock 11.059200 kemudian ikuti langkah berikut ini :

Gambar 5.20 PORTA sebagai input dan PORTC sebagai output

Gambar 5.20 PORTC sebagai LCD dan tampilan USART

67

Lengkapi listing program sehingga seperti berikut.


.
#include <mega8535.h>
#include <stdio.h>
#include <delay.h>
unsigned char tampil[16];
.
// Declare your global variables here
void main(void)
{
// Declare your local variables here
char buff[32];
..
// LCD module initialization
lcd_init(16);
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
//bagian program utama
printf("\n PROGRAM TEST KOMUNIKASI SERIAL");
printf("\n KIRIM DATA DARI KOMPUTER KE ATmega 8535");
printf("\n TERIMA DATA DAN KEMBALIKAN DATA KE KOMPUTER");

while (1)
{
// Place your code here
int a,b=0;
for(a=0;a<16;a++)
{buff[a] = getchar(); //data kiriman dimasukan ke buff dengan array
berdasarkan nilai a
putchar(buff[a]);
sprintf(tampil,"%c",buff[a]);//buff a ditampilkan ke LCD
lcd_gotoxy(a,0);//penampilan kordinat x berdasarkan nilai a
lcd_puts(tampil);
if (buff[a]==8){a=a-2;lcd_clear();};//jika ditekan space maka a dikurangi 2
printf ("\r\ndata in des = %d\r\n",buff[a]);
}
//==============================
for(a=0;a<16;a++)
{buff[a] = getchar();
putchar(buff[a]);if (buff[a]==13){PORTA=0xFF;a=-2;}
sprintf(tampil,"%c",buff[a]);

68

lcd_gotoxy(a,1);
lcd_puts(tampil);
if (buff[a]==8){a=-2;lcd_clear();}
printf ("\r\ndata in des = %d\r\n",buff[a]);
};
}

Kemudian pilih menu setting | teminal sehingga muncul tampilan seperti


berikut :

Gambar 5.20 tampilan terminal setting


Kemudian pilih icon

kemudian

ketik

sesuatu

sesuka

anda.

Bagaimana hasilnya apakah anda dapat mengetik di lcd? Tambahkan listing


program berikut ini :

if (buff[a]==49){b++;if (b==1){PORTA=0x00;}
if (b==2){PORTA=0xFF;b=0;}}
if (buff[a]==50){b++;if (b==1){PORTA=0x55;}
if (b==2){PORTA=0xAA;b=0;} }}

kemudian tekan tombol 1 atau 2 pada keyboard, lihat apakan lednya


berkedip-kedip?

Program diatas bisa anda kembangkan lebih lanjut misalnya untuk mengontrol
actuator melalui keyboard pada computer maupun aplikasi lainnya.
Bagaimana serukan praktek mikronya..?

69

DAFTAR PUSTAKA

Wardhana lingga, belajar sendiri mikrokontroler AVR seri ATMega 8535


simulasi,hardware,dan aplikasi,penerbit andi, yogyakarta,2006.
Heryanto ary,adi wisnu,Ir, pemrograman bahasa C untuk mikrokontroler
ATmega 8535,penerbit andi,yogyakarta,2008.
Andrianto heri,pemrograman AVR ATmega 16 menggunakan bahasa C
codevision AVR ,informatika,bandung,2008.
Bejo agus,Rahasia kemudahan bahasa C dalam mikrokontroler ATmega
8535.graha ilmu,yogyakarta,2007.
Joni I made,raharjo budi
,informatika,bandung,2006.

,pemrograman

70

dan

implementasinya

Anda mungkin juga menyukai