Top Banner
UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat, Tamantirto, Kasihan, Bantul, Yogyakarta 55183 Telp. 0274-387656 (Hunting) Fax. 0274-381656 www.umy.ac.id www.iswantodosen.blogspot.com DATA0 P7 + C8 1uF 16V DATA7 TIM0 T1 P3 DATA6 A C D3 1N4002 R1 470 GND 1 2 3 4 5 JP4 HEADER 5 1 2 D0 LED 5 9 4 8 3 7 2 6 1 P1 SERIAL COM P6 P1 ADD10 TIM1 ADD11 WR X1 12MHz INT0 VCC TX1 ADD12 RST 9 XTAL2 18 XTAL1 19 PSEN 29 ALE/PROG 30 EA/VPP 31 P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27 P2.7/A15 28 P3.0/RXD 10 P3.1/TXD 11 P3.2/INTO 12 P3.3/INT1 13 P3.4/TO 14 P3.5/T1 15 P3.6/WR 16 P3.7/RD 17 P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32 U4 AT89C51 ADD9 RD DATA4 + C9 1uF 16V DATA5 1 2 J1 POWER + C5 1uF 16V R2 4K7 C3 10u RX1 C7 30p ALE P0 S1 RESET R1IN 13 R2IN 8 T1IN 11 T2IN 10 C+ 1 C1- 3 C2+ 4 C2- 5 V+ 2 V- 6 R1OUT 12 R2OUT 9 T1OUT 14 T2OUT 7 U6 MAX232 RST R1 VCC INT1 ADD8 ADD13 DATA2 PSEN DATA3 C6 30p VCC P5 P4 P2 DATA1 ADD14 ADD15 + C4 1uF 16V PELATIHAN MIKROKONTROLER ATMEGA8535
121

pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

Aug 31, 2018

Download

Documents

vunga
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat, Tamantirto, Kasihan, Bantul, Yogyakarta 55183 Telp. 0274-387656 (Hunting) Fax. 0274-381656

www.umy.ac.id www.iswantodosen.blogspot.com

DATA0

P7

+ C8

1uF 16V

DATA7

TIM0

T1

P3DATA6A

C

D3

1N4002

R1

470

GND

12345

JP4

HEADER 5

1 2D0

LED

594837261

P1

SERIAL COM

P6

P1

ADD10

TIM1

ADD11

WRX1

12MHz

INT0

VCC

TX1

ADD12

RST9

XTAL218

XTAL119 PSEN29ALE/PROG 30

EA/VPP31

P1.01

P1.12

P1.23

P1.34

P1.45

P1.56

P1.67

P1.78P2.0/A8

21

P2.1/A922

P2.2/A10 23

P2.3/A1124

P2.4/A12 25

P2.5/A13 26

P2.6/A1427

P2.7/A15 28

P3.0/RXD10 P3.1/TXD11

P3.2/INTO12

P3.3/INT113

P3.4/TO14

P3.5/T115

P3.6/WR16P3.7/RD 17

P0.0/AD0 39

P0.1/AD1 38

P0.2/AD237

P0.3/AD3 36

P0.4/AD435

P0.5/AD534

P0.6/AD6 33

P0.7/AD732

U4

AT89C51

ADD9

RD

DATA4

+

C91uF 16V

DATA5

12

J1

POWER

+ C5

1uF 16V

R24K7

C310u

RX1

C730p

ALE

P0

S1RESET

R1IN13 R2IN8

T1IN11

T2IN10

C+1

C1-3

C2+4

C2- 5

V+2 V- 6

R1OUT 12

R2OUT 9T1OUT14 T2OUT7

U6

MAX232

RST

R1

VCC

INT1

ADD8

ADD13

DATA2

PSEN

DATA3

C630p

VCC

P5P4

P2

DATA1

ADD14ADD15

+ C4

1uF 16V

PELATIHAN MIKROKONTROLER

ATMEGA8535

Page 2: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

i

Page 3: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 1 -

PENGENALAN BAHASA C

1. PENDAHULUAN

Bahasa C pertama kali digunakan di komputer Digital Equipment Corporation

PDP-11 yang menggunakan sistem opersi UNIX C adalah bahasa yang standar, artinya

suatu program yang ditulis dengan bahasa C tertentu akan dapat dikonversi dengan

bahasa C yang lain dengan sedikit modifikasi. Standar bahasa C yang asli adalah standar

dari UNIX. Patokan dari standar UNIX ini diambil dari buku yang ditulis oleh Brian

Kerningan dan Dennis Ritchie berjudul “The C Programming Language”, diterbitkan

oleh Prentice-Hall tahun 1978. Deskripsi C dari Kerninghan dan Ritchie ini kemudian

kemudian dikenal secara umum sebagai “K dan R C”

2. PENULISAN PROGRAM BAHASA C

Program Bahasa C tidak mengenal aturan penulisan di kolom tertentu, jadi bisa

dimulai dari kolom manapun. Namun demikian, untuk mempermudah pembacaan

program dan untuk keperluan dokumentasi, sebaiknya penulisan bahasa C diatur

sedemikian rupa sehingga mudah dan enak dibaca.

Berikut contoh penulisan Program Bahasa C:

#include <mega8535.h> #include <delay.h> main () { ……… ……… }

Page 4: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 2 -

Program dalam bahasa C selalu berbentuk fungsi seperti ditunjukkan dalam main

(). Program yang dijalankan berada di dalam tubuh program yang dimulai dengan tanda

kurung buka { dan diakhiri dengan tanda kurung tutup }. Semua yang tertulis di dalam

tubuh program ini disebut dengan blok.

Tanda () digunakan untuk mengapit argumen suatu fungsi. Argumen adalah

suatu nilai yang akan digunakan dalam fungsi tersebut. Dalam fungsi main diatas tidak

ada argumen, sehingga tak ada data dalam (). Dalam tubuh fungsi antara tanda { dan

tanda } ada sejumlah pernyataan yang merupakan perintah yang harus dikerjakan oleh

prosesor. Setiap pernyataan diakhiri dengan tanda titik koma ;

Baris pertama #include <…> bukanlah pernyataan, sehingga tak diakhiri

dengan tanda titik koma (;). Baris tersebut meminta kompiler untuk menyertakan file

yang namanya ada di antara tanda <…> dalam proses kompilasi. File-file ini (ber-

ekstensi .h) berisi deklarasi fungsi ataupun variable. File ini disebut header. File ini

digunakan semacam perpustakaan bagi pernyataan yang ada di tubuh program.

#include merupakan salah satu jenis pengarah praprosesor (preprocessor

directive). Pengarah praprosesor ini dipakai untuk membaca file yang di antaranya

berisi deklarasi fungsi dan definisi konstanta. Beberapa file judul disediakan dalam C.

File-file ini mempunyai ciri yaitu namanya diakhiri dengan ekstensi .h. Misalnya pada

program #include <stdio.h> menyatakan pada kompiler agar membaca file bernama

stdio.h saat pelaksanaan kompilasi.Bentuk umum #include:

#include “namafile”

Bentuk pertama (#include <namafile>) mengisyaratkan bahwa pencarian file

dilakukan pada direktori khusus, yaitu direktori file include. Sedangkan bentuk kedua

(#include “namafile”) menyatakan bahwa pencarian file dilakukan pertama kali pada

Page 5: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 3 -

direktori aktif tempat program sumber dan seandainya tidak ditemukan pencarian akan

dilanjutkan pada direktori lainnya yang sesuai dengan perintah pada sistem operasi.

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

Tabel 2.1 Bentuk Tipe data:

No Tipe Data Ukuran Range (Jangkauan) 1 Char 1 byte -128 s/d 127 2 Int 2 byte -32768 s/d 32767 3 Unsigned int 2 byte 0 s/d 65535 4 Long Int 4 byte -2147483648 s/d 2147483648 5 Unsigned Long int 4 byte 0 s/d 4294967296 6 Float 4 byte -3.4E-38 s/d 3.4E+38 7 Double 8 byte 1.7E-308 s/d 1.7E+308 8 Long Double 10 byte 3.4E-4932 s/d 1.1E+4932 9 Char 1 byte -128 s/d 127 10 Unsigned char 1 byte 0 s/d 255

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

Contoh konstanta : 50; 13; 3.14; 4.50005; ‘A’; ‘Bahasa C’.

Page 6: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 4 -

5. 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 oleh pemrogram dengan aturan sebagai berikut :

• Terdiri dari gabungan huruf dan angka dengan karakter pertama harus berupa huruf.

Bahasa C bersifat case-sensitive artinya huruf besar dan kecil dianggap berbeda.

• Tidak boleh mengandung spasi.

• Tidak boleh mengandung symbol-simbol khusus, kecuali garis bawah (underscore).

Yang termasuk symbol khusus yang tidak diperbolehkan antara lain : $, ?, %, #, !, &,

*, (, ), -, +, = dsb

• Panjangnya bebas, tetapi hanya 32 karakter pertama yang terpakai.

6. DEKLARASI

Deklarasi diperlukan bila kita akan menggunakan pengenal (identifier) dalam program.

Identifier dapat berupa variable, konstanta dan fungsi.

6.1. DEKLARASI VARIABEL

Bentuk umum pendeklarasian suatu variable adalah : Nama_tipe nama_variabel;

Contoh :

int x; // Deklarasi x bertipe integer

6.2. DEKLARASI KONSTANTA

Dalam bahasa C konstanta dideklarasikan menggunakan preprocessor #define.

Contohnya :

#define PHI 3.14 #define nim “0111500382”

Page 7: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 5 -

6.3. DEKLARASI FUNGSI

Fungsi merupakan bagian yang terpisah dari program dan dapat diaktifkan atau

dipanggil di manapun di dalam program. Fungsi dalam bahasa C ada yang sudah

disediakan sebagai fungsi pustaka seperti printf(), scanf(), getch() dan untuk

menggunakannya tidak perlu dideklarasikan.

Fungsi yang perlu dideklarasikan terlebih dahulu adalah fungsi yang dibuat oleh

programmer. Bentuk umum deklarasi sebuah fungsi adalah :

Tipe_fungsi nama_fungsi(parameter_fungsi);

Contohnya :

float luas_lingkaran(int jari); void tampil(); int tambah(int x, int y);

7. OPERATOR

7.1. OPERATOR PENUGASAN

Operator penugasan (Assignment operator) dalam bahasa C berupa tanda sama dengan

(“=”).

7.2. OPERATOR ARITMATIKA

Bahasa C menyediakan lima operator aritmatika, yaitu :

• .* : untuk perkalian

• / : untuk pembagian

• % : untuk sisa pembagian (modulus)

• + : untuk penjumlahan

• - : untuk pengurangan

Page 8: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 6 -

7.2.1. PERKALIAN

#include <mega8535.h> #include <delay.h> void main() { int bil1; int bil2; DDRB=0xFF; PORTB=0xFF; bil1=4; bil2=2; PORTB=bil1*bil2; }

7.2.2. PEMBAGIAN

#include <mega8535.h> #include <delay.h> void main() { int bil1; int bil2; DDRB=0xFF; PORTB=0xFF; bil1=10; bil2=2; PORTB=bil1/bil2; }

7.2.3. MODULUS

#include <mega8535.h> #include <delay.h> void main() { int bil1; int bil2; DDRB=0xFF; PORTB=0xFF; bil1=13;

Page 9: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 7 -

bil2=2; PORTB=bil1%bil2; }

7.2.4. PENJUMLAHAN

#include <mega8535.h> #include <delay.h> void main() { int bil1; int bil2; DDRB=0xFF; PORTB=0xFF; bil1=0x30; bil2=0x20; PORTB=bil1+bil2; }

7.2.5. PENGURANGAN

#include <mega8535.h> #include <delay.h> void main() { int bil1; int bil2; DDRB=0xFF; PORTB=0xFF; bil1=0x30; bil2=0x20; PORTB=bil1-bil2; }

7.3. OPERATOR HUBUNGAN (PERBANDINGAN)

Operator hubungan digunakan untuk membandingkan hubungan antara dua buah

operand /sebuah nilai atau variable. Operasi majemuk seperti pada tabel dibawah ini:

Page 10: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 8 -

Tabel 2.2 Operator Hubungan

Operator Arti Contoh

< Kurang dari X<Y Apakah X kurang dari Y

<= Kurang dari sama dengan X<=Y Apakah X Kurang dari sama dengan Y

> Lebih dari X>Y Apakah X Lebih dari Y

>= Lebih dari sama dengan X==Y Apakah X Lebih dari sama dengan Y

== Sama dengan X==Y Apakah X Sama dengan Y

!= Tidak sama dengan X!= Y Apakah X Tidak sama dengan Y

7.4. 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 :

• && : Logika AND (DAN)

• || : Logika OR (ATAU)

• ! : Logika NOT (INGKARAN)

Operasi AND akan bernilai benar jika dua ekspresi bernilai benar. Operasi OR akan

bernilai benar jika dan hanya jika salah satu ekspresinya bernilai benar. Sedangkan

operasi NOT menghasilkan nilai benar jika ekspresinya bernilai salah, dan akan bernilai

salah jika ekspresinya bernilai benar.

#include <mega8535.h> #include <delay.h> void main() { char in1; char in2; DDRB=0xFF; PORTB=0xFF; in1=0xf0;

Page 11: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 9 -

in2=0x40; if((in1==0xf0) && (in2==0x40)) {PORTB = 0x2A;} }

7.5. OPERATOR BITWISE (MANIPULASI PER BIT)

Operator bitwise digunakan untuk memanipulasi bit-bit dari nilai data yang ada di

memori.

Operator bitwise dalam bahasa C di SDCC adalah sebagai berikut :

• << : Pergeseran bit ke kiri

• >> : Pergeseran bit ke kanan

• & : Bitwise AND

• ^ : Bitwise XOR (exclusive OR)

• | : Bitwise OR

• ~ : Bitwise NOT

• Pertukaran Nibble dan Byte

• Mengambil Bit yang paling Berbobot

7.5.1. OPERASI GESER KIRI (<<)

Operasi geser kiri merupakan operasi yang akan menggeser bit-bit kekiri

sehingga bit 0 akan berpindah ke bit 1 kemudian bit 1 akan berpindah ke bit 2 dan

seterusnya. Operasi geser kiri membutuhkan dua buah operan disebelah kiri tanda <<

merupakan nilai yang akan digeser sedangkan disebelah kanannya merupakan jumlah

bit penggerseran.

Contohnya :

Datanya = 0x03 << 2 ; // 0x03 digeser kekiri 2 bit hasilnya ditampung di datanya a << = 1 // Isi variabel A digeser ke kiri 1 bit hasilnya

// kembali disimpan di A

Page 12: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 10 -

#include <mega8535.h> #include <delay.h> void main() { char a, led; DDRB=0xFF; PORTB=0xFF; led=0x01; for (a=0;a<8;a++) { PORTB=led; led=led <<1; } }

7.5.2. OPERASI GESER KANAN(>>)

Operasi geser kiri merupakan operasi yang akan menggeser bit-bit kekanan

sehingga bit 7 akan berpindah ke bit 6 kemudian bit 6 akan berpindah ke bit 5 dan

seterusnya. Operasi geser kanan membutuhkan dua buah operan disebelah kiri tanda <<

merupakan nilai yang akan digeser sedangkan disebelah kanannya merupakan jumlah

bit penggerseran.

Contohnya :

Datanya = 0x03 >> 2 ; // 0x03 digeser kekiri 2 bit hasilnya ditampung di datanya a >> = 1 // Isi variabel A digeser ke kiri 1 bit hasilnya

// kembali disimpan di A

#include <mega8535.h> #include <delay.h> void main() { char a, led; DDRB=0xFF; PORTB=0xFF; led=0x01; for (a=0;a<8;a++) { PORTB=led; led=led <<1; } }

Page 13: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 11 -

7.5.3. OPERASI BITWISE AND ( & )

Operasi bitwise AND akan melakukan operasi AND pada masing-masing bit, sehingga

bit 0 akan dioperasikan dengan bit 0 dan bit 1 dan seterusnya.

Contohnya :

Hasil = 0x03 & 0x31; Operasinya 0x03 = 00000011 0x31 = 00110001 __________________________________________

Hasil 0x01 = 00000001

#include <mega8535.h> #include <delay.h> void main() { char a=0x03; char b=0x31; DDRB=0xFF; PORTB=0xFF; PORTB= a & b ; }

7.5.4. OPERASI BITWISE OR ( | )

Operasi bitwise OR akan melakukan operasi OR pada masing-masing bit, sehingga bit 0

akan dioperasikan dengan bit 0 dan bit 1 dan seterusnya.

Contohnya :

Hasil = 0x05 | 0x31; Operasinya 0x01 = 00000001 0x31 = 00110001 __________________________________________

Hasil 0x01 = 00110001

#include <mega8535.h> #include <delay.h> void main() { char a=0x03; char b=0x31; DDRB=0xFF; PORTB=0xFF; PORTB= a | b ; }

Page 14: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 12 -

7.5.5. OPERASI BITWISE XOR( ^ )

Operasi bitwise XOR akan melakukan operasi XOR pada masing-masing bit, sehingga

bit 0 akan dioperasikan dengan bit 0 dan bit 1 dan seterusnya.

Contohnya :

Hasil = 0x02 ^ 0xFA; Operasinya 0x02 = 00000010 0xFA = 11111010 __________________________________________

Hasil 0x01 = 11111000

#include <mega8535.h> #include <delay.h> void main() { char a=0x02; char b=0xFA; DDRB=0xFF; PORTB=0xFF; PORTB=a ^ b ; }

7.5.6. OPERASI BITWISE NOT( ~ )

Operasi bitwise XOR akan melakukan operasi XOR pada masing-masing bit, sehingga

bit 0 akan dioperasikan dengan bit 0 dan bit 1 dan seterusnya.

Contohnya : Hasil = ~ 0x31; 0x31 = 00110001 Hasil ~0x31 = 11001110

#include <mega8535.h> #include <delay.h> void main() { char a= 0x31; DDRB=0xFF; PORTB=0xFF; PORTB= ~a; }

Page 15: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 13 -

7.5.7. PERTUKARAN NIBBLE DAN BYTE

Pertukaran nibble dalam bahasa C dikenali SDCC dengan bentuk pernyataan

sebagai berikut ini:

volatile unsigned char i: i = (( i << 4) | ( i >> 4)); //pertukaran nibble

Dan pernyataan sebagai berikut ini sebagai pertukaran byte:

volatile unsigned char j: j = (( j << 8) | ( j >> 8)); //pertukaran byte

#include <mega8535.h> #include <delay.h> union kint { unsigned char a[2]; unsigned int b; }; void main() { union kint tmp; volatile unsigned char i=0x37; volatile unsigned int j=0x9973; DDRA=0xFF; DDRB=0xFF; DDRD=0xFF; PORTA=i; tmp.b=j; PORTD= tmp.a[1]; PORTB=tmp.a[0]; i= ((i<<4) | (i>>4)); //pertukaran nibble j= ((j<<8) | (j>>8)); //pertukaran byte PORTA=i; //I dikeluarkan ke Port 1 tmp.b=j; PORTB=tmp.a[0]; PORTD=tmp.a[1]; }

7.5.8. MENGAMBIL BIT YANG PALING BERBOBOT

Untuk mendapatkan bit yang paling berbobot (MSB) untuk tipe long, short, int, dan

char maka dapat dilakukan dengan pertanyaan berikut:

Page 16: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 14 -

Volatile unsigned char gint; Unsigned char hop; Hop = (gint >> 7) & 1 // mengambil MSB

#include <mega8535.h> #include <delay.h> void main() { volatile unsigned char gint=0xaa; volatile unsigned char hob; unsigned a; DDRB=0xFF; for(a=0;a<8;a++) { hob=(gint>>7) &1; PORTB=hob; gint=((gint<<1)|(gint>>7)); } }

7.6. OPERATOR UNARY

Operator Unary merupakan operator yang hanya membutuhkan satu operand saja.

Dalam bahasa C terdapat beberapa operator unary, yaitu :

Tabel 2.3 Operasi Unary

Page 17: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 15 -

Contohnya :

n = 0 Jum = 2 * ++n; Jum = 2 * n++;

#include <mega8535.h> #include <delay.h> void main() { int a; DDRB=0xFF; for(a=0;a<20;a++) PORTB=a; }

7.7. OPERATOR MAJEMUK

Operator majemuk terdiri dari dua operator yang digunakan untuk menyingkat

penulisan. Operasi majemuk seperti pada tabel dibawah ini

Tabel Operasi majemuk

Operator Contoh Kependekan dari += Counter +=1; Counter = counter + 1 -= Counter -=1 Counter = counter - 1 *= Counter *=1 Counter = counter * 1 /= Counter /=1 Counter = counter / 1 %= Counter %=1 Counter = counter % 1 <<= Counter <<=1 Counter = counter << 1 >>= Counter >>=1 Counter = counter >> 1 &= Counter &=1 Counter = counter & 1 |= Counter |=1 Counter = counter | 1 ^= Counter ^=1 Counter = counter ^ 1 ~= Counter ~=1 Counter = counter ~ 1

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

Page 18: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 16 -

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 pertama :

// program ini dibuat oleh ….

Dibelakang tanda // tak akan diproses dalam kompilasi. Tanda ini hanya untuk satu baris

kalimat.

Contoh kedua :

/* program untuk memutar motor DC atau motor stepper */

Bentuk ini berguna kalau pernyataannya berupa kalimat yang panjang sampai beberapa

baris.

9. PENYELEKSIAN KONDISI

Penyeleksian kondisi digunakan untuk mengarahkan perjalanan suatu proses.

Penyeleksian kondisi dapat diibaratkan sebagai katup atau kran yang mengatur jalannya

air. Bila katup terbuka maka air akan mengalir dan sebaliknya bila katup tertutup air

tidak akan mengalir atau akan mengalir melalui tempat lain. Fungsi penyeleksian

kondisi penting artinya dalam penyusunan bahasa C, terutama untuk program yang

kompleks.

9.1. 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 :

Page 19: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 17 -

if(kondisi) pernyataan;

#include <mega8535.h> #include <delay.h> void main() { char inp1; DDRA=0xFF; DDRB=0xFF; inp1=PORTB; if(inp1==0x40) {PORTA = 0x20;} }

9.2. 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) pernyataan-1

else pernyataan-2

Contoh

IF if (angka = fo) /* bila angka sama dengan fo */

{ /*kerjakan berikut ini */ for (k = 0; k<4 ; k++) { i=tabel1(k); PORTA = i; // pernyataan dalam blok ini bisa kosong tunda50(100); // berarti tidak ada yang dikerjakan }

} else //bila tidak sama kerjakan berikut ini

{ for (k = 0; k<4 ; k++) { i=tabel2(k); // pernyataan dalam blok ini bisa kosong

Page 20: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 18 -

PORTA = i; // berarti tidak ada yang dikerjakan tunda50(100); } } #include <mega8535.h> #include <delay.h> void main() { char inp1; DDRA=0xFF; DDRB=0xFF; inp1=PORTB; if(inp1==0x01) {PORTA = 0x20;} else {PORTA=0x80;} }

9.3. STRUKTUR KONDISI “SWITCH...CASE... DEFAULT…”

Struktur kondisi switch....case....default digunakan untuk penyeleksian kondisi dengan

kemungkinan yang terjadi cukup banyak. Struktur ini akan melaksanakan salah satu dari

beberapa pernyataan ‘case’ tergantung nilai kondisi yang ada di dalam switch.

Selanjutnya proses diteruskan hingga ditemukan pernyataan ‘break’. Jika tidak ada nilai

pada case yang sesuai dengan nilai kondisi, maka proses akan diteruskan kepada

pernyataan yang ada di bawah ‘default’.

Bentuk umum dari struktur kondisi ini adalah :

switch(kondisi) {

case 1 : pernyataan-1; break; case 2 : pernyataan-2; break; ..... case n : pernyataan-n; break; default : pernyataan-m

}

contoh

Page 21: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 19 -

SWITCH …. CASE … switch(fo) {

case 1: for (k = 0; k<4 ; k++) { i=tabel1(k); PORTA = i; tunda(100); } break;

case 2: for (k = 0; k<4 ; k++) { i=tabel2(k); PORTA = i; tunda(100); } break;

#include <mega8535.h> #include <delay.h> void main() { char a; DDRA=0xFF; DDRB=0xFF; a=PORTA; switch(a) { case 0: PORTB=5;break; case 1: PORTB=10;break; case 2: PORTB=15;break; case 3: PORTB=20;break; case 4: PORTB=40;break; case 5: PORTB=60;break; default: PORTB=0;break; } }

10. PERULANGAN

Dalam bahasa C tersedia suatu fasilitas yang digunakan untuk melakukan proses

yang berulangulang sebanyak keinginan kita. Misalnya saja, bila kita ingin menginput

Page 22: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 20 -

dan mencetak bilangan dari 1 sampai 100 bahkan 1000, tentunya kita akan merasa

kesulitan. Namun dengan struktur perulangan proses, kita tidak perlu menuliskan

perintah sampai 100 atau 1000 kali, cukup dengan beberapa perintah saja. Struktur

perulangan dalam bahasa C mempunyai bentuk yang bermacam-macam.

10.1. STRUKTUR PERULANGAN “ WHILE”

Perulangan WHILE banyak digunakan pada program yang terstruktur.

Perulangan ini banyak digunakan bila jumlah perulangannya belum diketahui. Proses

perulangan akan terus berlanjut selama kondisinya bernilai benar (true) dan akan

berhenti bila kondisinya bernilai salah.

Bentuk umum dari struktur kondisi ini adalah:

While (ekspresi) { Pernyataan_1 Pernyataan_2 }

Contoh Program 1 :

while (!TF0); { TF0 = 0; TR0 = 0; }

#include <mega8535.h> #include <delay.h> void main() { char a=10; DDRA=0xFF; while(a>=0) { PORTA=a; a--; } }

Page 23: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 21 -

10.2. STRUKTUR PERULANGAN “DO.....WHILE…”

Pada dasarnya struktur perulangan do....while sama saja dengan struktur while,

hanya saja pada proses perulangan dengan while, seleksi berada di while yang letaknya

di atas sementara pada perulangan do....while, seleksi while berada di bawah batas

perulangan. Jadi dengan menggunakan struktur do…while sekurang-kurangnya akan

terjadi satu kali perulangan.

Bentuk umum dari struktur kondisi ini adalah:

Do {

Pernyataan_1 Pernyataan_2 } While (ekspresi)

#include <mega8535.h> #include <delay.h> void main() { char a=10; DDRA=0xFF; do { PORTA=a; a--; } while(a>=0); }

10.3. STRUKTUR PERULANGAN “FOR”

Struktur perulangan for biasa digunakan untuk mengulang suatu proses yang

telah diketahui jumlah perulangannya. Dari segi penulisannya, struktur perulangan for

tampaknya lebih efisien karena susunannya lebih simpel dan sederhana. Bentuk umum

perulangan for adalah sebagai berikut :

for(inisialisasi; syarat; penambahan) pernyataan;

Page 24: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 22 -

Keterangan:

Inisialisasi : pernyataan untuk menyatakan keadaan awal dari variabel kontrol.

syarat : ekspresi relasi yang menyatakan kondisi untuk keluar dari perulangan.

penambahan : pengatur perubahan nilai variabel kontrol.

Contoh

for (k = 0; k<4 ; k++) { i=tabel1(k); PORTA = i; tunda50(100); }

#include <mega8535.h> #include <delay.h> void main() { char a; DDRA=0xFF; for(a=10;a>=0;a--) PORTA=a; }

11. ARAY (LARIK)

Array merupakan kumpulan dari nilai-nilai data yang bertipe sama dalam urutan

tertentu yang menggunakan nama yang sama. Letak atau posisi dari elemen array

ditunjukkan oleh suatu index. Dilihat dari dimensinya array dapat dibagi menjadi Array

dimensi satu, array dimensi dua dan array multi-dimensi.

11.1. ARRAY DIMENSI SATU

Setiap elemen array dapat diakses melalui indeks. Indeks array secara default

dimulai dari 0. Deklarasi Array Bentuk umum :

Deklarasi array dimensi satu:

[Tipe_array][ nama_array][elemen1];

Page 25: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 23 -

11.2. ARRAY DIMENSI DUA

Array dua dimensi merupakan array yang terdiri dari m buah baris dan n buah

kolom. Bentuknya dapat berupa matriks atau tabel.

Deklarasi array dimensi dua :

[Tipe_array][nama_array][elemen1][elemen2];

11.3. ARRAY MULTI-DIMENSI

Array multi-dimensi merupakan array yang mempunyai ukuran lebih dari dua.

Bentuk pendeklarasian array sama saja dengan array dimensi satu maupun array

dimensi dua. Bentuk umumnya yaitu :

[tipe_array][nama_array][elemen1][elemen2]…[elemenN];

12. FUNGSI

12.1. PENGERTIAN FUNGSI

Fungsi merupakan suatu bagian dari program yang dimaksudkan untuk

mengerjakan suatu tugas tertentu dan letaknya terpisah dari program yang

memanggilnya. Fungsi merupakan elemen utama dalam bahasa C karena bahasa C

sendiri terbentuk dari kumpulan fungsi-fungsi. Dalam setiap program bahasa C,

minimal terdapat satu fungsi yaitu fungsi main(). Fungsi banyak diterapkan dalam

program-program C yang terstruktur. Keuntungan penggunaan fungsi dalam program

yaitu program akan memiliki struktur yang jelas (mempunyai readability yang tinggi)

dan juga akan menghindari penulisan bagian program yang sama.

12.2. PENDEFISIAN FUNGSI

Sebelum digunakan fungsi harus didefinisikan terlebih dahulu. Bentuk definisi fungsi

adalah:

Page 26: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 24 -

Tipe_Nilai_Balik nama_fungsi(argumen1, argumen2) { Pernyataan1; Pernyataan1; return(ekspresi);

}

Contoh:

int jumlah(int bil1,int bil2) //definisi fungsi jumlah { int hasil; hasil = bil1 + bil2

return(hasil); }

int jumlah(int bil1,int bil2)

1 2 3 4

Keterangan:

1. tipe data nilai balik fungsi

2. merupakan nama fungsi

3. tipe argumen

4. nama argumen

#include <mega8535.h> #include <delay.h> int jumlah(int bil1,int bil2) { return(bil1+bil2); } void main() { DDRA=0xFF; PORTA=jumlah(20,50); }

12.3. PROTOTYPE FUNGSI

Ketentuan pendefinisian fungsi yang mendahului fungsi pemanggil dapat merepotkan

untuk program yang komplek atau besar. Untuk mengatasi hal tersebut maka fungsi

dapat dideklarasikan sebelum digunakan, terletak sebelum fungsi main. Deklarasi fungsi

Page 27: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 25 -

dikenal dengan prototype fungsi. Cara mendeklarasikan fungsi sama dengan header

fungsi dan diakhiri tanda titik koma ( ; )

#include <mega8535.h> #include <delay.h> int jumlah(int bil1,int bil2); void main() { DDRA=0xFF; PORTA=jumlah(20,50); } int jumlah(int bil1,int bil2) { return(bil1+bil2); }

12.4. VARIABEL LOKAL DAN GLOBAL

Variabel lokal adalah variabel yang dideklarasikan di dalam suatu fungsi,

variabel ini hanya dikenal fungsi tersebut. Setelah keluar dari fungsi ini maka variabel

ini akan hilang. Variabel global adalah variabel yang dideklarasikan di luar fungsi,

sehingga semua fungsi dapat memakainya.

#include <mega8535.h> #include <delay.h> int jumlah(int bil1,int bil2); int data1; void main() { int data1; DDRA=0xFF; data1=jumlah(20,50); PORTA = data1; } int jumlah(int bil1,int bil2) { return(bil1+bil2); }

Page 28: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 26 -

12.5. KATA KUNCI EXTERN DAN STATIC

Kata kunci extern dan static digunakan untuk menyatakan sifat dari variabel atau

fungsi. Suatu variabel atau fungsi yang didepannya ditambah dengan kata kunci extern

maka artinya variabel atau fungsi tersebut didefinisikan di luar file tersebut. Variabel

global atau fungsi yang didepannya ditambah kata kunci static mempunyai arti bahwa

variabel global atau fungsi tersebut bersifat pivate bagi file tersebut, sehingga tidak

dapat diakses dari file yang lain. Kata kunci static yang ditambahkan didepan variabel

lokal (variabel di dalam suatu fungsi) artinya variabel tersebut dialokasikan pada

memori statik. Nilai yang tersimpan dalam variabel statik tidak hilang walaupun sudah

keluar dari fungsi.

12.6. FUNGSI TANPA NILAI BALIK

Fungsi yang tidak mempunyai nilai balik menggunakan kata kunci void

sedangkan fungsi yang tidak mempunyai argumen, setelah nama fungsi dalam kurung

dapat kosong atau dengan menggunakan kata kunci void.

Contoh:

void tunda(void) { for(i = 0; i < 10 ; i++); }

atau

void tunda() { for(i=0;i<10;i++); {} } /* fungsi tunda_panjang */ void tunda_panjang(int n) { int i; for (i=0; i<n;i++) tunda();

Page 29: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 27 -

}

12.7. FUNGSI DENGAN NILAI BALIK (RETURN VALUE)

Nilai balik dinyatakan delam pernyataan return. Tipe nilai balik dapat berupa

char, int, short, long, atau float

Contoh:

int jumlah(int bil1,int bil2) { return(bil1+bil2); }

12.8. ARGUMEN/ PARAMETER FUNGSI

Argumen dilewatkan ke dalam fungsi terdiri atas dua macam, yaitu:

a. Pelewatan secara nilai

Bentuk definisi pelewatan secara nilai adalah:

tipe nama_fungsi (tipe argumen1, tipe argumen2, ...) { .................... ....................

}

#include <mega8535.h> #include <delay.h> void Tambahv(int A) { A=A+1; } void main() { int B; DDRA=0xFF; B=4; Tambahv(B); PORTA=B; }

Page 30: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 28 -

b. Pelewatan secara pointer

Bentuk definisi pelewatan secara pointer adalah:

tipe nama_fungsi (tipe *argumen1, tipe *argumen2, ...) { .................... ....................

}

#include <mega8535.h> #include <delay.h> void Tambahp(int *A) { *A=*A+1; } void main() { int B; DDRA=0xFF; B=4; Tambahp(&B); PORTA=B; }

13. STRUKTUR

Struktur merupakan sekelompok data (variabel) yang mempunyai tipe yang sama

atau berbeda yang dikemas dalam satu nama.

13.1. DEKLARASI STRUKTUR

Deklarasi struktur dilakukan dengan format sebagai berikut:

Struct nama_struktur { deklarasi variabel; }

Contoh:

Struct kar_sensor { unsigned char impedan; unsigned char koefi_suhu;

unsigned char gain; }

Page 31: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 29 -

atau

typedef struct { deklarasi variabel } nama_struktur;

Contoh:

Typedef struct { unsigned char impedan; unsigned char koefi_suhu; unsigned char gain;

}

13.2. PENDEFINISIAN VARIABEL STRUKTUR

Pada deklarasi struktur belum ada pengalokasian memori, oleh karena itu agar

dapat digunakan maka perlu dilakukan pendefinisian variabel struktur. Pendefinisian

variabel struktur dilakukan dengan format sebagai berikut:

Bentuk 1:

Struct nama_struktur nama_variabel;

Contoh:

Struct kar_sensor sem_suhu;

Bentuk 2:

Nama_struktur nama_variabel

Contoh:

Kar_sensor sen_suhu;

13.3. MENGAKSES ANGGOTA STRUKTUR

Untuk mengakses anggota struktur dapat dilakukan dengan cara sebagai berikut:

Nama_variabel.anggota = data; //untuk penulisan Tampung = nama_variabel.anggota //untuk pembacaan

Contoh:

Sen_suhu.impedansi = 0x5; Sen_suhu.kofi_suhu = 0x01; Sen_suhu.gain = 0x04;

Page 32: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 30 -

#include <mega8535.h> #include <delay.h> struct kar_sensor { unsigned char impedan; unsigned char koefi_suhu; unsigned char gain; }; void main() { struct kar_sensor sen_suhu; DDRA=0xFF; DDRB=0xFF; DDRD=0xFF; sen_suhu.impedan=0x5; sen_suhu.koefi_suhu=0x01; sen_suhu.gain=0x04; PORTA=sen_suhu.impedan; PORTB=sen_suhu.koefi_suhu; PORTD=sen_suhu.gain; }

13.4. LARIK STUKTUR

Struktur dapat juag didefinisikan sebagai larik seperti berikut ini:

Struct kar_sensor dbase_sensor[4];

Untuk mengakses anggota struktur harus disertakan indeks lariknya.

Contoh:

Mengakses larik ke 0:

Dbase_sensor [0].impedan=0x5; Dbase_sensor [0].koefi_suhu=0x01; Dbase_sensor [0].gain=0x04;

Mengakses larik ke 1:

Dbase_sensor [1].impedan=0x6; Dbase_sensor [1].koefi_suhu=0x05; Dbase_sensor [1].gain=0x02;

#include <mega8535.h> #include <delay.h>

Page 33: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 31 -

struct kar_sensor { unsigned char impedan; unsigned char koefi_suhu; unsigned char gain; }; void main() { struct kar_sensor sen_suhu[2]; DDRA=0xFF; DDRB=0xFF; DDRD=0xFF; sen_suhu[0].impedan=0x5; sen_suhu[0].koefi_suhu=0x01; sen_suhu[0].gain=0x4; PORTA=sen_suhu[0].impedan; PORTB=sen_suhu[0].koefi_suhu; PORTD=sen_suhu[0].gain; }

13.5. INISIALISASI STRUKTUR

Anggota struktur dapat diberi nilai ketika pendefinisian variabel struktur seperti

pada berikut ini:

Struct kar_sensor sen_suhu = {0x05, 0x09, 0x01};

Contoh:

Struct kar_sensor dbase_sensor[4] = { {0x05, 0x07, 0x09}; {0x02, 0x04, 0x01}; {0x04, 0x01, 0x03}; {0x07, 0x03, 0x04}; }

#include <mega8535.h> #include <delay.h> struct kar_sensor { unsigned char impedan; unsigned char koefi_suhu; unsigned char gain; }; void main()

Page 34: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 32 -

{ struct kar_sensor sen_suhu[2]={{0x05,0x01,0x04},{0x7,0x02,0x01}}; DDRA=0xFF; DDRB=0xFF; DDRD=0xFF; PORTA=sen_suhu[0].impedan; PORTB=sen_suhu[0].koefi_suhu; PORTD=sen_suhu[0].gain; }

13.6. POINTER STRUKTUR

Struktur dapat didefinisikan sebagai pointer seperti berikut ini:

Struct kar_sensor * dbase_sensor; //variabel //pointer

Struct kar_sensor base; //variabel

Untuk mengakses data anggota dilakukan dengan cara seperti berikut ini:

Dbase_sensor = &base; Dbase_sensor −> impedan = 0x05; Dbase_sensor −> koefi_suhu = 0x02;

Dbase_sensor −> gain = 0x03; P1 = Dbase_sensor −> impedan P2 = Dbase_sensor −> koefi_suhu; P3 = Dbase_sensor −> gain

13.7. MELEWATKAN POINTER STRUKTUR KE FUNGSI

Penggunaan pointer struktur untuk melewatkan parameter ke fungsi dapat

mencegah pelewatan data anggota struktur yang banyak, karena hanya parameter

tertentu saja yang akan dilewatkan. Melewatkan pointer struktur ke fungsi dapat juga

didefinisikan sebagai seperti berikut ini:

Struct kar_sensor base * dbase_sensor; Dbase_sensor = &base; Dbase_sensor −> impedan = 0x05; Dbase_sensor −> koefi_suhu = 0x02; Dbase_sensor −> gain = 0x03; Kali_impedan(Struct kar_sensor *Structpointer) { Structpointer −> impedan *= 2

Page 35: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 33 -

} P1 = Dbase_sensor −> impedan P2 = Dbase_sensor −> koefi_suhu; P3 = Dbase_sensor −> gain

14. POINTER

14.1. PENGERTIAN POINTER

Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori

dari suatu variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya variabel

lain) di dalam memori. Contoh, jika sebuah variabel berisi alamat dari variabel lain,

variabel pertama dikatakan menunjuk ke variabel kedua

Operator Pointer ada dua, yaitu :

• Operator &

o Operator & bersifat unary (hanya memerlukan satu operand saja).

o Operator & menghasilkan alamat dari operandnya.

• . Operator *

o Operator * bersifat unary (hanya memerlukan satu operand saja).

o Operator * menghasilkan nilai yang berada pada sebuah alamat.

14.2. DEKLARASI POINTER

Seperti halnya variabel yang lain, variabel pointer juga harus dideklarasikan terlebih

dahulu sebelum digunakan.

Bentuk Umum :

Tipe_data *nama_pointer;

Tipe data pointer mendefinisikan tipe dari obyek yang ditunjuk oleh pointer. Secara

teknis, tipe apapun dari pointer dapat menunjukkan lokasi (dimanapun) dalam memori.

Page 36: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 34 -

Bahkan operasi pointer dapat dilaksanakan relatif terhadap tipe dasar apapun yang

ditunjuk. Contoh, ketika kita mendeklarasikan pointer dengan tipe int*, kompiler akan

menganggap alamat yang ditunjuk menyimpan nilai integer - walaupun sebenarnya

bukan (sebuah pointer int* selalu menganggap bahwa ia menunjuk ke sebuah obyek

bertipe integer, tidak peduli isi sebenarnya). Karenanya, sebelum mendeklarasikan

sebuah pointer, pastikan tipenya sesuai dengan tipe obyek yang akan ditunjuk.

Contoh :

char *ptr; data char *ptr;

Tabel 2.5 Ukuran Variabel Pointer

No Kelas Memori Lebar Pointer 1 generik 3 2 data 1 3 idata 1 4 xdata 2 5 code 2 6 pdata 1

Sdcc juga mendukung deklarasi pointer yang mengarahkan fisik pointer ke kelas

memori tertentu.

Contoh:

/*secara fisik pointer berada di internal RAM yang menunjukan ke RAM eksternal*/ xdata unsigned char *data p:

/* secara fisik pointer berada di eksternal RAM yang menunjukan ke RAM internal*/

data unsigned char *data p:

/* secara fisik pointer berada di code ROM yang menunjukan ke RAM eksternal*/ /* p harus diinisialisasi ketika dideklarasikan*/

xdata unsigned char *code p = 0x1000:

/* secara fisik pointer berada code ROM yang menunjukan ke ROM*/ /* p harus diinisialisasi ketika dideklarasikan*/

Page 37: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 35 -

code unsigned char *code p = 0x1000:

/* secara fisik pointer generic berada di eksternal RAM*/ char *xdata p:

14.3. INISIALISASI POINTER

Setelah dideklarasikan pointer belum menunjuk ke suatu alamat tertentu, oleh

karena itu perlu untuk diinisialisasi agar pointer menunjuk ke alamat tertentu sesuai

dengan kebutuhan.

14.3.1. MENUNJUKAN ALAMAT VARIABEL

Menunjuk alamat variabel dilakukan dengan cara sebagai berikut:

int aku; // deklarasi variabel int *ptr; // deklarasi pointer prt=&aku; // inisialisasi pointer // ptr = alamat variabel aku

atau

int aku; int *ptr=&aku;

Tanda ‘&’ di depan variabel menyatakan alamat memori variabel tersebut.

14.3.2. MENUNJUKAN ALAMAT MEMORI ABSOLUT

Disamping diarahkan untuk menunjukan alamat variabel, pointer juga dapat

diinisialisasi untuk menunjukan alamat absolut dengan cara sebagai berikut:

int *ptrku; ptrku= (int *) 0x8000;

atau

int *ptrku=(int *) 0x8000;

15. MENYISIPKAN INSTRUKSI ASSEMBLI

CVAVR juga mendukung penyisipan instruksi dalam bahasa asembli. Instruksi asembli

dituliskan diantara kata kunci #asm dan #endasm seperti berikut ini:

Page 38: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 36 -

Void tunda() { #asm mov r0, #20 00001$: djnz r0, 00001$ #endasm; }

#include <mega8535.h> #include <delay.h> void tunda() { #asm mov r0, #0x0f5 01$: mov r1, #0x0ff 02$: mov r2, #0 djnz r1, 02$ djnz r0, 01$ #endasm; } void main() { char a; char k; DDRA=0xFF; DDRB=0xFF; while(1) { a=0x03; for (k=0;k<9;k++) { PORTB=a; tunda(); a=a<<1; } } }

15.1. PENGGUNAAN LABEL PADA INSTRUKSI ASSEMBLI

Label pada instruksi assembli berupa anggka nnnnn$ dengan nnnnn berupa

angka di bawah 100. label pada instruksi assembli hanya dikenal oleh instruksi

assembli, bahasa C tidak mengenal label pada penyisipan assembli dan juga sebaliknya.

Contoh:

Page 39: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

- 37 -

Void conto() {

/*Pernyataan C*/ #asm ; beberapa instruksi asembli ljmp 00003$ #endasm; /*Pernyataan C*/ clabel: /*instruksi assembli tidak mengenal*/ #asm 00003$: ; hanya dapat dikenal oleh assembli #endasm;

}

Page 40: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

1

BAB I APLIKASI OUTPUT

1.1. RANGKAIAN LAMPU LED

Rangkaian minimum untuk menghidupkan 8 LED melalui Port B ditunjukan

pada Gambar 3.1. yang perlu diperhatikan adalah konfigurasi rangkaian LED yaitu

Common Anode (CA) artinya untuk menghidupkan LED pada Port B, port B harus

dikirim atau diberi logika ‘0’.

12

VCC

PC2

PC4

PC6

12

C1 22pF

12PC51212

R1

12

PC112

12

U1

ATMEGA8535

3

1213

2

16171819

1110

876

3635343332

37

1

45

9

1415

20 21

403938

31302928272625242322

PB2(INT2/AIN0)

XTAL2XTAL1

PB1(T1)

PD2(INT0)PD3(INT1)PD4(OC1B)PD5(OC1A)

GNDVCC

PB7[SCK)PB6[MISO)PB5(MOSI)

PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)

AREF

PA3(ADC3)

PB0(XCK/T0)

PB3(OC0/AIN1)PB4(SS)

RESET

PD0(RXD)PD1(TXD)

PD6(ICP) PD7(OC2)

PA0(ADC0)PA1(ADC1)PA2(ADC2)

AGNDAVCC

PC7(TOSC2)PC6(TOSC1)

PC5PC4PC3PC2

PC1(SDA)PC0(SCL)

PC0

VCC

C3 100nF

X1

VCC

SW1

12

PC3

VCC

PC7

RST

C2 22pF

Gambar 1.1. Hasil pemasangan komponen rangkaian lampu led

1.2. PEMROGRAMAN MENYALAKAN LED

Setelah rangkaian LED dibuat dan dihubungkan dengan port pararel

mikrokontroller, maka sekarang saatnya Anda membuat program yang digunakan untuk

menghidupkan LED tersebut.

Program sebagai berikut ini

//-------------------------------------------------------//Program LED Menyala //-------------------------------------------------------#include <mega8535.h>

Page 41: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

2

#include <delay.h> void main(void) { char a; a=0x000; DDRC=0xFF; while(1) { PORTC = a; } }

Cara kerja program:

Pada program Program LED Menyala, di perlukan deklarasi register dan delay untuk

mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi register, maka program

akan masuk ke dalam program utama. Di dalam program utama, terdapat variabel

karakter yang berfungsi untuk menyimpan data angka 0x000. Data 0x00 digunakan

untuk menyalakan LED karena LED di pasang common anoda Data tersebut akan di

keluarkan oleh mikrokontroller dengan menggunakan PORTC. Data tersebut di simpan

dalam variabel a yang dideklarasikan sebagai char. Data tersebut dikeluarkan dengan

menggunakan PORTC sehingga harus dideklarasikan PORTC sebagai output dengan

DDRC=0xFF. Instruksi while merupakan instruksi perulangan, sehingga

mikrokontroller akan mengeluarkan data yang di simpan oleh variabel karakter secara

terus menerus.

1.3. PEMROGRAMAN LED BERKEDIP

Setelah membuat dan menjalankan program menyalakan lampu LED, maka

sekarang saatnya Anda membuat program kedua yang digunakan untuk menghidupkan

LED berkedip.

Page 42: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

3

Program sebagai berikut ini

//-------------------------------------------------------//Program Bab 3.2. LED Berkedip //-------------------------------------------------------#include <mega8535.h> #include <delay.h> void main(void) { char a; char b; a=0x000; b=0x0FF; DDRB=0xFF; while(1) { PORTB= a; delay_ms(500); PORTB= b; delay_ms(500); } }

Cara kerja program:

Pada program Program LED Berkedip, terlihat menggunakan mikrokontroller

ATMEGA8535, sehingga di perlukan deklarasi register untuk mikrokontroller jenis

ATMEGA8535. Di dalam program utama, terdapat variabel karakter yang berfungsi

untuk menyimpan data 00 dan FF. Data tersebut akan di keluarkan oleh mikrokontroller

dengan menggunakan port 0. Instruksi while merupakan instruksi perulangan.

1.4. PEMROGRAMAN LED FLIP FLOP

Setelah membuat dan menjalankan program menyalakan lampu LED berkedip,

maka sekarang saatnya Anda membuat program ketiga yang digunakan untuk

menghidupkan LED flip-flop 1.

Program sebagai berikut ini

//------------------------------------------------------- //Program Bab 3.3. LED Flip-Flop

Page 43: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

4

//------------------------------------------------------- #include <mega8535.h> #include <delay.h> void main(void) { char a; char b; a=0x00f; b=0x0f0; DDRB=0xFF; while(1) { PORTB= a; delay_ms(500); PORTB= b; delay_ms(500); } }

Cara kerja program:

Pada program LED Flip-Flop di perlukan deklarasi register untuk

mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi register, maka program

akan mendeklarasikan waktu 1 sekon. Waktu tersebut berfungsi untuk waktu tunda.

Kemudian mikrokontroller akan mengeksekusi program utama.

Di dalam program utama, terdapat variabel karakter yang berfungsi untuk

menyimpan data 0x00F dan 0x0F0. Data tersebut akan di keluarkan oleh

mikrokontroller dengan menggunakan port B.

1.5. PEMROGRAMAN LED BERJALAN KEKANAN

Setelah membuat dan menjalankan program menyalakan lampu LED flip-flop,

maka sekarang saatnya Anda membuat program yang digunakan untuk menghidupkan

LED berjalan kanan. Program LED berjalan kekanan ini dijalankan pada hardware

nyala led berlogika tinggi atau logika 1. jika menggunakan logika rendah maka LED

bukan menyala tetapi akan mati. Program LED berjalan kekanan menggunakan operasi

Page 44: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

5

geser kanan. Operasi geser kiri akan menggeser bit-bit kekanan sehingga bit 0 akan

berpindah ke bit 1 dan bit 1 akan berpindah ke bit 2 dan seterusnya.

Program sebagai berikut ini

//------------------------------------------------------ //Program Bab 3.4. LED Berjalan Kekanan //------------------------------------------------------ #include <mega8535.h> #include <delay.h> void main(void) { volatile unsigned char a=0x01; DDRB=0xFF; while(1) { a=((a>>7) | (a<<1)); delay_ms(1000); PORTB=a; } }

Cara kerja program:

Pada program Program LED berjalan Kekanan di perlukan deklarasi register

untuk mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi register, maka

program akan mendeklarasikan waktu kurang lebih 1 sekon.

Kemudian mikrokontroller akan mengeksekusi program utama. Di dalam

program utama, terdapat variabel karakter yang berfungsi untuk menyimpan data 0x01.

Data tersebut akan di keluarkan oleh mikrokontroller dengan menggunakan port 0.

kemudian mikrokontroller menjalankan operasi geser kanan. Diantara operasi geser kiri

dan mengeluarkan data di PORTB tersebut terdapat waktu tunda kurang lebih 1 sekon.

Didalam program utama terdapat pernyataan while(1). Pernyataan itu berfungsi untuk

melakukan Looping secara terus menerus.

Page 45: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

6

1.6. PEMROGRAMAN LED BERJALAN KEKIRI

Setelah membuat dan menjalankan program menyalakan lampu LED berjalan

kekanan, maka sekarang saatnya Anda membuat program yang digunakan untuk

menghidupkan LED berjalan kekiri. Program LED berjalan kekanan menggunakan

operasi geser kiri. Operasi geser kiri akan menggeser bit-bit kekanan sehingga bit 7

akan berpindah ke bit 6 dan bit 6 akan berpindah ke bit 5 dan seterusnya.

Program sebagai berikut ini

//------------------------------------------------------ //Program Bab 3.5. LED berjalan ke kiri //------------------------------------------------------ #include <mega8535.h> #include <delay.h> void main(void) { volatile unsigned char a=0x01; DDRB=0xFF; while(1) { a=((a<<7) | (a>>1)); delay_ms(500); PORTB=a; } }

Cara kerja program:

Pada program Program LED berjalan ke kiri di perlukan deklarasi register

untuk mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi register, maka

program akan mendeklarasikan waktu kurang lebih 1 sekon.

Kemudian mikrokontroller akan mengeksekusi program utama. Di dalam

program utama, terdapat variabel karakter yang berfungsi untuk menyimpan data 0x01.

Data tersebut akan di keluarkan oleh mikrokontroller dengan menggunakan port 0.

kemudian mikrokontroller menjalankan operasi geser kekiri. Diantara operasi geser kiri

Page 46: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

7

dan mengeluarkan data di PORTB tersebut terdapat waktu tunda kurang lebih 1 sekon.

Didalam program utama terdapat pernyataan while(1). Pernyataan itu berfungsi untuk

melakukan Looping secara terus menerus.

1.7. PEMROGRAMAN LED BERJALAN BOLAK-BALIK

Setelah membuat dan menjalankan program menyalakan lampu LED berjalan

menyala kekiri, maka sekarang saatnya Anda membuat program ketuga yang digunakan

untuk menghidupkan LED bolak balik. Program LED bolak balik menggunakan operasi

pernyataan geser kanan dan geser kiri.

Program sebagai berikut ini

//------------------------------------------------------ //Program Bab 3.6. LED ping-pong //------------------------------------------------------ #include <mega8535.h> #include <delay.h> void jalankiri(unsigned int n) { unsigned char i=0, a=0x01; DDRB=0xFF; PORTB = 0; while(n) { for(i=0;i<7;i++) { a=((a>>7) | (a<<1)); delay_ms(100); PORTB=a; } n--; } } void jalankanan(unsigned int n) { unsigned char i=0, a=0x80; DDRB=0xFF; PORTB = 0; while(n) {

Page 47: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

8

for(i=0;i<7;i++) { a=((a<<7) | (a>>1)); delay_ms(100); PORTB=a; } n--; } } void main(void) { while(1) { iswanto: jalankiri(1); jalankanan(1); goto iswanto; } }

Cara kerja program:

Pada program menyalakan LED dari kiri ke kanan di perlukan deklarasi register

untuk mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi register, maka

program akan mendeklarasikan waktu kurang lebih 1 sekon. Waktu tersebut berfungsi

untuk waktu tunda. Waktu tunda itu tidak tidak akurat.

Kemudian mikrokontroller akan mengeksekusi program utama. Di dalam

program utama, terdapat variabel karakter yang berfungsi untuk menyimpan data 0x01.

Data tersebut akan di keluarkan oleh mikrokontroller dengan menggunakan port 0.

kemudian mikrokontroller menjalankan operasi geser kanan. Diantara operasi geser kiri

dan mengeluarkan data di port 0 tersebut terdapat waktu tunda kurang lebih 1 sekon.

Didalam program utama terdapat pernyataan while(1). Pernyataan itu berfungsi untuk

melakukan Looping secara terus menerus.

Page 48: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

10

BAB II APLIKASI INPUT

2.1. PENDAHULUAN

Agar tombol tersebut dapat memberi input pada mikrokontroller, maka terlebih

dahulu tombol ini harus disusun dalam sebuah rangkaian di mana terdapat perbedaan

kondisi pada pin-pinnya antara kondisi tidak ada penekanan tombol, penekanan tombol

1, 2, 3 dan seterusnya. Kondisi tidak adanya penekanan tombol diatur dengan adanya

kondisi logika high.

Pada saat tombol tidak ditekan, maka arus akan mengalir dari VCC melalui

resistor menuju ke port seperti tampak pada gambar berikut.

PORT

Gambar 2.1. Rangkaian saklar

Sedangkan saat tombol ditekan, maka baris dan kolom akan terhubung ke ground

sehingga kondisi pada baris dan kolom tersebut akan menjadi low.

2.2. RANGKAIAN PEMBACAAN 8 TOMBOL

Rangkaian pembacaan 8 buah tombol adalah rangkaian untuk membaca

penekanan tombol yang terhubung pada port keluaran mikrokontroller yang hasilnya

tertampil pada led .

Page 49: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

11

12

X1

C3 100nF1

VCC

VCC

12

VCC

12

12

SW2

12

12

C2 22pF

12

U4

ATMEGA8535

3

1213

2

16171819

1110

876

3635343332

37

1

45

9

1415

20 21

403938

31302928272625242322

PB2(INT2/AIN0)

XTAL2XTAL1

PB1(T1)

PD2(INT0)PD3(INT1)PD4(OC1B)PD5(OC1A)

GNDVCC

PB7[SCK)PB6[MISO)PB5(MOSI)

PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)

AREF

PA3(ADC3)

PB0(XCK/T0)

PB3(OC0/AIN1)PB4(SS)

RESET

PD0(RXD)PD1(TXD)

PD6(ICP) PD7(OC2)

PA0(ADC0)PA1(ADC1)PA2(ADC2)

AGNDAVCC

PC7(TOSC2)PC6(TOSC1)

PC5PC4PC3PC2

PC1(SDA)PC0(SCL)

C1 22pF

12

VCC

R1

12

Gambar 2.2. Rangkaian aplikasi pembacaan 8 buah tombol

2.3. PEMROGRAMAN PEMBACAAN 8 BUAH TOMBOL

Setelah rangkaian tombol dibuat dan dihubungkan dengan port pararel

mikrokontroller, maka sekarang saatnya Anda membuat program pembacaan tombol.

Program sebagai berikut ini

//-------------------------------------------------------//Program Program pembacaan 8 buah tombol //------------------------------------------------------- #include <mega8535.h> #include <delay.h> void main(void) { DDRC=0x00; DDRB=0xFF; while(1) { PORTB = PINC; } }

Cara kerja program:

Pada program pembacaan 8 buah tombol, di perlukan deklarasi register untuk

mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi register, maka program

akan masuk ke dalam program utama. Di dalam program utama, mikrokontroller akan

Page 50: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

12

membaca PORT C. Data dari PORT C akan dimasukan ke dalam variabel, Kemudian

data yang ada di variabel tersebut akan dikeluarakan pada PORT B oleh

mikrokontroller. Didalam program utama terdapat pernyataan while(1). Pernyataan itu

berfungsi untuk melakukan Looping secara terus menerus.

2.4. PEMROGRAMAN PEMBACAAN TOMBOL

Setelah rangkaian tombol dibuat dan dihubungkan dengan port pararel

mikrokontroller, maka sekarang saatnya Anda membuat program Program pembacaan

tombol tunggal.

Program sebagai berikut ini

//------------------------------------------------------- //Program membaca 1 tombol //------------------------------------------------------- #include <mega8535.h> #include <delay.h> void jalankiri() { char i; volatile unsigned char dataLED=0x80; DDRB=0xFF; PORTB = 0; for(i=0; i<8;i++) { dataLED= ((dataLED<<1) | (dataLED >>7)); PORTB=dataLED; delay_ms(100); } } void jalankanan() { char i; volatile unsigned char dataLED=0x01; DDRB=0xFF; PORTB = 0; for(i=0; i<8;i++) { dataLED= ((dataLED<<7) | (dataLED >>1)); PORTB=dataLED;

Page 51: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

13

delay_ms(100); } } void main(void) { DDRC=0x00; while(1) { if (PINC.0==1) { jalankanan(); } else { jalankiri(); } } }

Cara kerja program:

Pada program satu tombol, di perlukan deklarasi register untuk mikrokontroller

jenis ATMEGA8535. Setelah mendeklarasi register, maka program akan masuk ke

dalam program utama. Di dalam program utama, mikrokontroller akan membaca

PORT C.0. Kemudian data tersebut akan dibandingkan untuk mengeluarakan data pada

PORT B oleh mikrokontroller. Jika PORT C.0 berlogika rendah maka led pada PORT B

akan bergeser ke kiri, jika port PORT C.0 berlogika rendah maka led pada PORT B

akan bergeser ke kanan. Kemudian memanggil tunda 1 sekon Didalam program utama

terdapat pernyataan while(1). Pernyataan itu berfungsi untuk melakukan Looping

secara terus menerus.

Page 52: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

10

BAB III TIMER DAN COUNTER

3.1. PENDAHULUAN

Timer dan Counter merupakan sarana input yang kurang dapat perhatian

pemakai mikrokontroler, dengan sarana input ini mikrokontroler dengan mudah bisa

dipakai untuk mengukur lebar pulsa, membangkitkan pulsa dengan lebar yang pasti.

AVR ATMEGA8535 memiliki tiga buah timer, yaitu Timer/Counter0 (8 bit),

Timer/Counter1 (16 bit), dan Timer/Counter3 (16 bit).

3.2. RANGKAIAN MENCACAH COUNTER TIMER T0

Rangkaian minimum untuk counter melalui Port B.0 ditunjukan pada Gambar

3.1. Rangkaian tersebut menggunakan penampil led. Konfigurasi rangkaian LED yaitu

Common Anode (CA) artinya untuk menghidupkan LED pada Port D, port D harus

dikirim atau diberi logika ‘0’.

VCC

P6

P2

P7

P5

P3

P1

R1

L11 2

P0

C3 100nF1

VCC

P5

P4

RST

VCC

1 2

VCC

P6

U4

ATMEGA16

3

1213

2

16171819

1110

876

3635343332

37

1

45

9

1415

20 21

403938

31302928272625242322

PB2(INT2/AIN0)

XTAL2XTAL1

PB1(T1)

PD2(INT0)PD3(INT1)PD4(OC1B)PD5(OC1A)

GNDVCC

PB7[SCK)PB6[MISO)PB5(MOSI)

PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)

AREF

PA3(ADC3)

PB0(XCK/T0)

PB3(OC0/AIN1)PB4(SS)

RESET

PD0(RXD)PD1(TXD)

PD6(ICP) PD7(OC2)

PA0(ADC0)PA1(ADC1)PA2(ADC2)

AGNDAVCC

PC7(TOSC2)PC6(TOSC1)

PC5PC4PC3PC2

PC1(SDA)PC0(SCL)

C2 22pF

SW2

12

P7RST

JISP

HEADER 5

12345

X1

1 21 2

1 2

GND

1 2

1 2

C1 22pF

1 2

Gambar 3.1. Hasil pemasangan komponen-komponen mencacah counter T0

Page 53: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

11

3.3. PEMROGRAMAN MENCACAH COUNTER T0

Setelah rangkaian dibuat dan dihubungkan dengan port mikrokontroller, maka

sekarang saatnya Anda membuat program yang digunakan untuk mencacah. Program

cacah menggunakan port B.0 pada mikrokontroller.

Program sebagai berikut ini

//------------------------------------------------------ // Program MENCACAH COUNTER TIMER 0 //------------------------------------------------------ #include <mega8535.h> #include <delay.h> #include <stdio.h> unsigned char led,a; void InisialisasiTIMER (); void main (void) { DDRD = 0xff; led=0x00; InisialisasiTIMER(); while(1) { a = TCNT0; if (a == 0x06) { led = PIND; PORTD=~led; TCNT0=0x00; } } } void InisialisasiTIMER () { TCNT0=0x00; TCCR0=0x07; }

Cara kerja program:

Program mencacah counter T0 merupakan program untuk menghidupkan dan

mematikan led dengan menekan satu tombol sebanyak 6x. Program ini, di perlukan

Page 54: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

12

deklarasi register untuk mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi

register, maka program akan mendeklasrasikan timer sebagai counter. Untuk

mendeklarasikan timer sebagai counter maka register TCCR0 diisi dengan nilai 0x07.

Tcnt0 = 0.Untuk menghapus isi dari register timer 0 maka register TCNT0 di beri

nilai 0x00

Di dalam program utama, mikrokontroller akan membaca cacahan melalui

PORTB.0. Cacahan tersebut akan di masukan kedalam register TCNT0, kemudian di

masukan kedalam variabel. Nilai cacahan yang terdapat di dalam variabel tersebut akan

dibandingkan, pada saat nilai cacahan = 6 maka led akan menyala dan jika tombol di

tekan lagi sebanyak 6x maka led akan mati. Didalam program utama terdapat

pernyataan while(1). Pernyataan itu berfungsi untuk melakukan Looping secara terus

menerus.

3.4. PEMROGRAMAN MENCACAH TIMER T0

Setelah rangkaian dibuat dan dihubungkan dengan port mikrokontroller, maka

sekarang saatnya Anda membuat program yang digunakan untuk mencacah. Program

cacah menggunakan timer pada mikrokontroller.

Program sebagai berikut ini

//------------------------------------------------------ // Program MENCACAH TIMER T0 //------------------------------------------------------ #include <mega8535.h> #include <delay.h> #include <stdio.h> unsigned char led=0; char a; void InisialisasiTIMER (); void main (void) { DDRB=0x00;

Page 55: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

13

DDRD=0xFF; PORTD=led; InisialisasiTIMER(); led = 0x01; while(1) { if (led == 0x80) { led = 0x01; } a = TCNT0; if (a == 0xFE) { PORTD=led; TCNT0=0x00; led=led <<1; } } } void InisialisasiTIMER () { TCNT0=0x00; TCCR0=0x05; }

Cara kerja program:

Pada Program mencacah Timer T0, di perlukan deklarasi register untuk

mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi register, maka program

akan mendeklasrasikan timer sebagai counter. Program utama ini digunakan untuk

menghitung banyaknya cacahan timer. Nilai dari cacahan tersebut akan di simpan di

register TCNT0. Saat TCNT0 sama dengan 0xFE maka led yang di pasang pada PORT

D akan bergeser satu digit. Dan sampai pada digit ke 8 maka data led akan

dikembalikan ke posisi awal.

Page 56: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

14

3.5. RANGKAIAN MENCACAH COUNTER TIMER T1

Rangkaian minimum untuk counter melalui Port B.1 ditunjukan pada Gambar

4.2. Rangkaian tersebut menggunakan penampil led. Konfigurasi rangkaian LED yaitu

Common Anode (CA) artinya untuk menghidupkan LED pada Port D, port D harus

dikirim atau diberi logika ‘0’.

P3

P6VCC

L11 2

1 2

P7R1

1 2

P0

GND

P5P4

1 2

P1

C1 22pF

U4

ATMEGA16

3

1213

2

16171819

1110

876

3635343332

37

1

45

9

1415

20 21

403938

31302928272625242322

PB2(INT2/AIN0)

XTAL2XTAL1

PB1(T1)

PD2(INT0)PD3(INT1)PD4(OC1B)PD5(OC1A)

GNDVCC

PB7[SCK)PB6[MISO)PB5(MOSI)

PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)

AREF

PA3(ADC3)

PB0(XCK/T0)

PB3(OC0/AIN1)PB4(SS)

RESET

PD0(RXD)PD1(TXD)

PD6(ICP) PD7(OC2)

PA0(ADC0)PA1(ADC1)PA2(ADC2)

AGNDAVCC

PC7(TOSC2)PC6(TOSC1)

PC5PC4PC3PC2

PC1(SDA)PC0(SCL)

VCC

RST

1 2

VCC VCC

1 2

1 2

P5

P7

C2 22pF

C3 100nF1

RST

X1

1 2

SW2

12

P6

P2

JISP

HEADER 5

12345

Gambar 3.2. Hasil pemasangan komponen-komponen mencacah counter T1

3.6. PEMROGRAMAN MENCACAH COUNTER T1

Setelah rangkaian dibuat dan dihubungkan dengan port mikrokontroller, maka

sekarang saatnya Anda membuat program yang digunakan untuk mencacah. Program

cacah menggunakan port B.1 pada mikrokontroller.

Program sebagai berikut ini

//------------------------------------------------------ // Program MENCACAH COUNTER TIMER 1 //------------------------------------------------------ #include <mega8535.h> #include <delay.h> #include <stdio.h>

Page 57: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

15

unsigned char led,a; void InisialisasiTIMER (); void main (void) { DDRD = 0xff; led=0x00; InisialisasiTIMER(); while(1) { a = TCNT1L + TCNT1H; if (a == 0x06) { led = PIND; PORTD=~led; TCNT1L=0x00; TCNT1H=0x00; } } } void InisialisasiTIMER () { TCNT1L=0x00; TCNT1H=0x00; TCCR1A=0x00; TCCR1B=0x07; }

Cara kerja program:

Program mencacah counter T1 merupakan program untuk menghidupkan dan

mematikan led dengan menekan satu tombol sebanyak 6x. Program ini, di perlukan

deklarasi register untuk mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi

register, maka program akan mendeklasrasikan timer sebagai counter. Untuk

mendeklarasikan timer sebagai counter maka register TCCR1 diisi dengan nilai 0x07.

Tcnt1 = 0.Untuk menghapus isi dari register timer 0 maka register TCNT1 di beri nilai

0x00

Di dalam program utama, mikrokontroller akan membaca cacahan melalui

PORTB.1. Cacahan tersebut akan di masukan kedalam register TCNT1, kemudian di

Page 58: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

16

masukan kedalam variabel. Nilai cacahan yang terdapat di dalam variabel tersebut akan

dibandingkan, pada saat nilai cacahan = 6 maka led akan menyala dan jika tombol di

tekan lagi sebanyak 6x maka led akan mati. Didalam program utama terdapat

pernyataan while(1). Pernyataan itu berfungsi untuk melakukan Looping secara terus

menerus.

3.7. PEMROGRAMAN MENCACAH TIMER T1

Setelah rangkaian dibuat dan dihubungkan dengan port mikrokontroller, maka

sekarang saatnya Anda membuat program yang digunakan untuk mencacah. Program

cacah menggunakan timer pada mikrokontroller.

Program sebagai berikut ini

//------------------------------------------------------ // Program MENCACAH TIMER T0 //------------------------------------------------------ #include <mega8535.h> #include <delay.h> #include <stdio.h> unsigned char led=0; char a; void InisialisasiTIMER (); void main (void) { DDRB=0x00; DDRD=0xFF; PORTD=led; InisialisasiTIMER(); led = 0x01; while(1) { if (led == 0x80) { led = 0x01; } a = TCNT1L + TCNT1H; if (a == 0xFE) { PORTD=led;

Page 59: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

17

TCNT1L=0x00; TCNT1H=0x00; led=led <<1; } } } void InisialisasiTIMER () { TCNT1L=0x00; TCNT1H=0x00; TCCR1A=0x00; TCCR1B=0x05; }

Cara kerja program:

Pada Program mencacah Timer T1, di perlukan deklarasi register untuk

mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi register, maka program

akan mendeklasrasikan timer sebagai counter. Program utama ini digunakan untuk

menghitung banyaknya cacahan timer. Nilai dari cacahan tersebut akan di simpan di

register TCNT1L dan TCNT1H.. Saat TCNT1L + TCNT1H sama dengan 0xFE maka

led yang di pasang pada PORT D akan bergeser satu digit. Dan sampai pada digit ke 8

maka data led akan dikembalikan ke posisi awal.

Page 60: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

31

BAB IV PORT SERIAL

4.1. SERIAL PADA ATMEGA8535

Universal synchronous dan asynchronous pemancar dan penerima serial adalah

suatu alat komunikasi serial sangat fleksibel. Jenis yang utama adalah :

Operasi full duplex ( register penerima dan pengirim serial dapat berdiri sendiri )

Operasi Asychronous atau synchronous

Master atau slave mendapat clock dengan operasi synchronous

Pembangkit boud rate dengan resolusi tinggi

Dukung frames serial dengan 5, 6, 7, 8 atau 9 Data bit dan 1 atau 2 Stop bit

Tahap odd atau even parity dan parity check didukung oleh hardware

Pendeteksian data overrun

Pendeteksi framing error

Pemfilteran gangguan ( noise ) meliputi pendeteksian bit false start dan

pendeteksian low pass filter digital

Tiga interrupt terdiri dari TX complete, TX data register empty dan RX

complete.

Mode komunikasi multi-processor

Mode komunikasi double speed asynchronous

4.2. INISIALISASI USART

USART harus diinisialisasi sebelum komunikasi manapun dapat berlansung.

Proses inisialisasi normalnyaterdiri daripengesetan boud rate, penyetingan frame

Page 61: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

32

format dan pengaktifan pengirim atau penerimatergantung pada pemakaian. Untuk

interrupt menjalankan operasi USART , global interrupt flag ( penanda ) sebaiknya

dibersihkan ( dan interrupt global disable ) ketika inisialisasi dilakukan. Sebelum

melakukan inisialisasi ulang dengan mengubah boud rate atau frame format, untuk

meyakinkan bahwa tidak ada transmisi berkelanjutan sepanjang peiode register yang

diubah.

Flag TXC dapat digunakan untuk mengecek bahwa pemancar telah melengkapi

semua pengiriman, dan flag RXC dapat digunakan untuk mengecek bahwa tidak ada

data yang tidak terbaca pada buffer penerima. Tercatat bahwa flag TXC harus

dibersihkan sebelum tiap transmisi ( sebelum UDR ditulisi ) jika itu semua digunakan

untuk tujuan tersebut. USART sederhana inisialisasi kode contoh berikut menunjukan

fungsi satu assembly dan satu C itu mempunyai kesamaan dalam kemampuan. Pada

contoh tersebit mengasumsikan bahwa operasi asinkron menggunakan metode poling (

tidak ada interrupt enable ) frame format yang tetap. Boud rate diberikan sebagai

fungsi parameter.

Untuk kode assembly, parameter boud rate diasumsikan untuk di simpan pada

register r16, r17. Ketika menulis fungsi pada register UCSRC, bit URSEL (MSB)

harus diset dalam kaitan dengan pembagian penempatan I/O oleh UBRRH dan

UCSRC. Lebih mengedepankan inisialisasi rutin dapat dibuat seperti itu meliputi

frame format sebagai parameter, disable interrupt dan lain-lain. Bagai manapun juga

banyak aplikasi menggunakan seting tetap boud dan register control, dan untuk

aplikasi jenis ini dapat ditempatkan secara langsung pada keseluruhan routine, atau

dikombinasikan dengan inisialisasi kode untuk modul I/O yang lain.

Page 62: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

33

4.3. MENGIRIM DATA MELALUI PORT SERIAL

Proses pengiriman data serial dilakukan per byte data dengan menunggu register

UDR yang merupakan tempat data serial akan disimpan menjadi kosong sehingga siap

ditulis dengan data yang baru. Proses ini menggunakan bit yang ada pada register

UCSRA, yaitu bit UDRE (USART Data Register Empty). Bit UDRE merupakan

indikator kondisi register UDR. Jika UDRE bernilai 1 maka register UDR telah kosong.

4.4. MENERIMA DATA MELALUI PORT SERIAL

Proses penerimaan data serial diakukan dengan mengecek nilai bit RXC (USART

Receive Complete) pada register UCSRA. RXC akan bernilai satu jika ada data yang

siap dibaca di buffer penerima, dan bernilai nol jika tidak ada data pada buffer

penerima. Jika penerima USART dinonaktifkan maka bit ini akan selalu bernilai nol.

4.5. RANGKAIAN SERIAL MIKROKONTROLLER

Rangkaian berikut digunakan untuk interfacing Led dengan port serial.

Rangkaian tersebut, sebagai konverter dari serial ke pararel. Berikut adalah rangkaian

serial led driver yang akan kita hubungkan pada port serial. Rangkaian Led Driver

Serial menggunakan Microcontroller ATMEGA8535 yang dihubungkan ke port serial

dengan menggunakan IC RS232 Rangkaian Serial LED Driver ini akan mendeteksi

setiap pengiriman data karakter dari port serial computer.

Page 63: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

34

U4

ATMEGA16

3

1213

2

16171819

1110

876

3635343332

37

1

45

9

1415

20 21

403938

31302928272625242322

PB2(INT2/AIN0)

XTAL2XTAL1

PB1(T1)

PD2(INT0)PD3(INT1)PD4(OC1B)PD5(OC1A)

GNDVCC

PB7[SCK)PB6[MISO)PB5(MOSI)

PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)

AREF

PA3(ADC3)

PB0(XCK/T0)

PB3(OC0/AIN1)PB4(SS)

RESET

PD0(RXD)PD1(TXD)

PD6(ICP) PD7(OC2)

PA0(ADC0)PA1(ADC1)PA2(ADC2)

AGNDAVCC

PC7(TOSC2)PC6(TOSC1)

PC5PC4PC3PC2

PC1(SDA)PC0(SCL)

ADD9

P3

GND

ADD8

P712

PD5

VCC

P5

DATA5

ADD12

L112

PD6

+ C4

1uF 16V

12DATA2

P6

TX1

RST

RX1

P4

SW2

12

+

C91uF 16V

VCC

12

PD1X1

DATA4

JISP

HEADER 5

12345

U6

MAX232

138 11

10

1

3

4

5

2 6

12

9147 R1IN

R2IN T1IN

T2IN

C+

C1-

C2+

C2-

V+ V-

R1OUT

R2OUTT1OUTT2OUT

DATA7

DATA3

P7

+ C8

1uF 16V

12

C1 22pF

DATA0P1

VCC

P5

VCCP2P6

PD7

ADD11

C2 22pF

DATA1

PD3

+ C5

1uF 16V

DATA6

C3 100nF1

12

P0

PD0

RST

ADD10

ADD15

12

PD2

JSerial1

HEADER 3

123

ADD13PD4 ADD14

12R1

Gambar 4.1. Hasil pemasangan komponen rangkaian serial mikrokontroller

4.6. PEMROGRAMAN MENGIRIM DATA

Setelah membuat rangkaian serial mikrokontroller dan menghubungkan ke

komputer, maka sekarang saatnya Anda membuat program yang digunakan untuk

mengirim data serial.

Program sebagai berikut ini

//-------------------------------------------------------//Program MENGIRIM DATA SERIAL PORT //-------------------------------------------------------#include <mega8535.h> #include <delay.h> #include <stdio.h> unsigned char data_terima = 0x00; const long int osilator = 12000000; unsigned long int UBRR; void InisialisasiUSART (unsigned long int baud_rate); void main(void)

Page 64: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

35

{ DDRC = 0xFF; PORTC = 0x00; InisialisasiUSART(9600); putsf("Selamat Datang Mas Iswanto"); putchar(13); } void InisialisasiUSART (unsigned long int baud_rate) { UBRR = (osilator/(16*baud_rate))-1; UBRRL = UBRR; UBRRH = UBRR>>8; UCSRB = 0x18; UCSRC = 0x86; }

Cara kerja program:

Pada program mengirim data serial, di perlukan deklarasi register untuk

mikrokontroller jenisATMEGA8535. Setelah mendeklarasi register, maka program

akan menginisialisasi port serial mikrokontroller dan boudrate. Kemudian program akan

masuk ke program utama. Di dalam program utama, mikrokontroller akan

mengeluarkan data Selamat Datang Mas Iswanto. Data tersebut akan di keluarkan oleh

mikrokontroller dengan menggunakan port serial dan akan di terima oleh komputer

4.7. PEMROGRAMAN MENGIRIM DAN MENERIMA DATA

Setelah membuat dan menjalankan program mengirim data serial, maka sekarang

saatnya Anda membuat program kedua yang digunakan untuk program mengirim dan

menerima data serial.

Program sebagai berikut ini

//-------------------------------------------------------//Program MENGIRIM DAN MENERIMA DATA //-------------------------------------------------------#include <mega8535.h> #include <delay.h>

Page 65: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

36

#include <stdio.h> unsigned char data_terima = 0x00; const long int osilator = 12000000; unsigned long int UBRR; void InisialisasiUSART (unsigned long int baud_rate); void main(void) { DDRC = 0xFF; PORTC = 0x00; InisialisasiUSART(9600); putsf("Selamat Datang Mas Iswanto"); putchar(13); while(1) { putsf("Tekan sembarang tombol"); putchar(13); data_terima = getchar(); delay_ms(100); putsf("Anda menekan tombol "); putchar(data_terima);; putchar(13); } } void InisialisasiUSART (unsigned long int baud_rate) { UBRR = (osilator/(16*baud_rate))-1; UBRRL = UBRR; UBRRH = UBRR>>8; UCSRB = 0x18; UCSRC = 0x86; }

Cara kerja program:

Pada program mengirim dan menerima data serial, di perlukan deklarasi register

untuk mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi register, maka

program akan menginisialisasi port serial mikrokontroller. Selain itu diperlukan fungsi

untuk mengirim karakter dan menerima karakter. Kemudian program akan masuk ke

program utama. Di dalam program utama, program ini akan mengirimkan teks

“Selamat Datang Mas Iswanto” dan mengirim karakter enter dengan kode

karakter 13 ke port serial kemuidan membaca penekanan tombol keyboard dan

Page 66: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

37

mengirimkan data penekanan tombol tersebut ke port serial dengan kecepatan transfer

kirim 9600 bps.

4.8. PEMROGRAMAN MENJALANKAN LED DENGAN PC

Setelah membuat dan menjalankan program program mengirim dan menerima

data serial, maka sekarang saatnya Anda membuat program ketiga yang digunakan

untuk mengeser LED dengan terminal komputer.

Program sebagai berikut ini

//-------------------------------------------------------//Program MENJALANKAN LED DENGAN KOMPUTER //-------------------------------------------------------#include <mega8535.h> #include <delay.h> #include <stdio.h> unsigned char data_terima = 0x00; const long int osilator = 12000000; unsigned long int UBRR; char a,b; void InisialisasiUSART (unsigned long int baud_rate); void geser_kiri(); void geser_kanan(); void kedip(); void main(void) { DDRB = 0xFF; PORTB = 0x00; InisialisasiUSART(9600); putsf("Selamat Datang Mas Iswanto"); putchar(13); while(1) { putsf("Pilih Tombol Berikut ini"); putchar(13); putsf("1. Geser Kiri Led"); putchar(13); putsf("2. Geser Kanan Led"); putchar(13); putsf("3. Led Berkedip"); putchar(13); data_terima = getchar(); if(data_terima=='1') { geser_kiri(); } if(data_terima=='2')

Page 67: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

38

{ geser_kanan(); } if(data_terima=='3') { kedip(); } } } void InisialisasiUSART (unsigned long int baud_rate) { UBRR = (osilator/(16*baud_rate))-1; UBRRL = UBRR; UBRRH = UBRR>>8; UCSRB = 0x18; UCSRC = 0x86; } void geser_kiri() { volatile unsigned char a=0x01; putsf("1. Geser Kiri Led"); putchar(13); for(b=0;b<=7;b++) { a=((a>>7) | (a<<1)); delay_ms(100); PORTB=a; } PORTB= 0x00; } void geser_kanan() { volatile unsigned char a=0x01; putsf("2. Geser Kanan Led"); putchar(13); for(b=0;b<=7;b++) { a=((a<<7) | (a>>1)); delay_ms(100); PORTB=a; } PORTB= 0x00; } void kedip() { putsf("3. Led Berkedip"); putchar(13); for(b=0;b<=7;b++) { PORTB= 0x00; delay_ms(50); PORTB= 0xFF;

Page 68: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

39

delay_ms(50); } PORTB= 0x00; }

Cara kerja program:

Pada program mengirim dan menerima data serial, di perlukan deklarasi register

untuk mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi register, maka

program akan menginisialisasi port serial mikrokontroller. Selain itu diperlukan fungsi

untuk mengirim karakter dan menerima karakter. Kemudian program akan masuk ke

program utama. Di dalam program utama, program ini akan mengirimkan teks

“Selamat Datang Mas Iswanto” dan mengirim karakter enter dengan kode

karakter 13 ke port serial. Kemudian mikro akan mengeluarkan teks untuk penekanan

tombol. Jika data angka 1 maka led brgeser ke kiri, jika data angka 2 maka led brgeser

ke kanan, jika data angka 3 maka led berkedip.

Page 69: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

40

BAB V INTERUPSI

MIKROKONTROLLER

5.1. PENDAHULUAN

Interupsi adalah suatu kejadian atau peristiwa yang menyebabkan mikrokontroler

berhenti sejenak untuk melayani interupsi tersebut. Program yang dijalankan pada saat

melayani interupsi disebut Interrupt Service Routine.

Pada sistem mikrokontroler yang sedang menjalankan programnya, saat terjadi

interupsi , program akan berhenti sesaat, melayani interupsi tersebut dengan

menjalankan program yang berada pada alamat yang ditunjuk oleh vektor dari interupsi

yang terjadi hingga selesai dan kembali meneruskan program yang terhenti oleh

interupsi tadi.

Pengetahuan mengenai interupsi tidak cukup hanya dibahas secara teori saja,

diperlukan contoh program yang konkrit untuk memahami. ATMEGA8535 memiliki 21

buah sumber interupsi. Interupsi tersebut bekerja jika bit I pada Register status atau

Status Register (SREG) dan bit pada masing-masing register bernilai 1.

5.2. RANGKAIAN INTERUPSI EKTERNAL

Rangkaian berikut digunakan untuk interupsi ekternal mikrokontroller.

Rangkaian tersebut menggunakan interupsi eksternal 0, 1, dan 2 yang menggunakan

tampilan LED yang dihubungkan pada Port A.

Page 70: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

41

12

P6

P3

12

INT2U4

ATMEGA16

3

1213

2

16171819

1110

876

3635343332

37

1

45

9

1415

20 21

403938

31302928272625242322

PB2(INT2/AIN0)

XTAL2XTAL1

PB1(T1)

PD2(INT0)PD3(INT1)PD4(OC1B)PD5(OC1A)

GNDVCC

PB7[SCK)PB6[MISO)PB5(MOSI)

PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)

AREF

PA3(ADC3)

PB0(XCK/T0)

PB3(OC0/AIN1)PB4(SS)

RESET

PD0(RXD)PD1(TXD)

PD6(ICP) PD7(OC2)

PA0(ADC0)PA1(ADC1)PA2(ADC2)

AGNDAVCC

PC7(TOSC2)PC6(TOSC1)

PC5PC4PC3PC2

PC1(SDA)PC0(SCL)

RST

C2 22pF

12

VCC

P7

RST

SW2

12

L112

JISP

HEADER 5

12345

X1

VCC

P5

VCC

12R1

C3 100nF1

P5

P4

P2

VCC

GND

INT1

12

VCC

P6

P7

C1 22pF VCC

P112

P0

INT0

12

VCC

Gambar 6.1. Rangkaian interupsi ekternal mikrokontroller

5.2.1. PEMROGRAMAN INTERUPSI EKTERNAL INT0

Setelah membuat rangkaian interupsi ekternal untuk menghidupkan LED, maka

sekarang saatnya Anda membuat program yang digunakan untuk menghidupkan LED

dengan menggunakan interupsi external 0.

Program sebagai berikut ini

//------------------------------------------------------ //Program rutin interupsi eksternal 0 //------------------------------------------------------ #include <mega8535.h> #include <delay.h> #include <stdio.h> unsigned char dt=0x01; void InisialisasiINT0(); void main (void) { DDRA=0xff; InisialisasiINT0(); #asm ("sei"); while(1)

Page 71: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

42

{ PORTA=dt; delay_ms(100); dt=dt<<1; if (dt==0) {dt=0x01;} } } interrupt [EXT_INT0] void ext_int0_isr(void) { unsigned char rr=0; while (rr<5) { PORTA=0x0f; delay_ms(5); PORTA=0xf0; delay_ms(5); ++rr; } } void InisialisasiINT0 () { GICR|=0x80; MCUCR=0x0C; MCUCSR=0x00; GIFR=0x80; }

Cara kerja program:

Pada program rutin interupsi eksternal 0, di perlukan deklarasi register untuk

mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi register, maka program

akan masuk ke dalam program utama. Program ini akan menginisialisasi interupsi

ekternal 0 dan akan mengaktifkan interupsi ekternal 0. Sebelum terjadi interupsi

eksternal mikrokontroller mengeluarkan data 0x01 pada port A. Kemudian data tersebut

di geser ke kiri, sehingga led akan bergeser ke kanan. Saat terjadi interupsi maka

mikrokontroller akan mengeluarkan data flip-flop pada port A

Page 72: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

43

5.2.2. PEMROGRAMAN INTERUPSI EKTERNAL INT1

Setelah membuat rangkaian interupsi ekternal int 1, maka sekarang saatnya Anda

membuat program yang digunakan untuk menghidupkan LED dengan menggunakan

interupsi external int1

Program sebagai berikut ini

//------------------------------------------------------ //Program rutin interupsi eksternal 1 //------------------------------------------------------ #include <mega8535.h> #include <delay.h> #include <stdio.h> unsigned char dt=0x01; void InisialisasiINT1(); void main (void) { DDRA=0xff; InisialisasiINT1(); #asm ("sei"); while(1) { PORTA=dt; delay_ms(100); dt=dt<<1; if (dt==0) {dt=0x01;} }; } interrupt [EXT_INT1] void ext_int1_isr(void) { unsigned char rr=0; while (rr<5) { PORTA=0x0f; delay_ms(5); PORTA=0xf0; delay_ms(5); ++rr; } } void InisialisasiINT1() { GICR|=0x80; MCUCR=0x0C; MCUCSR=0x00; GIFR=0x80; }

Page 73: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

44

Cara kerja program:

Pada program rutin interupsi eksternal 1, di perlukan deklarasi register untuk

mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi register, maka program

akan masuk ke dalam program utama. Program ini akan menginisialisasi interupsi

ekternal 1 dan akan mengaktifkan interupsi ekternal 1. Sebelum terjadi interupsi

eksternal mikrokontroller mengeluarkan data 0x01 pada port A. Kemudian data tersebut

di geser ke kiri, sehingga led akan bergeser ke kanan. Saat terjadi interupsi maka

mikrokontroller akan mengeluarkan data flip-flop pada port A

5.3. RANGKAIAN INTERUPSI TIMER MIKROKONTROLLER

Rangkaian berikut digunakan untuk interupsi ekternal mikrokontroller.

Rangkaian tersebut menggunakan interupsi timer 0 dan 1 yang menggunakan tampilan

LED yang dihubungkan pada Port D.

X1

C3 100nF1

C1 22pF

P4P3

RST

P5

JISP

HEADER 5

12345

C2 22pF

P6P7

1 2

1 2

R1

1 2

VCCVCC

P6

1 2

1 2

U4

ATMEGA16

3

1213

2

16171819

1110

876

3635343332

37

1

45

9

1415

20 21

403938

31302928272625242322

PB2(INT2/AIN0)

XTAL2XTAL1

PB1(T1)

PD2(INT0)PD3(INT1)PD4(OC1B)PD5(OC1A)

GNDVCC

PB7[SCK)PB6[MISO)PB5(MOSI)

PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)

AREF

PA3(ADC3)

PB0(XCK/T0)

PB3(OC0/AIN1)PB4(SS)

RESET

PD0(RXD)PD1(TXD)

PD6(ICP) PD7(OC2)

PA0(ADC0)PA1(ADC1)PA2(ADC2)

AGNDAVCC

PC7(TOSC2)PC6(TOSC1)

PC5PC4PC3PC2

PC1(SDA)PC0(SCL)

VCC

GND

P0

P2

L11 2

P5

1 2

P1

P7

RST

1 2

SW2

12

Gambar 6.2. Rangkaian interupsi timer mikrokontroller

Page 74: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

45

5.3.1. PEMROGRAMAN INTERUPSI TIMER 0

Setelah membuat rangkaian interupsi timer untuk menghidupkan LED, maka

sekarang saatnya Anda membuat program yang digunakan untuk menghidupkan LED

dengan menggunakan interupsi timer 0.

Program sebagai berikut ini

//------------------------------------------------------ // Program INTERUPSI TIMER 0 //------------------------------------------------------ #include <mega8535.h> #include <delay.h> #include <stdio.h> unsigned char led=0xfe; void InisialisasiTIMER0(); void main (void) { DDRD=0xff; InisialisasiTIMER0(); #asm ("sei"); while(1); } interrupt [TIM0_OVF] void timer0_overflow(void) { TCNT0=0x00; led<<=1; led|=1; if (led==0xff) led=0xfe; PORTD=led; } void InisialisasiTIMER0() { TCNT0=0x00; TCCR0=0x05; TIMSK=0x01; TIFR=0x01; }

Cara kerja program:

Pada program rutin interupsi timer 0, di perlukan deklarasi register untuk

mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi register, maka program

akan masuk ke dalam program utama. Program ini akan menginisialisasi interupsi timer

0 dan akan mengaktifkan interupsi timer 0. sebelum interupsi mikrokontroller akan

menyalakan led, setelah interupsi led geser kanan.

Page 75: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

46

5.3.2. PEMROGRAMAN INTERUPSI TIMER 1

Setelah membuat rangkaian interupsi timer untuk menghidupkan LED, maka

sekarang saatnya Anda membuat program yang digunakan untuk menghidupkan LED

dengan menggunakan interupsi timer 1.

Program sebagai berikut ini

//------------------------------------------------------ // Program INTERUPSI TIMER 1 //------------------------------------------------------ #include <mega8535.h> #include <delay.h> #include <stdio.h> unsigned char led=0xfe; void InisialisasiTIMER1(); void main (void) { DDRD=0xff; InisialisasiTIMER1(); #asm ("sei"); while(1); } interrupt [TIM1_OVF] void timer1_ovf_isr(void) { TCNT1L=0x00; TCNT1H=0x00; led<<=1; led|=1; delay_ms(100); if (led==0xff) led=0xfe; PORTD=led; } void InisialisasiTIMER1() { TCNT1L=0x00; TCNT1H=0x00; TCCR1A=0x00; TCCR1B=0x01; TIMSK=0x04; TIFR=0x04; }

Cara kerja program:

Pada program rutin interupsi timer 1, di perlukan deklarasi register untuk

mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi register, maka program

akan masuk ke dalam program utama. Program ini akan menginisialisasi interupsi timer

Page 76: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

47

1 dan akan mengaktifkan interupsi timer 1. sebelum interupsi mikrokontroller akan

menyalakan led, setelah interupsi led geser kanan.

5.3.3. PEMROGRAMAN INTERUPSI TIMER 2

Setelah membuat rangkaian interupsi timer untuk menghidupkan LED, maka

sekarang saatnya Anda membuat program yang digunakan untuk menghidupkan LED

dengan menggunakan interupsi timer 2.

Program sebagai berikut ini

//------------------------------------------------------ // Program INTERUPSI TIMER 2 //------------------------------------------------------ #include <mega8535.h> #include <delay.h> #include <stdio.h> unsigned char led=0xfe; void InisialisasiTIMER2(); void main (void) { DDRD=0xff; InisialisasiTIMER2(); #asm ("sei"); while(1); } interrupt [TIM2_OVF] void timer2_ovf_isr(void) { TCNT2=0x00; led<<=1; led|=1; delay_ms(100); if (led==0xff) led=0xfe; PORTD=led; } void InisialisasiTIMER2() { TCCR2=0x05; TCNT2=0x00; TIMSK=0x40; TIFR=0x40; }

Cara kerja program:

Pada program rutin interupsi timer 2, di perlukan deklarasi register untuk

mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi register, maka program

akan masuk ke dalam program utama. Program ini akan menginisialisasi interupsi timer

Page 77: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

48

2 dan akan mengaktifkan interupsi timer 2. sebelum interupsi mikrokontroller akan

menyalakan led, setelah interupsi led geser kanan.

5.4. RANGKAIAN INTERUPSI SERIAL

Rangkaian berikut digunakan untuk interupsi serial mikrokontroller. Rangkaian

tersebut menggunakan interupsi serial yang menggunakan tampilan LED yang

dihubungkan pada Port A.

PD2

PD0

12

ADD12

P1

ADD9

DATA2

VCC

12P5P6

P6

U4

ATMEGA16

3

1213

2

16171819

1110

876

3635343332

37

1

45

9

1415

20 21

403938

31302928272625242322

PB2(INT2/AIN0)

XTAL2XTAL1

PB1(T1)

PD2(INT0)PD3(INT1)PD4(OC1B)PD5(OC1A)

GNDVCC

PB7[SCK)PB6[MISO)PB5(MOSI)

PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)

AREF

PA3(ADC3)

PB0(XCK/T0)

PB3(OC0/AIN1)PB4(SS)

RESET

PD0(RXD)PD1(TXD)

PD6(ICP) PD7(OC2)

PA0(ADC0)PA1(ADC1)PA2(ADC2)

AGNDAVCC

PC7(TOSC2)PC6(TOSC1)

PC5PC4PC3PC2

PC1(SDA)PC0(SCL)

ADD13

ADD15

12

ADD8

JSerial1

HEADER 3

123

RX1

+ C4

1uF 16V

C2 22pF

PD1

P3

C3 100nF1

X1

RST

ADD11

DATA4

P5

P4

PD4

ADD10

GND

VCCP2

PD6

12

12

DATA112

VCC

L112

RST

PD3

P0

12

ADD14

VCC

PD5

P7DATA6

C1 22pF

PD7

+

C91uF 16V

+ C5

1uF 16V

DATA3

DATA5

+ C8

1uF 16V

SW2

12

DATA7

U6

MAX232

138 11

10

1

3

4

5

2 6

12

9147 R1IN

R2IN T1IN

T2IN

C+

C1-

C2+

C2-

V+ V-

R1OUT

R2OUTT1OUTT2OUTTX1

R1

P7

JISP

HEADER 5

12345

DATA0

Gambar 6.3. Rangkaian interupsi serial mikrokontroller

5.4.1. PEMROGRAMAN INTERUPSI SERIAL

Setelah membuat rangkaian interupsi serial untuk menghidupkan LED, maka

sekarang saatnya Anda membuat program yang digunakan untuk menghidupkan LED

dengan menggunakan interupsi serial.

Page 78: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

49

Program sebagai berikut ini

//------------------------------------------------------ // Program INTERUPSI SERIAL //------------------------------------------------------ #include <mega8535.h> #include <delay.h> #include <stdio.h> #define RXC 7 #define FE 4 #define UPE 2 #define OVR 3 #define FRAMING_ERROR (1<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<OVR) #define RX_BUFFER_SIZE 8 char rx_buffer[RX_BUFFER_SIZE]; unsigned char led=0xfe; const long int osilator = 12000000; unsigned long int UBRR; #if RX_BUFFER_SIZE<256 unsigned char rx_wr_index,rx_rd_index,rx_counter; #else unsigned int rx_wr_index,rx_rd_index,rx_counter; #endif bit rx_buffer_overflow; interrupt [USART_RXC] void usart_rx_isr(void) { char status,data; status=UCSRA; data=UDR; if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) { rx_buffer[rx_wr_index]=data; if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0; if (++rx_counter == RX_BUFFER_SIZE) { rx_counter=0; rx_buffer_overflow=1; }; }; PORTA = data; } void InisialisasiUSART (unsigned long int baud_rate); void main(void) { DDRA = 0xFF; PORTA = 0x00;

Page 79: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

50

InisialisasiUSART(9600); putsf("Selamat Datang Mas Iswanto"); #asm("sei") while (1) { led<<=1; led|=1; delay_ms(100); if (led==0xff) led=0xfe; PORTA=led; }; } void InisialisasiUSART (unsigned long int baud_rate) { UBRR = (osilator/(16*baud_rate))-1; UBRRL = UBRR; UBRRH = UBRR>>8; UCSRA=0x00; UCSRB=0x98; UCSRC=0x86; }

Cara kerja program:

Pada program rutin interupsi serial, di perlukan deklarasi register untuk

mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi register, maka program

akan masuk ke dalam program utama. Program ini akan menginisialisasi interupsi serial

dan akan mengaktifkan serial. Sebelum interupsi mikrokontroller maka program akan

mengerjakanprogram geser led ke kanan. Dan jika terjadi interupsi maka PORT A akan

mengeluarkan data karakter dari serial transmisi.

Page 80: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

51

BAB VI LCD

6.1. PENDAHULUAN

Kemampuan dari LCD untuk menampilkan tidak hanya angka-angka, tetapi juga

huruf-huruf, kata-kata dan semua sarana simbol, lebih bagus dan serbaguna daripada

penampil-penampil menggunakan 7-segment LED (Light Emiting Diode) yang sudah

umum. Modul LCD mempunyai basic interface yang cukup baik, yang mana sesuai

dengan minimum system 8031. Sesuai juga dengan keluarga mikrokontroler yang lain.

Bentuk dan ukuran modul-modul berbasis karakter banyak ragamnya, salah satu variasi

bentuk dan ukuran yang tersedia dan dipergunakan pada peralatan ini adalah 16x 2

karakter (panjang 16, baris 2, karakter 32) dan 16 pin.

6.2. M1632 MODULE LCD 16 X 2 BARIS (M1632)

M1632 adalah merupakan modul LCD dengan tampilan 16 x 2 baris dengan

konsumsi daya yang rendah. Modul ini dilengkapi dengan mikrokontroler yang didisain

khusus untuk mengendalikan LCD. Mikrokontroler HD44780 buatan Hitachi yang

berfungsi sebagai pengendali LCD ini mempunyai CGROM (Character Generator Read

Only Memory), CGRAM (Character Generator Random Access Memory) dan DDRAM

(Display Data Random Access Memory).

Page 81: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

52

6.3. FUNGSI PIN-PIN MODUL LCD

Modul LCD berukuran 16 karakter x 2 baris dengan fasilitas back lighting

memiliki 16 pin yang terdiri dari 8 jalur data, 3 jalur kontrol dan jalur-jalur catu daya:

Gambar 6.1. Pin-pin modul LCD

1. Pin 1 dan 2

Merupakan sambungan catu daya, Vss, dan Vdd. Pin Vdd dihubungkan

dengan tegangan positif catu daya, dan Vss pada 0 volt atau ground.

2. Pin 3

Merupakan pin kontrol Vcc yang digunakan untuk mengatur kontras

display.

3. Pin 4

Merupakan register select (RS), masukan yang pertama dari tiga

command control input. Dengan membuat RS menjadi high, data karakter dapat

ditransfer dari dan menuju modulnya.

Page 82: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

53

4. Pin 5

Read/Write (R/W). Untuk memfungsikan sebagai perintah Write maka

R/W low atau menulis karakter ke modul.

5. Pin 6

Enable (E), input ini digunakan untuk transfer aktual dari perintah-

perintah atau karakter antara modul dengan hubungan data.

6. Pin 7 sampai 14

Pin 7 sampai 14 adalah delapan jalur data (D0 – D7) dimana data dapat

ditransfer ke dan dari display.

7. Pin 15 dan 16

Pin 15 atau A (+) mempunyai level DC +5 V berfungsi sebagai LED

backlight + sedangkan pin 16 yaitu K (-) memiliki level 0 V

6.4. RANGKAIAN LCD

Rangkaian LCD adalah rangkaian untuk menghubungkan LCD secara langsung

dari port keluaran mikrokontroller dengan input LCD.

ADC4

VCC

pinb.7

D3

1N4002

AC

VCC

ADC5

pinb.5

VCC

pinb.7

X1

Rreset

pinb.6ADC7

pinb.6

C1 22pF

RS_LCDRST

J5

HEADER 5

12345

pinb.7

ADC5

VCC

C2 22pF

VCC

RS_LCD

RST

J16.

HEADER 16

123456789

10111213141516

pinb.7

ADC6

pinb.6pinb.6

C3 100nFSW1

12

VCC

E_LCD

pinb.5

ADC4ADC6

ADC7

U1

ATMEGA16

3

1213

2

16171819

1110

876

3635343332

37

1

45

9

1415

20 21

403938

31302928272625242322

PB2(INT2/AIN0)

XTAL2XTAL1

PB1(T1)

PD2(INT0)PD3(INT1)PD4(OC1B)PD5(OC1A)

GNDVCC

PB7[SCK)PB6[MISO)PB5(MOSI)

PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)

AREF

PA3(ADC3)

PB0(XCK/T0)

PB3(OC0/AIN1)PB4(SS)

RESET

PD0(RXD)PD1(TXD)

PD6(ICP) PD7(OC2)

PA0(ADC0)PA1(ADC1)PA2(ADC2)

AGNDAVCC

PC7(TOSC2)PC6(TOSC1)

PC5PC4PC3PC2

PC1(SDA)PC0(SCL)

E_LCDR9

5k

Gambar 6.2. Rangkaian LCD mikrokontroller

Page 83: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

54

6.4.1. PEMROGRAMAN LCD

Setelah membuat rangkaian LCD, maka sekarang saatnya Anda membuat

program LCD.

Program sebagai berikut ini

//-------------------------------------------------------//Program LCD //-------------------------------------------------------#include <mega8535.h> #include <delay.h> #include <stdio.h> #asm .equ __lcd_port=0x18;PORTB #endasm #include <lcd.h> void main(void) { lcd_init(16); lcd_gotoxy(0,0); lcd_putsf("Halo Iswanto"); delay_ms(100); lcd_gotoxy(0,1); lcd_putsf("T.ELEKTRO"); delay_ms(100); lcd_gotoxy(5,0); lcd_putsf("UMY "); delay_ms(100); while (1); }

Cara kerja program:

Pada program LCD, di perlukan deklarasi register untuk mikrokontroller jenis

ATMEGA8535. Setelah mendeklarasi register, maka program akan masuk ke dalam

program utama. Program ini akan menginisialisasi LCD dan akan menampilkan

karakter dan tulisan di LCD. Tulisan pertama adalah Halo Iswanto yang akan

ditampilkan pada baris pertama, dan akan ditampilkan di baris kedua berupa tulisan D3

Page 84: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

55

T.Elektro. Kemudian pada baris ke satu kolom ke lima tulisan iswanto akan diganti

tulisan UGM

Page 85: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

51

BAB VII APLIKASI SEVEN SEGMEN

7.1. PENDAHULUAN

Peralatan keluaran yang sering digunakan dalam menampilkan bilangan adalah

penampil seven segmen yang ditunjukkan pada gambar 4.1 (a). tujuh segmen tersebut

dilabelkan dengan huruf a sampai g.

a

f b

g

e c

d

(a) (b)

Gambar 7.1. (a) Tampilan Fisik LED, (b) Skema dalam LED

Peraga seven segmen dapat dibuat dalam berbagai cara. Tiap tujuh segmen

tersebut dapat berupa filamen tipis yang berpijar. Jenis peraga ini disebut peraga pijar

(meandescent display), dan sama dengan bola lampu biasa. Peraga jenis lain adalah

LCD (liquid crystal display), peraga cairan, yang ,menghasilkan angka – angka

berwarna kelabu atau puth perak. Dioda pemancar cahaya (LED, Light Emiting Dioda)

menghasilkan cahaya kemerah – merahan. Pada peraga LED, LED membutuhkan arus

khusus sebesar 20 mA. Karena berupa dioda, LED sensitif terhadap polaritas. Katoda

Page 86: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

52

(K) harus dihubung ke negatif (GND) dari catu daya dan Anoda (A) dihubung ke positif

dari catu daya. Seven segmen ini mempunyai 2 tipe yaitu common anoda dan common

katoda. Gambar 4.1(b) memperlihatkan catu daya yang dihubungkan ke seven segmen

common anoda.

7.2. RANGKAIAN SEVEN SEGMENT TUNGGAL 1

Rangkaian seven segment tunggal adalah rangkaian untuk menggerakkan

penampil 7 segment secara langsung dari port keluaran mikrokontroller. Penampil seven

segment yang digunakan common anoda. Data yang digunakan untuk menghasilkan

angka atau huruf tertentu didapatkan dengan cara seperti pada Tabel 4.1

10985421

6

3

P2

PD5

P6

P7

PD2

P4

P1

PD3

PD4

PD0

PD1

VCC

R1

U4

ATMEGA16

3

1213

2

16171819

1110

876

3635343332

37

1

45

9

1415

20 21

403938

31302928272625242322

PB2(INT2/AIN0)

XTAL2XTAL1

PB1(T1)

PD2(INT0)PD3(INT1)PD4(OC1B)PD5(OC1A)

GNDVCC

PB7[SCK)PB6[MISO)PB5(MOSI)

PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)

AREF

PA3(ADC3)

PB0(XCK/T0)

PB3(OC0/AIN1)PB4(SS)

RESET

PD0(RXD)PD1(TXD)

PD6(ICP) PD7(OC2)

PA0(ADC0)PA1(ADC1)PA2(ADC2)

AGNDAVCC

PC7(TOSC2)PC6(TOSC1)

PC5PC4PC3PC2

PC1(SDA)PC0(SCL)

P6

PD5

PD4

C1 22pF

VCC

PD7

PD6

C3 100nF1

P5

P5

SW2

12

P3

PD0

VCC

RST

PD7

P0

PD3

JISP

HEADER 5

12345

C2 22pF

PD6

RSTP7

X1

VCC

PD2

GND

PD1

Gambar 7.2. Rangkaian aplikasi penggerak seven segmen tunggal

Page 87: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

53

Tabel 7.1 Data Karakter Angka Pada 7 Segment

7.2.1. PEMROGRAMAN SEVENT SEGMENT TUNGGAL 1

Setelah rangkaian seven segment dibuat dan dihubungkan dengan port pararel

mikrokontroller, maka sekarang saatnya anda membuat program Program Seven

Segment 1. Program ini digunakan untuk menampilkan data 3 dan 2 secara bergantian.

Program sebagai berikut ini

//-------------------------------------------------------// Program Sevent Segmen Tunggal //-------------------------------------------------------#include <mega8535.h> #include <delay.h> void bin7seg(unsigned char data1) { switch(data1) { case 0 : PORTD = 0xc0; break; case 1 : PORTD = 0xf9; break;

b7 b6 b5 b4 b3 b2 b1 b0 HEX

dp g f e d c b a DATA

0 1 1 0 0 0 0 0 0 COH

1 1 1 1 1 1 0 0 1 F9H

2 1 0 1 0 0 1 0 0 A4H

3 1 0 1 1 0 0 0 0 BOH

4 1 0 0 1 1 0 0 1 99H

5 1 0 0 1 0 0 1 0 92H

6 1 0 0 0 0 0 1 0 82H

7 1 1 1 1 1 0 0 0 F8H

8 1 0 0 0 0 0 0 0 80H

9 1 0 0 1 0 0 0 0 90H

Page 88: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

54

case 2 : PORTD = 0xa4; break; case 3 : PORTD = 0xb0; break; case 4 : PORTD = 0x99; break; case 5 : PORTD = 0x92; break; case 6 : PORTD = 0x82; break; case 7 : PORTD = 0xf8; break; case 8 : PORTD = 0x80; break; case 9 : PORTD = 0x90; break; } } void main(void) { DDRD=0xFF; while(1) { bin7seg(0); delay_ms(100); bin7seg(2); delay_ms(100); } }

Cara kerja program:

Pada program Sevent Segmen Tunggal, di perlukan deklarasi register untuk

mikrokontroller jenis ATMEGA8535. Setelah mendeklarasi register, maka program

akan masuk ke dalam program utama. Di dalam program utama, mikrokontroller akan

mengeluarkan data angka 0. Data tesebut di konversi BCD ke karakter 7-segment dan

akan di keluarkan oleh mikrokontroller dengan menggunakan PORT D. Kemudian

Page 89: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

55

memanggil tunda 100 mili sekon dan memangil data angka 2 Instruksi while

merupakan instruksi perulangan, sehingga mikrokontroller akan mengeluarkan data

secara terus menerus.

7.3. APLIKASI SEVEN SEGMENT TERMULTIPLEKS

Rangkaian seven segment termultipleks Seven Segment adalah rangkaian untuk

menggerakkan 4 buah penampil 7 segment secara langsung dari port keluaran

mikrokontroller dengan data input Seven Segment. 7-segment ini dikendalikan oleh

transistor bc337.

DATA1

P6

DATA0

DATA2

VCC

10 9 7 6 4 2 1

8

10 9 7 6 4 2 1

8

DATA2

RST

P5P4

P2

R1

P0 P0

10 9 7 6 4 2 1

8

DATA3 P3

RT2 330

P5

P7

P2

Q3BC337

1

2

3

P4

P3DATA3

10 9 7 6 4 2 1

8

Q2BC337

1

2

3

Q4BC337

1

2

RT3 330

DATA0

P1

DATA1

VCC

VCC

Q1BC337

1

2

3

VCC

P6

SW2

12

U4

ATMEGA32

3

1213

2

16171819

1110

876

3635343332

37

1

45

9

1415

20 21

403938

31302928272625242322

PB2(INT2/AIN0)

XTAL2XTAL1

PB1(T1)

PD2(INT0)PD3(INT1)PD4(OC1B)PD5(OC1A)

GNDVCC

PB7[SCK)PB6[MISO)PB5(MOSI)

PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)

AREF

PA3(ADC3)

PB0(XCK/T0)

PB3(OC0/AIN1)PB4(SS)

RESET

PD0(RXD)PD1(TXD)

PD6(ICP) PD7(OC2)

PA0(ADC0)PA1(ADC1)PA2(ADC2)

AGNDAVCC

PC7(TOSC2)PC6(TOSC1)

PC5PC4PC3PC2

PC1(SDA)PC0(SCL)

P0

P1VCC

C3 100nF1

VCC

P0

RT4 330

VCC

RT1 330

Gambar 7.3. Rangkaian aplikasi penggerak seven segmen termultipleks

Page 90: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

56

7.4. PEMROGRAMAN SEVENT SEGMENT TERMULTIPLEKS

Setelah rangkaian sevent segment dibuat dan dihubungkan dengan port pararel

mikrokontroller, maka sekarang saatnya Anda membuat program yang digunakan untuk

menampilkan data 1512 dan 4123 pada seven segment.

Program sebagai berikut ini

//------------------------------------------------------- //Program Sevent Segment Termultipleks //------------------------------------------------------- #include <mega8535.h> #include <delay.h> unsigned char data1; void bin7seg() { switch(data1) { case 0 : PORTD = 0xc0; break; case 1 : PORTD = 0xf9; break; case 2 : PORTD = 0xa4; break; case 3 : PORTD = 0xb0; break; case 4 : PORTD = 0x99; break; case 5 : PORTD = 0x92; break; case 6 : PORTD = 0x82; break; case 7 : PORTD = 0xf8; break; case 8 : PORTD = 0x80; break; case 9 :

Page 91: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

57

PORTD = 0x90; break; } } void display(unsigned int x) { int digit1; int digit2; int digit3; int digit4; digit4=x/1000; digit3=(x-digit4*1000)/100; digit2=(x-digit4*1000-digit3*100)/10; digit1=(x-digit4*1000-digit3*100-digit2*10); PORTD=0x00; data1=digit4; bin7seg(); PORTD=0x10; data1=digit4; bin7seg(); PORTD=0x30; data1=digit4; bin7seg(); PORTD=0x70; data1=digit4; bin7seg(); } void main(void) { DDRD=0xFF; while(1) { display(1512); delay_ms(500); display(4123); delay_ms(500); } }

Cara kerja program:

Pada program Program 7-segment 2. Sevent Segmen Termultiplek, di perlukan

deklarasi register untuk mikrokontroller jenis AT89x51. Setelah mendeklarasi register,

maka program akan masuk ke dalam program utama. Di dalam program utama,

mikrokontroller akan mengeluarkan data angka 1512.. Data tersebut akan masuk

kedalam prosedure display untuk mengeluarakan data pada port 3 oleh mikrokontroller.

Page 92: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

58

Kemudian memanggil tunda 1 sekon dan memangil data angka 4123 Instruksi while

merupakan instruksi perulangan, sehingga mikrokontroller akan mengeluarkan data

secara terus menerus.

Page 93: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

58

BAB VIII KEYPAD

8.1. PENDAHULUAN

Keypad 4x3 di sini adalah sebuah keypad matrix dengan susunan empat baris

dan tiga kolom dengan sebuah common.

Gambar 8.1. Konstruksi keypad 4x3 dengan common

Seperti terlihat dalam gambar di atas, apabila saklar ‘1’ ditekan, maka baris 1

dan kolom 1 akan terhubung ke common. Apabila saklar ‘2’ ditekan, maka baris 1 dan

kolom 2 akan terhubung ke common dan seterusnya.

Page 94: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

59

Gambar 8.2. Gambar interface keypad 4x3

Agar keypad tersebut dapat memberian input pada B51PEB, maka terlebih

dahulu keypad ini harus disusun dalam sebuah rangkaian di mana terdapat perbedaan

kondisi pada pin-pinnya antara kondisi tidak ada penekanan tombol, penekanan tombol

1, 2, 3 dan seterusnya.

Kondisi tidak adanya penekanan tombol diatur dengan adanya kondisi logika

high dengan menghubungkan semua pin keypad (kecuali common) ke VCC melalui

resistor pull up. Pada saat tombol tidak ditekan, maka arus akan mengalir dari VCC

melalui resistor menuju ke port seperti tampak pada gambar berikut.

Gambar 8.3. Aliran arus saat tombol tidak ditekan

Page 95: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

60

Sedangkan saat tombol ditekan, maka baris dan kolom akan terhubung ke

ground sehingga kondisi pada baris dan kolom tersebut akan menjadi low. Apabila

tombol ‘1’ ditekan, maka baris 1 dan kolom 1 akan terhubung ke ground sehingga

kondisi baris dan kolom tersebut akan berubah menjadi low, demikian pula pada tombol

‘2’ dan seterusnya sehingga terbentuk tabel berikut.

Tabel 8.1. Tabel kombinasi keypad

8.2. RANGKAIAN PEMBACAAN KEYPAD DENGAN LCD

Rangkaian tombol 4x4 adalah rangkaian untuk membaca tombol 4x4 dari port

keluaran mikrokontroller. Pada saat penekanan tombol key pad, data dari key pad akan

ditampilkan LCD.

Page 96: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

61

S8

SW

S11

SW

PD2

U4

ATMEGA16

3

1213

2

16171819

1110

876

3635343332

37

1

45

9

1415

20 21

403938

31302928272625242322

PB2(INT2/AIN0)

XTAL2XTAL1

PB1(T1)

PD2(INT0)PD3(INT1)PD4(OC1B)PD5(OC1A)

GNDVCC

PB7[SCK)PB6[MISO)PB5(MOSI)

PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)

AREF

PA3(ADC3)

PB0(XCK/T0)

PB3(OC0/AIN1)PB4(SS)

RESET

PD0(RXD)PD1(TXD)

PD6(ICP) PD7(OC2)

PA0(ADC0)PA1(ADC1)PA2(ADC2)

AGNDAVCC

PC7(TOSC2)PC6(TOSC1)

PC5PC4PC3PC2

PC1(SDA)PC0(SCL)

J5

HEADER 5

12345

pinb.6

PD0X1

PD5

S17

SW

PD1

C3 100nF1

pinb.0

SW2

12

D3

1N4002

AC

S5

SW

pinb.6

VCC

S9

SW

PD7

pinb.7

pinb.0

J16.

HEADER 16

123456789

10111213141516

PD1

pinb.6

PD6

C2 22pF

PD4S15

SW

PD6

pinb.6

S12

SW

pinb.5

S18

SW

PD5

S16

SW

RST

PD2

pinb.1

PD7

S6

SW

pinb.7

pinb.7

pinb.2

S13

SW

C1 22pF

PD3

pinb.7

PD0

S10

SW

VCC

pinb.6

pinb.7

S19

SW

pinb.5

R1

PD3

VCC

VCC

pinb.1

R95k

VCC

VCC

S4

SW

S7

SW

S14

SW

pinb.2

pinb.4

PD4

pinb.5

Gambar 8.4. Rangkaian aplikasi tombol keypad dengan lcd

8.2.1. PEMROGRAMAN PEMBACAAN KEYPAD

Setelah rangkaian tombol 4x4 dibuat dan dihubungkan dengan port pararel

mikrokontroller, maka sekarang saatnya Anda membuat program Program pembacaan

tombol. 4x4.

Program sebagai berikut ini

//------------------------------------------------------ //Program KEYPAD LCD //------------------------------------------------------

Page 97: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

62

#include <lcd.h> #include <stdio.h> #include <mega8535.h> #include <delay.h> #asm .equ __lcd_port=0x18;PORTB #endasm unsigned char dt, dtkey; char buf[33]; void inkey(void); void main() { PORTD = 0XFF; DDRD=0xF0; lcd_init(16); lcd_gotoxy(0,1); lcd_putsf("Hello world"); while(1) { inkey(); lcd_gotoxy(0,1); sprintf(buf,"hex %x ",dtkey); lcd_puts(buf); } } void inkey(void) { PORTD.4 = 0; dt = (~PIND & 0x0F); switch (dt) { case 1:dtkey = 0x01; break; case 2:dtkey = 0x05; break; case 4:dtkey = 0x09; break; case 8:dtkey = 0x13; break; } PORTD.4 = 1;PORTD.5 = 0; dt = (~PIND & 0x0F); switch (dt) { case 1:dtkey = 0x02; break; case 2:dtkey = 0x06; break; case 4:dtkey = 0x10;

Page 98: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

63

break; case 8:dtkey = 0x14; break; } PORTD.5 = 1;PORTD.6 = 0; dt = (~PIND & 0x0F); switch (dt) { case 1:dtkey = 0x03; break; case 2:dtkey = 0x07; break; case 4:dtkey = 0x11; break; case 8:dtkey = 0x15; break; } PORTD.6 = 1;PORTD.7 = 0; dt = (~PIND & 0x0F); switch (dt) { case 1:dtkey = 0x04; break; case 2:dtkey = 0x08; break; case 4:dtkey = 0x12; break; case 8:dtkey = 0x16; break; } PORTD.7 = 1; }

Cara kerja program:

Pada Program Tombol, di perlukan deklarasi register untuk mikrokontroller

jenis ATMEGA8535. Setelah mendeklarasi register, maka program akan masuk ke

dalam program utama. Di dalam program utama, mikrokontroller akan membaca data

keypad 4x4 sesuai dengan penekanan tombol. Data keypad akan di tampilkan melalui

LCD

Page 99: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

64

BAB IX ANALOG TO DIGITAL

CONVERTER MIKROKONTROLLER

9.1. PENDAHULUAN

Dalam dunia komputer, semua nilai tegangan dijadikan dalam bentuk digital,

dan menggunakan sistem bilangan biner. Untuk itu dalam sistem ini, karena output dari

sensor suhu berupa tegangan analog, maka diperlukan pengubah tegangan analog ke

digital. ADC (Analog to Digital Converter) adalah suatu piranti yang digunakan untuk

mengubah isyarat analog ke isyarat digital, rangkaian ini digunakan untuk mengubah

isyarat analog dari sensor ke bentuk digital yang nantinya masuk ke komputer.

9.2. ADC ATMEGA8535

ATMEGA8535 merupakan tipe AVR yang dilengkapi dengan 8 saluran ADC

internal dengan fidelitas 10 bit. Dalam mode operasinya, ADC ATMEGA8535 dapat

dikonfigurasi, baik sebagai single ended input maupun pewaktuan, tegangan referensi,

mode operasi, dan kemampuan filter derau yang amat fleksibel sehingga dapat dengan

mudah disesuaikan dengan kebutuhan dari ADC itu sendiri.

Page 100: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

65

Gambar 9.1. Diagram Blok ADC

Proses inisialisasi ADC meliputi proses penentuan clock, tegangan referensi,

format output data, dan mode pembacaan. Register yang perlu diset nilainya adalah

ADMUX (ADC Multiplexer Selection Register), ADCSRA (ADC Control and Status

Register A), dan SFIOR (special Function IO Register). ADMUX merupakan register 8

bit yang berfungsi menentukan tegangan referensi ADC, format data output, dan saluran

ADC yang digunakan. Konfigurasi register ADMUX pada Gambar 9.2.

REF1 REF0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0

Gambar 9.2. Register ADMUX

Page 101: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

66

Bit penyusunnya sebagai berikut:

a. REF[1..0] merupakan bit pengatur tegangan referensi ADC ATMega8535.

Memeiliki Nilai Awal 00 sehingga referensi tegangan berasal dari pin AREF. Detail

nilai yang lain dapat dilihat pada tabel 9.1.

Tabel 9.1. Pemilihan Mode Tegangan Referensi ADC

REF1 REF0 Mode Tegangan Referensi

0 0 Berasal dari pin AREF

0 1 Berasal dari pin AVCC

1 0 Tidak dipergunakan

1 1 Berasal dari tegangan referensi internal 2,56 V

b. ADLAR merupakan bit pemilih mode data keluaran ADC. Bernilai awal 0,

sehingga 2 bit tertinggi data hasil konversinya berada di register ADCH dan 8 bit

sisanya berada di register ADCL, seperti dalam tabel 9.3. Apabila bernilai 1, maka

hasilnya pada tabel 9.4.

– – – – – – ADC9 ADC8

ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0

ADCH

ADCL Gambar 9.3. Format Data ADC dengan ADLAR=0

ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2

ADC1 ADC0 - - - - - -

ADCH

ADCL Gambar 9.4. Format Data ADC dengan ADLAR=1

Page 102: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

67

c. MUX[4..0] merupakan bit pemilih saluran pembacaan ADC. Bernilai awal 00000.

Untuk mode single ended input, MUX[4..0] bernilai dari 00000 hingga 00111,

konfigurasinya dalam tabel 9.2.

Tabel 9.2. Pemilihan Bit Saluran Pembacaan ADC

MUX4..0 Single Ended Input Pos Differential Input Neg Differential Input Gain

00000 ADC0 00001 ADC1

00010 ADC2

00011 ADC3

00100 ADC4

00101 ADC5

00110 ADC6

00111 ADC7

N/A

01000 ADC0 ADC0 10x

01001 ADC1 ADC0 10x

01010 ADC0 ADC0 200x

01011 ADC1 ADC0 200x

01100 ADC2 ADC2 10x

01101 ADC3 ADC2 10x

01110 ADC2 ADC2 200x

01111 ADC3 ADC2 200x

10000 ADC0 ADC1 1x

10001 ADC1 ADC1 1x

10010 N/A ADC2 ADC1 1x

10011 ADC3 ADC1 1x

10100 ADC4 ADC1 1x

10101 ADC5 ADC1 1x

10110 ADC6 ADC1 1x

10111 ADC7 ADC1 1x

11000 ADC0 ADC2 1x

11001 ADC1 ADC2 1x

11010 ADC2 ADC2 1x

11011 ADC3 ADC2 1x

11100

ADC4 ADC2 1x

Page 103: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

68

ADCSRA merupakan register 8 bit yang berfungsi melakukan manajemen sinyal

kontrol dan status dari ADC. Memiliki susunan dalam tabel 9.5.

ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0

Gambar 9.5. Register ADCSRA

Bit penyusunnya sebagai berikut:

a. ADEN merupakan bit pengatur aktivasi ADC. Bernilai awal 0. Jika bernilai 1,

maka ADC aktif.

b. ADSC merupakan bit penanda mulainya konversi ADC. Bernilai awal 0 selama

konversi ADC akan bernilai 1, sedangkan jika konversi selesai, akan bernilai 0.

c. ADATE merupakan bit pengatur aktivasi picu otomatis operasi ADC. Bernilai

awal 0, jika bernilai1 maka konversi ADC akan dimulai pada saat transisi positif

dari sinyal picu yang diplih. Pemiliha sinyal picu menggunakan bit ADTS pada

register SFIOR.

d. ADIF merupakan bit penanda akhir suatu konversi ADC. Bernilai awal 0. Jika

bernilai 1, maka konversi ADC pada saluran telah selesai dan data siap diakses.

e. ADIE merupakan bit pengatur aktivasi interupsi yang berhubungan dengan akhir

konversi ADC. Bernilai awal 0. Jika berniali 1 dan jika konversi ADC telah

selesai, sebuah interupsi akan dieksekusi.

f. ADPS[2..0] merupakan bit pengatur clock ADC. Bernilai awal 000. Detail nilai

bit dalam tabel 9.2.

Page 104: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

69

Tabel 9.3. Konfigurasi Prescaler ADC

ADPS2 ADPS1 ADPS0 Faktor Pembagi

0 0 0 2

0 0 1 2

0 1 0 4

0 1 1 8

1 0 0 16

1 0 1 32

1 1 0 64

1 1 1 128

SFIOR merupakan register 8 bit pengatur sumber picu konversi ADC, apakah

dari picu eksternal atau dari picu internal. Susunannya dalam tabel 9.2.

ADTS2 ADTS1 ADTS0 – ACME PUD PSR2 PSR10 SFIOR

Gambar 9.6. Register SFIOR

ADTS[2..0] merupakan bit pengatur picu eksternal operasi ADC. Hanya

berfungsi jika bit ADATE pada register ADCSRA bernilai 1. Bernilai awal 000

sehingga ADC bekerja pada mode free running dan tidak ada interupsi yang akan

dihasilkan. Detail nilai ADTS[2..0] dapat dilihat pada tabel 9.3 Untuk Operasi ADC, bit

ACME, PUD, PSR2, dan PSR10 tidak diaktifkan.

.

Page 105: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

70

Tabel 9.4. Pemilihan Sumber Picu ADC

ADTS2 ADTS1 ADTS0 Sumber Picu

0 0 0 Mode Free Running

0 0 1 Komparator Analog

0 1 0 Interrupt External Request 0

0 1 1 Timer/Counter0 Compare Match

1 0 0 Timer/Counter0 Overflow

1 0 1 Timer/Counter1 Compare Match B

1 1 0 Timer/Counter1 Overflow

1 1 1 Timer/Counter1 Capture Event

Dalam proses pembacaan hasil konversi ADC, dilakukan pengecekan terhadap

bit ADIF (ADC Interupt Flag) pada register ADCSRA. ADIF akan benilai satu jika

konversi sebuah saluran ADC telah selesai dilakukan dan data hasil konversi siap untuk

diambil, dan demikian sebaliknya. Data disimpan dalam dua buah register, yaitu ADCH

dan ADCL.

9.3. RANGKAIAN ADC ATMEGA DENGAN LED

Rangkaian minimum untuk membaca ADC dengan tempilan LED ditunjukan

pada Gambar 9.7 yang perlu diperhatikan adalah konfigurasi rangkaian LED yaitu

Common Anode (CA) artinya untuk menghidupkan LED pada Port D, port D harus

dikirim atau diberi logika ‘0’.

Page 106: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

71

P7

GND

C1 22pF

SW2

12

P7

C2 22pF

P3

VCC

RST

VCC

JISP

HEADER 5

12345

1 2

P6

U4

ATMEGA16

3

1213

2

16171819

1110

876

3635343332

37

1

45

9

1415

20 21

403938

31302928272625242322

PB2(INT2/AIN0)

XTAL2XTAL1

PB1(T1)

PD2(INT0)PD3(INT1)PD4(OC1B)PD5(OC1A)

GNDVCC

PB7[SCK)PB6[MISO)PB5(MOSI)

PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)

AREF

PA3(ADC3)

PB0(XCK/T0)

PB3(OC0/AIN1)PB4(SS)

RESET

PD0(RXD)PD1(TXD)

PD6(ICP) PD7(OC2)

PA0(ADC0)PA1(ADC1)PA2(ADC2)

AGNDAVCC

PC7(TOSC2)PC6(TOSC1)

PC5PC4PC3PC2

PC1(SDA)PC0(SCL)1 2

1 2

R1

RST

C3 100nF1

P1

P5

VCC

P2

1 2

VCC

L11 2

1 2

X1

P6

1 2

1 2

P4

R2

POT

13

2

P0

P5

Gambar 9.7. Hasil pemasangan komponen ADC LED

9.4. PEMROGRAMAN ADC ATMEGA8535

Setelah rangkaian adc mikrokontroller ATMEGA8535 dibuat, maka sekarang

saatnya Anda membuat program yang digunakan untuk membaca ADC ATMEGA8535

dan menampilkan data ADC tersebut dengan menggunakan LED yang terhubung pada

PORT D yang konfigurasi rangkaian LED yaitu Common Anode (CA).

Program sebagai berikut ini

//-------------------------------------------------------//Program ADC LED //-------------------------------------------------------#include <mega8535.h> #include <stdio.h> #include <delay.h> unsigned int data_adc; int suhu; #define ADC_VREF_TYPE 0x60 unsigned char read_adc(unsigned char adc_input) { ADMUX=adc_input|ADC_VREF_TYPE; ADCSRA|=0x40; while ((ADCSRA & 0x10)==0); ADCSRA|=0x10;

Page 107: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

72

return ADCH; } void main(void) { DDRD = 0xFF; ADMUX=ADC_VREF_TYPE; ADCSRA=0x87; SFIOR&=0xEF; while (1) { data_adc=read_adc(0); suhu=~data_adc; PORTD = suhu; } }

Cara kerja program:

Pada program ADC LCD, di perlukan deklarasi register untuk mikrokontroller

jenis ATMEGA8535. Setelah mendeklarasi register, maka program akan masuk ke

dalam program utama. Program ini akan membaca adc 1 buah ATMEGA8535 yaitu adc

0 yang datanya akan ditampilkan dengan LED yang konfigurasi rangkaian LED yaitu

Common Anode (CA). Sintac DDRD = 0xFF merupakan ungkapan untuk

mendeklarasikan PORT D sebagai output. Sintac ini ADCSRA=0x87;

SFIOR&=0xEF berfungsi untuk mengisi register ADCSRA dan register SFIOR.

data_adc=read_adc(0)merupakan ungkapan untuk mendapatkan nilai adc 0.

Sintac suhu=~data_adc merupakan ungkapan untuk membalik data adc, karena adc

akan dikeluarkan melalui LED yang konfigurasinya rangkaian LED yaitu Common

Anode (CA), sehingga data yang ditampilkan akan sama dengan nyalanya LED.

Page 108: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

73

9.5. RANGKAIAN ADC ATMEGA DENGAN LCD

Rangkaian minimum untuk membaca ADC dengan tempilan LCD ditunjukan

pada Gambar 9.9.

VCC

P7

VCC

D3

1N4002

AC

P2

PD4

RST

PD7

C1 22pF

GND

PD2PD5

R1

R12

POT

13

2

VCC

P4

P6

R14

POT

13

2

R18

POT

13

2

R15

POT

13

2

VCC

PD7

VCC

PD0

VCCC3 100nF

R13

POT

13

2

RST

X1

C2 22pF

VCC

P5P6

PD6

PD0

JISP

HEADER 5

12345

PD6

SW1

12

P7

P5

P3

P1

U1

ATMEGA8535

3

1213

2

16171819

1110

876

3635343332

37

1

45

9

1415

20 21

403938

31302928272625242322

PB2(INT2/AIN0)

XTAL2XTAL1

PB1(T1)

PD2(INT0)PD3(INT1)PD4(OC1B)PD5(OC1A)

GNDVCC

PB7[SCK)PB6[MISO)PB5(MOSI)

PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)

AREF

PA3(ADC3)

PB0(XCK/T0)

PB3(OC0/AIN1)PB4(SS)

RESET

PD0(RXD)PD1(TXD)

PD6(ICP) PD7(OC2)

PA0(ADC0)PA1(ADC1)PA2(ADC2)

AGNDAVCC

PC7(TOSC2)PC6(TOSC1)

PC5PC4PC3PC2

PC1(SDA)PC0(SCL)

J16.

HEADER 16

123456789

10111213141516

PD1

R95k

R16

POT

13

2

PD2

PD4

P0

R11

POT

13

2

R17

POT

13

2

PD1

PD5

Gambar 9.8. Hasil pemasangan komponen ADC LCD

9.6. PEMROGRAMAN ADC ATMEGA8535 DENGAN LCD

Setelah rangkaian adc mikrokontroller ATMEGA8535 dibuat dan dihubungkan

dengan LCD, maka sekarang saatnya Anda membuat program yang digunakan untuk

membaca ADC ATMEGA8535 dan ditampilkan menggunakan LCD.

Program sebagai berikut ini

//-------------------------------------------------------//Program ADC LCD //-------------------------------------------------------#include <mega8535.h> #include <stdio.h> #include <delay.h> #include <math.h>

Page 109: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

74

#include <stdlib.h> #include <lcd.h> #asm .equ __lcd_port=0x18 ;PORTB #endasm unsigned int data_adc; int suhu,suhu_; char strSuhu[4]; char stra1[4]; #define ADC_VREF_TYPE 0x60 unsigned char read_adc(unsigned char adc_input) { ADMUX=adc_input|ADC_VREF_TYPE; ADCSRA|=0x40; while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCH; } void main(void) { int a1; ADMUX=ADC_VREF_TYPE; ADCSRA=0x87; SFIOR&=0xEF; lcd_init(16); lcd_gotoxy(0,0);lcd_putsf("**ADC ATMEGA8535**"); lcd_gotoxy(0,1);lcd_putsf("CREATED BY 1512"); delay_ms(1000); while (1) { for(a1=0;a1<8;a1++) { lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("ADC"); lcd_gotoxy(5,0); itoa(a1,stra1); lcd_puts(stra1); data_adc=read_adc(a1); suhu=data_adc; itoa(suhu,strSuhu); lcd_gotoxy(0,1); lcd_puts(strSuhu); delay_ms(500); } } }

Page 110: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

75

Cara kerja program:

Pada program ADC LCD, di perlukan deklarasi register untuk mikrokontroller

jenis ATMEGA8535. Setelah mendeklarasi register, maka program akan masuk ke

dalam program utama. Program ini akan membaca adc 8 buah ATMEGA8535 yang

datanya akan ditampilkan dengan LCD. Sintac ini ADCSRA=0x87; SFIOR&=0xEF

berfungsi untuk mengisi register ADCSRA dan register SFIOR.

data_adc=read_adc(0)merupakan ungkapan untuk mendapatkan nilai adc 0.

Sintac suhu=data_adc merupakan ungkapan untuk menyimpan data adc. Kemudian

data tersebut di konversi menjadi desimal dengan sintac itoa(suhu,strSuhu).

Kemudian data tersebut akan ditampilkan melalui LCD.

Page 111: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

76

BAB X PWM ATMEGA8535

10.1. PENDAHULUAN

PWM (Pulse Width Modulation) dapat digunakan untuk mengatur kecepatan

motor, yaitu dengan cara mengatur lebar pulsa (waktu ON) dari tegangan sumbernya

(tegangan DC). Perbandingan antara waktu ON dan waktu OFF disebut duty cycle

(siklus kerja). Semakin besar siklus kerjanya, akan semakin besar pula keluaran yang

dihasilkan, sehingga kecepatan motor akan semakin besar. Pembangkitan sinyal PWM

dengan mikrokontroler memiliki beberapa keuntungan, seperti teknik pemrograman

yang sederhana, dan rangkaian listrik menjadi sederhana.

Mikrokontroler AVR ATMEGA8535 dapat digunakan sebagai pembangkit

gelombang PWM. Mikrokontroler AVR ATMEGA8535 mempunyai PWM yang telah

terintegrasi dalam chip. Keluaran dari PWM tersebut terdapat pada pin 15 (OC1). Untuk

menjalankan program PWM, diperlukan 3 unit register timer, yaitu:

a. Timer/Counter Control Register (TCCR), untuk menentukan mode PWM.

b. Timer/Counter Register (TCNT), digunakan untuk menentukan modulasi

frekuensinya.

c. Output Compare Register (OCR), untuk menentukan nilai siklus kerjanya.

Dalam mikrokontroler ATMEGA8535, terdapat beberapa mode PWM. Mode

PWM yang akan dibahas adalah mode Fast PWM, karena dalam perancangan sistem

robot ini menggunakan mode Fast PWM. Pada mode Fast PWM, semakin besar nilai

OCR, maka akan semakin besar pula siklus kerja yang dihasilkan. Keluaran PWM akan

berlogika tinggi setelah nilai TOP tercapai sampai nilai OCR tercapai dan kemudian

Page 112: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

77

akan berlogika rendah sampai nilai TOP tercapai kembali. Prinsip kerja dari Fast PWM

dapat dilihat pada Gambar 10.1.

nilai counter nilai OCR TOP

Keluaran

Gambar 10.1. Prinsip Kerja Mode Fast PWM

Untuk menghitung siklus kerja digunakan rumus:

%1001

xTOP

OCRD+

= ........................................10.1

Untuk menentukan frekuensi PWM dihitung dengan rumus:

)1( TOPN

ff clockPWM +

= ..........................................10.2

Sedangkan untuk menentukan resolusi PWM digunakan rumus:

.................................10.3

keterangan:

N adalah faktor prescaler (1, 8, 64, 256, atau 1024), dan

TOP adalah nilai tertinggi dari pengaturan counter.

10.2. RANGKAIAN PWM MIKROKONTROLLER

Rangkaian minimum untuk pwm melalui Port D.4 dan Port D.5 ditunjukan pada

Gambar 10.2. Rangkaian tersebut menggunakan diver motor dc yaitu transistor.

Rangkaian driver tersebut akan di hubungkan dengan pin D.4 dan pin D.5.

2log)1log( +

=TOPRPWM

Page 113: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

78

5V

C3 100nF1

pinb.5

X1

5V

RST

R1

SW2

12

TIP9013

TIP3055

U1

ATMEGA8535

3

1213

2

16171819

1110

876

3635343332

37

1

45

9

1415

20 21

403938

31302928272625242322

PB2(INT2/AIN0)

XTAL2XTAL1

PB1(T1)

PD2(INT0)PD3(INT1)PD4(OC1B)PD5(OC1A)

GNDVCC

PB7[SCK)PB6[MISO)PB5(MOSI)

PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)

AREF

PA3(ADC3)

PB0(XCK/T0)

PB3(OC0/AIN1)PB4(SS)

RESET

PD0(RXD)PD1(TXD)

PD6(ICP) PD7(OC2)

PA0(ADC0)PA1(ADC1)PA2(ADC2)

AGNDAVCC

PC7(TOSC2)PC6(TOSC1)

PC5PC4PC3PC2

PC1(SDA)PC0(SCL)

D2

DIODE

D1

DIODE

12V2

JISP

12345

pinb.7

C2 22pF

TIP9013

5V

pinb.7

pinb.6

470 TIP3055

pinb.6

470

MG2

MOTOR DC

12

MG2

MOTOR DC

12

RST

pinb.5

12V2

C1 22pF

Gambar 10.2. Hasil pemasangan komponen rangkaian minimum untuk pwm

10.3. PEMROGRAMAN PWM MIKROKONTROLLER

Setelah rangkaian dibuat dan dihubungkan dengan port mikrokontroller, maka

sekarang saatnya Anda membuat program yang digunakan untuk mengatur putaran

motor dc.

Program sebagai berikut ini

Page 114: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

79

//-------------------------------------------------------//Program Bab 10.1. PWM //-------------------------------------------------------#include <stdio.h> #include <mega8535.h> #include <delay.h> void InisialisasiPWM(); int data1; int data2; void main (void) { InisialisasiPWM(); while(1) { data1 = 50; data2 = 1024; OCR1A=data1; OCR1B=data2; TIFR=0; } } void InisialisasiPWM() { DDRD=0xff; TCCR1A=0xa3; TCCR1B=0x0b; TCNT1=0x0000; }

Cara kerja program:

Pada program ini perlukan deklarasi register untuk mikrokontroller

jenisATMEGA8535. Setelah mendeklarasi register, maka program akan masuk ke

dalam program utama. Program utama ini digunakan untuk mengendalikan putaran dua

buah motor dengan dua PWM. Dengan PWM 50 maka putaran motor tidak terlalu cepat

dan dengan PWM 1024 maka putaran motor akan sepat. Jadi untuk mendapatkan

putaran motor yang sangat cepat maka PWM yang digunakan sangat tinggi dan untuk

mendapatkan putaran sangat pelan maka PWM yang digunakan sangat rendah

Page 115: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

80

BAB XI KOMPARATOR ATMEGA8535

11.1. PENDAHULUAN

Komparator analog merupakan salah satu fitur pada ATMEGA8535. Fitur ini

langsung membandingkan 2 input analog. Karena input analog adalah fungsi altenatif

dari PORT B (PORTB.2 dan PORTB.3) maka PORTB.2 dan PORTB.3 harus kita set

sebagai input dengan menonaktifkan R-pullup internal.

Komparator analog memiliki dua tahap yaitu:

Tahap pertama adalah komparator membandingkan input analog 0(AIN0) dan input

analog 1 (ANI1)

Tahap kedua adalahdari output komparator analog tersebut menuju ke logika flag

interupsi (ACL)

Gambar 6.3. Blok diagram komparator analog

Page 116: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

81

11.2. RANGKAIAN KOMPARATOR

Rangkaian komparator adalah rangkaian untukmembandingkan tegangan input

analog. Yang hasil pembadingan akan di keluarkan melalui LED.

1 2

VCC

1 2

1 2

P1

C1 22pF

JISP

HEADER 5

12345

R1

1 2

P7

P5

P7

VCC

VCC

1 2

R11

POT

13

2

P6

U4

ATMEGA16

3

1213

2

16171819

1110

876

3635343332

37

1

45

9

1415

20 21

403938

31302928272625242322

PB2(INT2/AIN0)

XTAL2XTAL1

PB1(T1)

PD2(INT0)PD3(INT1)PD4(OC1B)PD5(OC1A)

GNDVCC

PB7[SCK)PB6[MISO)PB5(MOSI)

PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)

AREF

PA3(ADC3)

PB0(XCK/T0)

PB3(OC0/AIN1)PB4(SS)

RESET

PD0(RXD)PD1(TXD)

PD6(ICP) PD7(OC2)

PA0(ADC0)PA1(ADC1)PA2(ADC2)

AGNDAVCC

PC7(TOSC2)PC6(TOSC1)

PC5PC4PC3PC2

PC1(SDA)PC0(SCL)

X1

C2 22pF

RST

VCC

R2

POT

13

2

1 2

P0

C3 100nF1

VCC

L11 2

GND

1 2

P5

SW2

12

P6

P4P3P2

RST

Gambar 11.1. Rangkaian komparator analog mikrokontroller

11.3. PEMROGRAMAN KOMPARATOR ANALOG

Setelah membuat rangkaian komparator analog mikrokontroller, maka sekarang

saatnya Anda membuat program komparator analog mikrokontroller.

Program sebagai berikut ini

//-------------------------------------------------------//Program KOMPARATOR //-------------------------------------------------------#include <stdio.h> #include <mega8535.h> #include <delay.h> void InisialisasiCOMPARATOR (); void main() { DDRD=0xFF; InisialisasiCOMPARATOR();

Page 117: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

82

#asm("sei") while(1) { if (ACSR.5==0) {PORTD=0;} else {PORTD=0xff;} } } void InisialisasiCOMPARATOR () { ACSR=0x20; SFIOR=0x00; }

Cara kerja program:

Pada program Bab 10.1. komparator analog, di perlukan deklarasi

register untuk mikrokontroller jenis AT90S2313. Setelah mendeklarasi register, maka

program akan mendeklarasi port D sebagai output dan PORTB.0 dan PORTB.1 sebagai

komparator. Kemudian program masuk ke dalam program utama. Di dalam Program ini

akan membandingkan antara komparator analog 1 dan komparator analog 2. Jika

komparator analog 0 lebih besar dari pada komparator 1 maka LED mati dan sebaliknya

jika komparator analog 1 lebih besar dari pada analog 0 maka LED menyala.

Page 118: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

83

BAB XII EEPROM

12.1. PENDAHULUAN

EEPROM (Electrically Eraseble Programmable Read Only Memori) adalah

salah satu dari tiga tipe memori pada AVR (dua yang lain adalah memori flash dan

SRAM). EEPROM tetap dapat menyimpan data saat tidak di catu daya dan juga dapat

diubah saat program berjalan.

12.2. EEPROM ATMEGA8535

Untuk menulis dalam EEPROM, perlu ditentukan terlebih dahulu data apa yang

akan ditulis serta alamat untuk menulis data. Alamat yang akan ditulis dimasukan ke

dalam EEPROM Address Register (EEAR). Data akan diletakkan dalam EEPROM

Data Register (EEDR).

– – – – – – - EEAR8

EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0

EEARH EEARL

Gambar 12.1. Register EEAR

7 6 5 4 3 2 1 0 MSB LSB

R/W R/W R/W R/W R/W R/W R/W R/W

Gambar 12.2. Register EEDR

7 6 5 4 3 2 1 0

EERIE EEMWE EEWE EERE R/W R/W R/W R/W R/W R/W R/W R/W

Gambar 12.3. Register EEDR

Page 119: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

84

EECR (EEPROM Control Register) digunakan untuk mengontrol operasi dari

EEPROM. Bit penyusunnya dapat dijelaskan sebagai berikut:

Bit 7..4: Bit tidak digunakan

Bit 3: EERIE (EEPROM Ready Interrupt Enable)

Bit 2: EEMWE (EEPROM Master Write Enable)

Bit 1: EEWE (EEPROM Write Eneble)

Bit 0: EERE (EEPROM Read Enable)

12.3. RANGKAIAN EEPROM ATMEGA8535

Rangkaian berikut digunakan untuk membaca dan menulis data eeprom

ATMEGA8535. Rangkaian tersebut menggunakan port.A sebagai output yang

dihubungkan dengan LCD.

P7

P3

PD4

VCC

PD2

P0

VCC

RST

PD1

P7

PD7

U4

ATMEGA16

3

1213

2

16171819

1110

876

3635343332

37

1

45

9

1415

20 21

403938

31302928272625242322

PB2(INT2/AIN0)

XTAL2XTAL1

PB1(T1)

PD2(INT0)PD3(INT1)PD4(OC1B)PD5(OC1A)

GNDVCC

PB7[SCK)PB6[MISO)PB5(MOSI)

PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)

AREF

PA3(ADC3)

PB0(XCK/T0)

PB3(OC0/AIN1)PB4(SS)

RESET

PD0(RXD)PD1(TXD)

PD6(ICP) PD7(OC2)

PA0(ADC0)PA1(ADC1)PA2(ADC2)

AGNDAVCC

PC7(TOSC2)PC6(TOSC1)

PC5PC4PC3PC2

PC1(SDA)PC0(SCL)

VCC

PD5

C3 100nF1

GND

X1

VCC

P5

VCC

J16.

HEADER 16

123456789

10111213141516

D3

1N4002

AC

R95k PD0

JISP

HEADER 5

12345

P6

SW2

12

P1

P5

C2 22pF

P6

C1 22pF

RST

R1

PD6

P4

VCC

P2

Gambar 12.4. Rangkaian membaca dan mengisi eeprom

Page 120: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

85

12.3.1. PEMROGRAMAN MEMBACA DAN MENGISI EEPROM

Setelah membuat rangkaian compas, maka sekarang saatnya Anda membuat

program yang digunakan untuk membaca arah dari compas dan ditampilkan di LCD.

Program sebagai berikut ini

//------------------------------------------------------- //Program EEPROM //------------------------------------------------------- #include <mega8535.h> #include <stdio.h> #include <delay.h> #include <lcd.h> #asm .equ __lcd_port=0x18 ;PORTB #endasm char buf[33]; int alfa; int eeprom *ptr_to_eeprom; void main(void) { int i; 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=*ptr_to_eeprom; lcd_gotoxy(12,1); sprintf(buf,"%x ",i); lcd_puts(buf); while (1) { // Place your code here }; }

Page 121: pelatihan ATMEGA8535 CVAVR1 - Feedback controller ...iswanto.staff.umy.ac.id/files/2011/06/pelatihan-ATMEGA8535-CVAVR.pdf · UNIVERSITAS MUHAMMADIYAH YOGYAKARTA Jalan Lingkar Barat,

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

86

Cara kerja program:

Pada program EEPROM, di perlukan deklarasi register untuk mikrokontroller

jenis ATMEGA8535. Setelah mendeklarasi register, maka program akan masuk ke

dalam program utama. Pada program utama pertama mendeklarasikan LCD.

Kemudian program menyimpan data 55 ke eeprom. Fungsi i=*ptr_to_eeprom;

berfungsi untuk memanggil data eeprom.