inti modul
TRANSCRIPT
-
8/6/2019 inti modul
1/70
1
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 sendirisendiri, 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.
-
8/6/2019 inti modul
2/70
2
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.
-
8/6/2019 inti modul
3/70
3
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).
-
8/6/2019 inti modul
4/70
4
Boot Flash Section
Aplication Flash Section
$FFF
$000
Gambar 1.1
1.4.2 Memori Data
32 Registers
64 I/O Registers
Inte rna l SRAM512 x 8
$000 - $001F
$020 - $005F
$0060
$025F
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 ).
-
8/6/2019 inti modul
5/70
5
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 yaituregister EEPROM address (EEARH-EEARL), register EEPROM Data
(EEDR) dan register EEPROM Control (EECR).
$ 0 2 0 0
$ 0 0 0 0
E EP R O M
Gambar 1.3 EEPROM (Electrically Erasable Programmable Read Only Memory)
-
8/6/2019 inti modul
6/70
6
1.4.7 Perbandingan Jumlah Memori
Microcontroller AVR Memori (byte)
Jenis ICFlash( Kb )
EPROM(Kb )
SRAM(Byte )
pin 1 2K 128 128
C (AVR) pin 1 8K 512 1 K
pin 1 128 K 4 K 4 K
1.4.8 Sistem Minimum ATMega8535
Gambar 1.4 Sistem Minimum ATMega8535
-
8/6/2019 inti modul
7/70
7
1.4.9 Deskripsi Pin
Gambar 1.5 Deskripsi Pin ATMega8535
PIN KETERANGAN
1 - 8
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
:
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 )
9
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
-
8/6/2019 inti modul
8/70
8
input ke internal clock
14-21
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
:
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 )
22-29
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
:
PC7 : TOSC2 ( Timer Oscilator 2 )
PC6 : TOSC1 ( Timer Oscialtor 1 )
PC1 : SDA ( Serial Data Input/Output, PC )
PC0 : SCL ( Serial Clock, PC )
30AVCC, 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
33 40
Port A, merupakan port I/O 8-bit dua arah dengan resistor
pull-up internal, selain sebagai Port I/O 8-bit Port B juga
dapat berfungsi sebagai masukan 8 channel ADC
-
8/6/2019 inti modul
9/70
9
KEGIATAN BELAJAR 2
DASAR PEMROGRAMAN BAHASA C
2.1 Sejarah Bahasa C
B ah as a C m e ru p a ka n p e rk e m b an g a n d ari b a h a s a B C P L y a n g
d ik e m b a n g k a n o l e h M a r ti n R ic h a r d s p a d a ta h u n 1 9 6 7 . S e l a n ju t n y a b a h a s a
in i m e m b e r ik a n id e ke pa d a K en T ho m p s on y a n g k e m u d ia n
m e ng e m b a ng k an b ah a sa y an g d is eb u t b ah as a B p a da ta h un 1 9 70 .P e r k e m b a n g a n s e la n ju t ny a d a r i b a h a s a B a d a la h b a h a s a C o le h D e n n i s
R ic th ie s ek ita r ta h un 1 9 7 0-a n d i B e ll T e le ph on e L ab o ra to rie s In c.
(s ek ara n g a da la h A T & T B e ll L a bo ra to rie s) . B a ha sa C p er ta m a k ali
d ig u n ak a n d i c o m p u te r D i git al E q u ip m e n t C o r po ra tio n P D P - 1 1 y a n g
m e ng gu na ka n s ys te m op era si U N IX . H in gg a s aa t in i p en gg un aa n
b ah as a C te la h m e ra ta d i s elu ru h d un ia . H a m p ir s em u a p e rg u ru a n
tin gg i d i d un ia m e nja dik an b ah as a C s eb ag ai s ala h s atu m a ta
k u li ah w a j ib . S e l a in it u, b a n y a k b a h a s a p e m r o g ra m a n p o p u le r s e p e r ti
P H P d a n J a v a m e n g g u n a ka n s in ta k s d a s a r y a n g m i rip b a h a s a C . O le h
karen a i tu , k i ta juga s ang at per lu m em pe la ja r iny a .
2.2 Kekurangan dan Kelebihan Bahasa C
Kelebihan Bahasa C
1) Ba has a C te rsed ia ham p i r d i sem ua jen is com puter .
2) K od e baha sa C s i fa tnya po r tab le dan f leks ibe l un tuk sem ua jen is P C .
3) B ah asa C ha nya m enye d iakan 32 ka ta kunc i .
4) P roses exec u tab le p rog ram bahas a C leb ih cepa t .
5) D u k u n g a n p u s t a k a y a n g b a n y a k .
6) C ada lah baha sa yan g te rs t ruk tu r.
7) B ah asa C te rm asuk baha sa t ingka t m eneng ah
-
8/6/2019 inti modul
10/70
10
Kekurangan Bahasa C
1) B any aknya O pe ra to r se r t a f leks ib i li tas pen u l isan p rog ram kadang -kadan g
m em b ing ung kan pem aka i .
2) B ag i pem u la pa da um um nya akan kesu l i tan m engg unaka n p o in te r .
2.3 P e n g e n a l
P en gena l ( iden t if ie r ) m e rupaka n nam a y ang d ide f in i s i kan o leh p rog ram un tuk
m enun jukan iden t i t as da r i sebu ah k o ns tan ta , va r iabe l ,f ungs i dan labe l a tau t ipe
da ta khusu s .pem be r ian nam a sebu ah pe ngen a l dapa t d i ten tukan be bas se sua i
yang d i ing inkan p rog ram te tap i ha rus m em enuh i a tu ran be r iku t :
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. Misalnyasaja 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.
-
8/6/2019 inti modul
11/70
11
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 local lebih
mengguntungkan dari sisi pemakaian memori.
Contoh deklarasi variable global (dideklarasikan diluar fungsi)
char data_a;
int data_b;
long data_c=13;
-
8/6/2019 inti modul
12/70
12
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 komentaryang 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 register-
register dan penamaannya dilakukan pada file lain yang disisipkan dalam
program utama dengan sintaks sebagai berikut.
# include
Contoh :
# include
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.
-
8/6/2019 inti modul
13/70
13
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 duabilangan.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;
-
8/6/2019 inti modul
14/70
14
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 iniberbeda dengan operator logika diatas dimana pada operator logikamenghasilkan benar atau salah (Boolean) sedangkan operator bit menghasilkandata biner.
Operator keterangan
>> Pergeseran bit kekanan
& Bitwise AND
^ Bitwise XOR (exclusive OR)
| Bitwise OR
~ Bitwise NOT
2.13 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
-
8/6/2019 inti modul
15/70
15
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
Contoh :
#include
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)
-
8/6/2019 inti modul
16/70
16
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. Bentukumum 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)
-
8/6/2019 inti modul
17/70
17
pernyataan-1
else
pernyataan-2Contoh 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}
-
8/6/2019 inti modul
18/70
18
}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.
-
8/6/2019 inti modul
19/70
19
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
-
8/6/2019 inti modul
20/70
20
Perubahanadalah pernyataan yang digunakan untuk melekukan perubahan nilai
variable baik naik maupun turun setiap kali pengulangan dilakukan.
Contoh :
unsigned int a;
for (a=1,a
-
8/6/2019 inti modul
21/70
21
DDRB=B
DDRC=C
DDRD=D
}//fungsi utama
Void main (void)
{
inisialisasi_port (0xFF, 0xF0, 0x0F, 0x00);
}
-
8/6/2019 inti modul
22/70
22
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
C o d e V i s io n A V R m e r u pa k a n s a la h s a tu s o ft w a re k o m p ile r y a n g k h u s u s
d ig u n a a n u n tu k m i kr o ko n tr o le r k e lu a r g a A V R . S a l a h s a tu k e le b ih a n d a r i
s oftw are C od e V is io n A V R a da la h te rs ed ia ny a fa silita s u ntu k
m e n d o w n l o a d p r o g r a m k e m i k ro k o n t ro l e r y a n g t e la h t e ri n te g r a s i s e h i n g g a
d e ng a n d e m ik ia n C o d e V i s io n A V R in i s e la in d a p at b e rf un g si s e b ag a i
s o ftw are ko m p ile r ju g a d a p a t b e rfu n g s i s e b a g a i s o ftw are
p rog ram e r/down load e r .
Adapun menu-menu dalam Code Vision AVR adalah sebagai berikut:
3.11 Menu File
Gambar 3.1 Menu File
-
8/6/2019 inti modul
23/70
23
a. N e w, un tuk m em u la i p rog ram baru
b. O p e n , un tu k m eng am b i l a tau m em bu ka prog ram
c. S a v e , un tu k m eny im pan f i le /p rog ramd. S a v e a s , un tuk m eny im pan f i le /p rog ram
e. S a v e a l l , u n t u k m e n y i m p a n s e l u ru h f il e /p r o g ra m y a n g b e r a d a d a l a m
pro jec t seka l igus
f. C lo s e, un tuk m enu tup p rog ram
g. C l o s e P r o j e c t , un tuk m enu tup p r jec t bese r ta se lu ruh f il e - f il r e p rog ram
di da lam nya
h. C o n v e r t t o l ib r a r y , m eng kon vers i f ile p rog ram (* .c) m en jad i sebu ah f i le
pus taka/ l ib rary ( * . lib )
i. P r i n t , un tuk m ence tak p rog ram
j. P a g e S e t u p , un tuk m enga tu r se t t inga ha lam an dan p r in te r
k. E x i t , un tuk ke lua r da r i Code V is ion A V R
3.2 Menu Edit
Gambar 3.2 Menu Edit
1. U n d o , un tuk m em bata lka n pe nge d i tan te rak h i r
2. R e d o , un tuk k em ba l i ke pen ged i t an t e rakh i r yang t e lah d i und o
3. C u t, un tuk m em o tong bag ian t e r ten tu d a r i p rog ram
-
8/6/2019 inti modul
24/70
24
4. C o p y , un tuk m endup l ikas i ba g ian p rog ram
5. P a s t e , m ena m p i lkan f i le ya ng te lah d i cop y
6. D e l e t e , un tuk m engh apus bag ian t e r t en tu da r i p rog ram7. S e le ct A l l , d ig un a ka n un tuk m e m i l i h se m ua t ek s
8. P rin t S e le c t io n, d i g u n a k a n u n t u k m e n g a t u r p r i n t e r
9. In d e n t B lo c k, d i g u n a k a n u n t u k m e m b u a t s a t u b l o k t e k s g e s e r k e
ka na n (m as uk ke da la m )
10. U n i n d e n t B l o c k , d i g u n a k a n u n t u k m e m b u a t s a t u b l o k t e k s g e s e r
k e k i r i
11. F in d , F in d N e x t d a n F in d In F i le s , m e r u p a k a n f a s i l i t a s u n t u k
m e nc a r i ka ta a ta u f i l e
12. R e p la c e, d i g u n a k a n u n t u k m e n u k a r s e b u a h k a t a d e n g a n k a t a l a i n
3.3 Menu Project
Gambar 3.3 Menu Project
1. C h e c k S y n t a x , d i g u n a k a n u n t u k m e l a k u k a n p e n g e c e k a n a d a t id a k n y a
kesa lahan p rog ram
2. C o m pile, d ig u n a a n u n tu k m e n g k o m p il e p r og r a m . P r o s e s k o m p il e
in i hanya m engha s i l kan f il e asem b le r sa ja ( * .asm )
3. M a k e , d i g u n a k a n u n t u k m e n g k o m p i le s e k a l ig u s m e n g h a s i lk a n k o d e
m e s i n p r o g r a m . P r o s e s m a k e i n i m e n g h a s i lk a n b e b e r a p a f il e a n t a ra
la in f i le * .as m , * . lis t , * .ob j , * .hex , * . rom dan * .eep.
4. S t o p C o m p i la t i o n , d igunaka n un tuk m enghe n t i kan p rose s ko m p i le
5. N o t e s , d igunaka n un tuk m em be r i kan ca ta tan pada p ro jec t
6. C o n f i g u r e s , d igunaka n un tuk m enga tu r p ro jec t
F i l e s , u n tu k m e n a m b a h k a n f il e- fil e p r o gr a m k e d a la m p r o je c t a ta u
m engha pus f il e - fi le p rog ram da r i p ro jec t
-
8/6/2019 inti modul
25/70
25
C C o m p i l e r , d igunakan un tuk m enga tu r kom p i le r
7. C o d e G e n e ra t io n , d ig u na ka n u ntu k m e n en tu ka n s pe sif ik as i
d a n fit ur y a n g d im i lik i o le h m ik r o ko n tr o le r 8. M e s s a g e s , d igunaka n un tuk m enga tu r t am p i l t idakn ya bebe rap a pe san
pe r inga tan
9. G l o b a l l y # d e f i n e , d igunaka n un tuk m ende k la ras ikan penge na l g loba l
10. P a t h s , d i g u n a k a n u n t u k m e n e n t u k a n d i re k t o ri -d ir e k t o ri f il e p r o g r a m
( *. c ), f il e h e a d e r ( *. h ) d a n f il e p u s t a k a ( *. li b ) y a n g d i b u tu k a n d a l a m
pro jec t
1 1 . A f t e r M a k e , d i g u n a k a n u n t u k m e n g a t u r p r o s e s y a n g a k a n d i la k u k a n
sete lah m ake
3.4 Menu Tools
Gambar 3.4 Menu Tools
1. C o d e W i z a r d A V R , d i g u n a k a n u n t u k m e m b a n g k i tk a n k o d e p r o g r a m
sec ara o tom a t is
2. D e b b u g e r , d ig u n ak a n u n tu k p e ng e c ek a n lis tin g p ro g ra m d a la m
a ss e m b le r. P ro gr am in i h an ya b is a d ija la n ka n jik a k ita s ud a h
m e n de fin is ik a n t er le b ih d a h ulu p ro g ra m d e b bu g er b e se rta le ta k
d i rektor inya m e la lu i m enu se tt in g d e b b u g e r
3. C h i p P r o g r a m e r , d ig u n a ka n u n tu k m e n d ow n lo a d p ro g ra m y a n g
te la h d ik o m p ile k e d a la m m ik ro k on tr ole r d e n ga n m e n gg u n ak a n
h a r d w a r e t e rt e n tu y a n g t e la h d i d e fi n is i k a n o l e h C d e V i s io n A V R
4. T e r m i n a l , d ig u n a k a n u n tu k m e m b u k a t er m in a l k o m u n ik a s i s e ri al
U S A R T
5. C o n f i g u r e , d ig u na k an u ntu k m e n am b a hk an a ta u m e ng h ap u s
p ro gra m a plik as i la in ke da la m m e nu to ols . C on to h A nd a
-
8/6/2019 inti modul
26/70
26
m e n a m b a h k a n m e n u n o tp a d d e n g a n c a ra : to o ls c on fig ur e
a d d [d ir e kt o r i n o tp a d ]
3.5 Menu Setting
Gambar 3.5 Menu Setting
1. G e n e r a l , d igunaka n un tuk peng a tu ran seca ra um um . M e la lu i m enu in i
A n d a d ap a t m em il ih ta m pil a ta u ti d a k n y a to o lb a r, n a v ig a to r, p e s a n d a n
in form as i
2. E d i t o r , d ig u na k a n u n tu k p e n ga tu ra n e d it or p ro g ra m . K ita d a p at
m e n en tu k an w a rn a -w a r na te x t y a n g b e rb e d a u n tu k m e m b a n tu
m em pe rm udah da lam m enge cek kesa lahan penu l isan p rog ram
3. A s s e m b le r , d ig u n a k a n u n tu k m e n e n tu k a n a p a k a h f il e * .a s m a ta u
* .l s t y a n g a k a n t e rb u k a s e c a r a o t o m a t is p a d a s a a t te r ja d i e rr o r p a d a
saa t k om p i le
4. D e b b u g e r , u n tu k m e n g e c e k k e s a la h a n - ke s a la h a n p r o gr a m d a la m
a s s e m b le r d e n g a n m e n g g u n a ka n s o ft w a re k o m p ile r la i n s e p e rt i
m i sa lnya A V RS tud io
5. P r o g r a m m e r , d ig un ak an u ntu k m e ne ntu ka n je nis h ard w are
y a n g d i g u n a k a n a p a b i la p r o s e s d o w n l o a d p r o g r a m k e m i k ro k o n t r o le r
d i la k u k a n o l e h C V A V R
6. T e r m i n a l , d ig u n a k a n u n tu k m e n g s tu r m o d e fo r m a t d a ta t e rm i na l
k om u nik as i s era il U A R T p ad a C V A V R a n ta ra l a in p ort y a ng
d igunakan , leba r da ta , b i t s t op , pa r i tas dan la in - la in .
-
8/6/2019 inti modul
27/70
27
3.6 Codevision AVR Chip Programer
Salah satu kelebihan dari codevision AVR adalah tersedianya fasilitas untuk
mendownload program ke mikrokontroler yang telah terintegrasi sehinggadengan 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
-
8/6/2019 inti modul
28/70
28
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.
-
8/6/2019 inti modul
29/70
29
Tabel 4.1. Nilai Bilangan Desimal dan Biner
Kolom desimal Kolom biner
C102 = 100
(ratusan)
B101 = 10
(puluhan)
A100 = 1
(satuan)
C22 = 4
(empatan)
B21 = 2
(duaan)
A20 = 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
Kolom binerBiner
32 16 8 4 2 1
Desimal
111010111100110111110010
----1
--111
11100
10010
11011
01110
8 + 4 + 2 = 148 + 2 + 1 = 1116 + 8 + 1 = 2516 + 4 + 2 + 1 = 2332 + 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
-
8/6/2019 inti modul
30/70
30
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, sisa 510 = 516
13/16 = 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
-
8/6/2019 inti modul
31/70
31
Sehingga, bilangan heksadesimal 2A5C akan diubah menjaid bilngan biner 0010
1010 0101 1100.
Sebaliknya, bilangan biner dapat diubah menjadi bilangan heksadesimaldengan 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/1000.2 = 2 x 0.1 = 2 x 10-1, dan seterusnya.
Cara yang sama juga bisa digunakan untuk menyajikan bilangan biner pecahan.
Sehingga,
0.12 = 2-1 = , dan
0.012 = 2-2- = 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,
-
8/6/2019 inti modul
32/70
32
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 diperolehmerupakan 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
-
8/6/2019 inti modul
33/70
33
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 tersebut. Untuk lebih
jelasnya.langsung saja kita coba input dan output.
-
8/6/2019 inti modul
34/70
34
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 chipnyadan setting cloknya 11.059200 (sesuai denganX-tall yang digunakan)
Gambar 5.2 PORTB sebagai output
-
8/6/2019 inti modul
35/70
-
8/6/2019 inti modul
36/70
36
PROSES MENDOWNLOAD
Untuk proses mendownload bisa langsung kita lakukan dengan memilih menu
project make atau dengan mengklik icon namun sebelum itu kita harusmenyettingnya terlebih dahulu dengan memilih menu project configure
aftermake kemudian klik program the chip 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
-
8/6/2019 inti modul
37/70
37
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
#include
..............
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,downloaddan perhatikan hasilnya, apakah LED kelap-kelip...?
LED 2 (Mengontrol nyala LED dengan bilangan Biner)
#include
#include
..........
-
8/6/2019 inti modul
38/70
38
..........
while (1)
{
// Place your code herePORTB=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,downloaddan perhatikan hasilnya, apakah LED bergeser ke kanan.?
LED 4 (Mengontrol nyala LED dengan operator BITWISE)
............
#include
#include
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=1;//geser ke kanan 1 kali
PORTB=~a;//diinvert supaya hanya satu led yang nyala
if(a==0)//jika variabel a==0
{
a=1
-
8/6/2019 inti modul
39/70
39
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 #include
#define pin0 PORTA.0
#define pin1 PORTA.1
#define pin2 PORTA.2
.............
while (1)
{
-
8/6/2019 inti modul
40/70
40
// 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,downloaddan 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 // blok header
#include // 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-blinkkan....................!!
-
8/6/2019 inti modul
41/70
41
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-alatelektronika 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 Compileratau melalui deskop klik lambang Codevision.
Kemudian pillih File|New|pilih File Type project.
-
8/6/2019 inti modul
42/70
42
Kemudian muncul tampilan konfirmasi, dan menanyakan apakah akan
menggunakan codewizard, pilih Yes.
Untuk setting IC(Chip yang digunakan) pilih Chip, isi informasi sebagai berikut :
a b
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 codedalam 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
..
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
-
8/6/2019 inti modul
43/70
43
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
#include
.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, downloaddan perhatikan hasilnya. Coba dengan stringdan
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
-
8/6/2019 inti modul
44/70
44
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 clockdan kemudian setting PORT seperti gambar berikut :
A B
Gambar 5.8 A untuk setting push botton di PORTAGambar 5.8 B untuk setting LED di PORTB
Kemudian File | Generate Save and Exit, simpan dengan nama filepush_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
#include #define saklar1 PINA.0
#define saklar2 PINA.1
#define saklar7 PINA.7
#define saklar4 PINA.3
#define led PORTB
..............
while (1)
-
8/6/2019 inti modul
45/70
45
{
// Place your code here
if (saklar1==0){ //jika saklar 1 ditekan
PORTB=0x00;delay_ms(100); //maka led brucak-brinongPORTB=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 2blinkPORTB=0b00110011;delay_ms(100);
}
PORTB=0xFF; //jika tidak maka led mati
};
}
Kompilasi,downloaddan 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.
-
8/6/2019 inti modul
46/70
46
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 :
-
8/6/2019 inti modul
47/70
47
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
#include
#include
unsigned int adc;
unsigned char nilai[16];
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTC
#endasm
#include
#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
-
8/6/2019 inti modul
48/70
48
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 downloaddan 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;
}
-
8/6/2019 inti modul
49/70
49
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
-
8/6/2019 inti modul
50/70
50
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
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
-
8/6/2019 inti modul
51/70
-
8/6/2019 inti modul
52/70
52
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 yangbersangkutan, 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
#include
.
//declarate your global variable here
char buf [33];
-
8/6/2019 inti modul
53/70
53
eeprom int alfa;//pemesanan tempat untuk variable alfa di EEPROM
void main (void)
{
//declarate your local variables hereInt 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 hasilpenulisan yang dilakukan oleh program saat berjalan.
-
8/6/2019 inti modul
54/70
54
5.9 TIMER DAN COUNTER
Sebelum menggunakan timer/counter. Harap diperhatikan konfigurasi bit
ATmega 8535. kesalahan konfigurasi dapat menyebabkan timer atau countertidak 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 langsungmenyesetnya 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. Prescaler10 bit untuk timer
f. Membangkitkan interupsi saat timer overflowdan 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
-
8/6/2019 inti modul
55/70
55
f. Dapat menghasilkan pulsa PWM dengan glich free dan periode yang
bisa dirubah-ubah
g. Frequence generatorh. 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 :
-
8/6/2019 inti modul
56/70
56
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 hereif (PINB==0){
PORTB=0xFF
}
else
{
PORTB=0x00;
}}
Kompilasi,downloaddan 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
-
8/6/2019 inti modul
57/70
57
if (PINB==0){PORTB=0xFF
}else{ PORTB=0x00;}}
Kita hanya memanfaatkan interupsi timer 1 overflow. Program ini akanmenambahkan 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 ?
COUNTERUntuk 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.
-
8/6/2019 inti modul
58/70
58
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 edgeke 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 0-3
nyala dan LED 4-7 padam.ingat active high dan active low). Demikian juga saat
PINC sebelumnya berlogika 1 maka akan diset ke logika 0.
Kompilasi,downloaddan 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
-
8/6/2019 inti modul
59/70
59
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 lowto highdari sinyal dan berakhir
pada transisi berikutnya. Selama satu siklus, jika waktu sinyal pada keadaan high
sama dengan low maka dikatakan sinyal mempunyai dutycircle 50%.
-
8/6/2019 inti modul
60/70
60
Gambar 5.15 duty circleVS Register OCR pada past PWM
Semakin besar nilai data pada register OCR ,maka semakin tinggi juga nilai rata-
rata tegangan DC, contoh semakin besardutycirclesemakin 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
#include
#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;
-
8/6/2019 inti modul
61/70
61
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code herex++;
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,downloaddan perhatikan LEDnya.
-
8/6/2019 inti modul
62/70
62
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,clockuntuk shift registerikut
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.
-
8/6/2019 inti modul
63/70
63
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
o logic low (0)--+3V s/d +15V
TTL
o logic high (1) +2 s/d +5V
o 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
1 CD Received line signal
detector
-
-
8/6/2019 inti modul
64/70
64
2 RXD Received data out
3 TXD Transmitted data In
4 DTR Data terminal ready In5 GND Signal ground -
6 DSR Data set ready out
7 RTS Request to send In
8 CTS Clear to send out
9 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 :
-
8/6/2019 inti modul
65/70
65
Table rumus perhitngan UBRR
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
Mode Operasi Rumus Nilai UBRR
asinkron mode kecepatan normal
(U2X=0)
UBRR= fosc -1
16x Baud rate
asinkron mode kecepatan ganda
(U2X=1)
UBRR= fosc -1
8x Baud rate
sinkron UBRR= fosc -1
2x Baud rate
-
8/6/2019 inti modul
66/70
66
g. UCSZ0 menentukan ukuran karakter serial yang dikirimkan
Penentuan ukuran karakter
UCSRC (USART control and status register C )
UCSRC merupakan register 8 bityang digunakan untuk mengatur mode dan
kecepatan komunikasi serial yang dilakukan.komposisinya seperti gambar
dibawah ini.
a. URSEL : Merupakan bitpemilih akses antara UCSRC DAN UBBR
b. UMSEL : merupakan bit pemilih mode komunikasi serial antara
sinkron dan asinkron.
c. c. UPM [1..0] : merupakan bitpengatur 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.
UCSZ[20] Ukuran karakter bit
000 5
001 6
010 7
011 8
100-110 Tidak dipergunakan
111 9
-
8/6/2019 inti modul
67/70
67
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 portsebagai 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
-
8/6/2019 inti modul
68/70
68
Lengkapi listing program sehingga seperti berikut.
.
#include #include
#include
unsigned char tampil[16];
.
// Declare your global variables here
void main(void)
{
// Declare your local variables here
char buff[32];
..
// LCD module initializationlcd_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
-
8/6/2019 inti modul
69/70
-
8/6/2019 inti modul
70/70
DAFTAR PUSTAKA
Wardhana lingga, belajar sendiri mikrokontroler AVR seri ATMega 8535simulasi,hardware,dan aplikasi,penerbit andi, yogyakarta,2006.
Heryanto ary,adi wisnu,Ir, pemrograman bahasa C untuk mikrokontrolerATmega 8535,penerbit andi,yogyakarta,2008.
Andrianto heri,pemrograman AVR ATmega 16 menggunakan bahasa Ccodevision AVR ,informatika,bandung,2008.
Bejo agus,Rahasia kemudahan bahasa C dalam mikrokontroler ATmega8535.graha ilmu,yogyakarta,2007.
Joni I made,raharjo budi ,pemrograman C dan implementasinya,informatika,bandung,2006.