SlideShare a Scribd company logo
1 of 66
Download to read offline
1
BAB 1
SOFTWARE COMPILER CODEVISION AVR
1.1 PENGENALAN
CodeVisionAVR merupakan salah satu software gratis yang berfungsi sebagai text editor dalam menulis baris
perintah sekaligus sebagai compiler yang dapat mengubah file sumber menjadi file hexa. Software CodeVisionAVR versi
demo dapat di unduh dari http://www.hpinfotech.ro/html/cvavr.htm atau dari CD yang terdapat pada buku ini.
CodeVisionAVR menyediakan berbagai fasilitas yang memudahkan pengguna. Salah satunya adalah
CodeWizardAVR yang memberikan kemudahan dalam melakukan konfigurasi fungsi-fungsi pin dan fitur yang yang
ingin digunakan. Pengguna dapat membuat dan menjalankan program yang ditulis, kemudian mengujinya langkah demi
langkah sehingga pengguna dapat mengamati perubahan data pada setiap register dan port I/O.
Selain itu juga CodeVisionAVR menyediakan toolbar yang memudahkan pengguna untuk melakukan berbagai
interaksi yang diinginkan dan juga memiliki arena kerja yang cukup leluasa.
1.2 INSTALASI
Agar pengguna dapat menggunakan software CodeVisionAVR maka para pengguna harus meng-instal-nya terlebih
dahulu. Adapun proses instalasi software CodeVisionAVR ini cukup mudah.
1. Klik dua kali master program CodeVisionAVR yang ada di CD buku ini.
2. Ikuti langkah-langkah yang diminta dan lakukan perubahan seperlunya.
3. Setelah selesai, program dapat langsung dijalankan.
1.3 MEMBUAT PROGRAM BARU
Membuat program baru menggunakan CodeVisionAVR tidaklah sulit. Adapun langkah-langkah yang harus
dilakukan adalah sebagai berikut:
1. Jalankan program CodeVisionAVR. Dengan cara klik dua kali pada Icon CodeVisionAVR seperti pada gambar 1.1.
Gambar 1.1 Icon CodeVisionAVR
2. Pada saat jalankan program CodeVisionAVR maka layar kosong tampak seperti pada gambar 1.2.
Gambar 1.2 Tampilan CodeVisionAVR
2
3. Klik Menu File dan pilih New, maka tampil jendela pilihan seperti pada gambar 1.3.
Gambar 1.3 Jendela Pilihan Tipe File
4. Untuk membuat program baru pilihlah Project kemudian klik OK, maka muncul pertanyaan yang menanyakan
apakah kita ingin menggunakan CodeWizardAVR seperti pada gambar 1.4 berikut, kemudian pilih Yes.
Gambar 1.4 Jendela Confirm CodeWizardAVR
5. Jendela CodeWizardAVR tampil seperti gambar 1.5. Pada tab Chip, lakukan konfigurasi seperti pada gambar 1.5.
Gambar 1.5 CodeWizardAVR pada tab Chip
3
6. Selanjutnya pilih tab Ports, lalu lakukan pengaturan seperti pada gambar 1.6.
Gambar 1.6 CodeWizardAVR pada tab Ports
7. Kemudian pilih menu File lalu pilih Generat, Save and Exit. Lalu kita diminta menyimpan tiga jenis file secara
berurut. Dianjurkan simpan ketiga file tersebut dalam sebuah folder yang sama.
8. Setelah selesai, maka program CodeVisionAVR akan tampak seperti gambar 1.7, yang menunjukan bahwa sudah
terdapat program yang telah dikonfigurasi dan siap digunakan atau disisipkan program tambahan.
Gambar 1.7 Program CodeVisionAVR yang terkonfigurasi
4
9. Kemudian sisipkan program utama seperti yang tampak pada gambar 1.8 berikut.
Gambar 1.8 Menyisipkan program utama
10. Setelah selesai kita dapat melakukan kompilasi pada program dengan cara pilih menu Project lalu pilih Build All
atau Ctrl+F9.
11. Jika program sudah benar atau tidak terdapat kesalahan, maka akan tampil jendela informasi seperti gambar 1.9
berikut ini.
Gambar 1.10 Jendela Informasi
12. Kemudian klik OK, dan program siap di download ke rangkaian.
Langlah-langkah diatas adalah proses untuk menghasilkan file dengan bahasa mesin yaitu file dengan ekstensi hexa
(*.hex). File ini dibutuhkan untuk diisi (download) ke IC mikrokontroler, karena mikrokontroler hanya mengerti bahasa
mesin. Tahap-tahap ini akan terus dilakukan setiap membuat program baru.
5
BAB 2
SOFTWARE PROTEUS 7 PROFESSIONAL
2.1 PENGENALAN
Pada umumnya setiap pegguna yang baru mulai belajar mengalami kesulitan untuk mempelajari mikrokontroler
apabila tidak ada pendukung secara langsung seperti pengajar dan peralatan yang memadai. Untuk itu dibutuhkan suatu
sarana yang dapat digunakan untuk mencoba suatu rangkaian mikrokontroler. Salah satunya adalah software Proteus 7
Professional.
Software Proteus 7 Professional ini tidak free, maka pada CD saya hanya bisa memberikan Proteus 7 Professional
versi demo. Penggunaannya tidak jauh berbeda dengan Proteus 7 Professional. Proteus 7 Professional memiliki program
yang dapat berfungsi untuk mensimulasikan rangkaian mikrokontroler seolah-olah pengguna berhadapan dengan
rangkaian yang sesungguhnya. Software Proteus terdiri dari dua program utama yaitu ARES dan ISIS. Dimana masing-
masing program memiliki fungsi yang berbeda. ARES biasa digunakan untuk membuat layout PCB (Printed Circuit
Board), sedangkan ISIS biasa digunakan untuk menggambar schematic rangkaian serta mensimulasikan program.
Pada buku ini hanya menggunakan program ISIS yang digunakan untuk mensimulasikan rangkaian mikrokontroler.
Sedangkan untuk membuat layoutnya silahkan anda pilih sesuai selera mau menggunakan software mana.
2.2 INSTALASI
Untuk instalasi program, tidak jauh berbeda dengan cara menginstal program lain pada umumnya. Yang diinstal
disini adalah software Proteus-nya, namun pada penggunaannya kita hanya akan menggunakan program ISIS-nya saja
yang dapat digunakan sebagai simulator, agar rangkaian mikrokontrolernya tampak seperti rangkaian sesungguhnya.
Adapun proses instalasi nya adalah sebagai berikut :
1. Klik dua kali master program Proteus 7 Professional versi Demo yang ada di CD buku ini atau download dari
http://www.labcenter.co.uk/download/prodemo_download.cfm
2. Ikuti langkah-langkah yang diminta dan lakukan perubahan seperlunya jika dibutuhkan.
3. Setelah selesai, program dapat langsung dijalankan.
2.3 TAMPILAN PROGRAM
Pada software Proteus, kita menggunakan program ISIS yang berfungsi sebagai simulator. Pada program ISIS
banyak sekali fasilitas yang disajikan dan akan memakan banyak waktu jika harus menjelaskan semuanya. Oleh karena
itu saya hanya akan menjelas beberapa saja yang diperlukan. Secara umum tampilan program ISIS pada Software Proteus
7 Professional adalah sebagai berikut :
Gambar 2.1 Tampilan Program ISIS
Keterangan :
1. Editing Window.
2. Overview Window.
3. Object Selector.
1
2
3
6
2.4 MEMBUAT SIMULASI PROGRAM
Dalam membuat simulasi program tidaklah sulit. Namun ada beberapa tahap yang harus dilalui. Secara garis besar
ada 3 tahap, yaitu :
 Pemilihan komponen yang akan digunakan.
 Peletakan komponen dan penyusunan rangkaian.
 Download program pada rangkaian.
Namun sebelum pengguna membuat schematic rangkaian, pengguna harus paham prinsip kerja dari rangkaian yang
ingin dibuat, sehingga pengguna dapat memeriksa kesalahan sedini mungkin pada rangkaian jika terdapat error atau
ketidaksesuaian prinsip kerja pada rangkaian. Untuk mensimulasikan rangkaian mikrokontroler menggunakan program
ISIS ini, pengguna tidak perlu membuat schematic secara ”lengkap”, tapi cukup membuat rangkaian input/output-nya
saja seperti pada gambar-gambar schematic yang nanti akan anda temukan pada contoh-contoh rangkaian.
Pada rangkaian sebenarnya kita menggunakan IC mikrokontroler ATMega8535, tetapi pada simulator tidak terdapat
IC ATMega8535, maka kita menggunakan IC mikrokontroler yang sekelas dengan ATMega8535 yaitu AT90S8535 dan
untuk seterusnya kita akan menggunakan IC tersebut dalam membuat simulasi-simulasi rangkaian pada buku ini.
Berikut ini adalah langkah-langkah membuat simulasi program menggunakan program ISIS :
1. Siapkan gambar rangkaian yang ingin disimulasikan. Contohnya seperti gambar 2.2 berikut.
Gambar 2.2 Rangkaian ATMega8535
2. Jalankan program ISIS dan buka lembar baru. Tampak seperti gambar 2.3 berikut.
Gambar 2.3 Tampilan Jendela baru
Component Mode
Terminal Mode
7
3. Pilih komponen yang akan digunakan, klik Component Mode kemudian tekan tombol Pick Devices. Seperti gambar
2.4 berikut. Dan cari komponen IC Mikrokontroler AT90S8535 dan komponen LED.
Gambar 2.4 Tombol Pick Devices
4. Pilih kategori, dan ambil komponen yang dibutuhkan dengan cara klik dua kali nama komponen yang dipilih seperti
gambar 2.5 berikut.
Gambar 2.5 Jendela Pick Devices
5. Setelah semua komponen terkumpul di bagian Object Selector, klik OK.
6. Pilih toolbar Terminal Mode, ambil komponen Power dan letakkan pada rangkaian, atur posisi komponen pada
Editing Window. Seperti gambar 2.6 berikut.
Gambar 2.6 Posisi komponen
8
7. Hubungkan jalur pada masing-masing komponen sesuai gambar rangkaian sehingga tampak seperti gambar 2.7.
Gambar 2.7 Hubungan Jalur Komponen
8. Gambar rangkaian tidak perlu lengkap seperti aslinya. Yang penting input dan output rangkaian terhubung dengan
komponen yang diinginkan seperti contoh gambar 2.7. Setelah selesai, rangkaian siap disimulasikan dan lihatlah
tampilan yang dihasilkan pada gambar simulasi.
Gambar 2.8 Jendela Edit Component
9. Klik dua kali IC mikrokontroler pada rangkaian, akan muncul jendela Edit Component. Pada bagian Program File,
klik lambang folder, maka akan muncul jendela Select File Name, pilih program LED.HEX yang telah dibuat dan
berhasil di compile sebelumnya. Klik Open, lalu Klik OK.
10. Jalankan simulasi rangkaian dengan cara menekan tombol Play pada bagian sudut kiri bawah.
11. Jika LED pada rangkaian berkedap-kedip, maka berarti rangkaian anda telah berhasil disimulasikan.
9
BAB 3
APLIKASI LAMPU LED
LED (Light Emitting Diode) adalah komponen semikonduktor yang dapat mengemisikan cahaya ketika dialiri arus
listrik. Penggunaan LED sudah sangat populer sehingga banyak digunakan diindustri perangkat elektronika. LED
mempunyai banyak kelebihan yaitu penggunaan arus yang kecil dan dapat menghasilkan cahaya yang bermacam-macam,
sehingga LED banyak digunakan sebagai indikator dan lampu display.
Gambar 3.1 Contoh bentuk dan warna LED
3.1 ANIMASI LED.
Aplikasi lampu LED (Light Emitting Diode) adalah aplikasi yang paling sederhana dan yang paling dasar dalam
mempelajari dasar pengontrolan menggunakan mikrokontroler. Maka dianggap penting sekali memahami prinsip kerja
dari LED ini.
LED terdiri dari 2 kaki yaitu anoda dan katoda, dimana LED akan menyala jika arus mengalir dari anoda ke katoda.
Pada apliksi lampu LED kali ini, kita akan menghubungkan LED ke mikrokontroler melalui Port A. Seperti pada gambar
3.3.
Gambar 3.2 Simbol LED (Light Emitting Diode)
Rangkaian Simulasi Animasi LED.
Gambar 3.3 Rangkaian Lampu Flip-flop
Kedelapan LED kita hubungkan ke PortA dengan menghubungkan semua pin Anoda dari LED ke sumber positif
dari tegangan atau biasa disebut Common Anoda (CA). Maka untuk menyalakan LED, data pada PortA harus diberi data
‟0‟.
10
Tugas Program Aplikasi LED.
Buatlah program baru dengan CodeWizardAVR seperti konfigurasi berikut, kemudian edit program seperti pada gambar.
Program 1. Aplikasi Lampu LED
11
Program 2. Animasi Lampu LED Flip-Flop
Program 3. Animasi LED Bergeser
12
BAB 4
APLIKASI 7 SEGMENT NON-MULTIPLEX
Aplikasi 7 segment sering kita temukan pada keseharian kita terutama pada peralatan elektronik. Biasanya digunakan
untuk menampilkan channel atau track pada televisi atau VCD, pada aplikasi lampu lalu lintas di perempatan jalan dan
pada sistem antriandi Bank atau tempat pelayanan umum lainnya. Pada bab ini akan membahas aplikasi menggunakan 7
segment secara sederhana.
Aplikasi 7 segment Non-Multiplex disini dimaksudkan cara penggunaan 7 segment secara sendiri-sendiri atau
independent. Sebuah 7 segment memiliki 8 buah pin yang masing-masing dihubungkan dengan 1 buah port pada
mikrokontroler. Masing-masing port akan mengontrol 1 buah 7 segment yang digunakan untuk menampilkan 1 digit
angka seperti pada gambar 4.1.
Rangkaian Simulasi 7 Segment Non-Multiplex tanpa decoder
Gambar 4.1 Rangkaian 7 Segment Non-Multiplex
Tugas Program Aplikasi LED.
Buatlah program baru dengan CodeWizardAVR seperti konfigurasi berikut, kemudian edit program seperti pada gambar.
Program 1. Aplikasi 7 Segment 1 digit
13
Program 2. Aplikasi 7 Segment 2 digit
#include <mega8535.h>
#include <delay.h>
void satuan()
{
PORTC=0x40;
delay_ms(500);
PORTC=0x79;
delay_ms(500);
PORTC=0x24;
delay_ms(500);
PORTC=0x30;
delay_ms(500);
PORTC=0x19;
delay_ms(500);
PORTC=0x12;
delay_ms(500);
PORTC=0x02;
delay_ms(500);
PORTC=0x78;
delay_ms(500);
PORTC=0x00;
delay_ms(500);
PORTC=0x10;
delay_ms(500);
}
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTC=0x00;
DDRC=0xFF;
while (1)
{
PORTA=0x40;
satuan();
PORTA=0x79;
satuan();
PORTA=0x24;
satuan();
PORTA=0x30;
satuan();
PORTA=0x19;
satuan();
PORTA=0x12;
satuan();
PORTA=0x02;
satuan();
PORTA=0x78;
satuan();
PORTA=0x00;
satuan();
PORTA=0x10;
satuan();
};
}
Rangkaian Simulasi 7 Segment Non-Multiplex tanpa decoder
14
Decoder adalah suatu driver yang digunakan mengubah data. Untuk menampilkan angka pada 7 segment display
terkadang kita membutuhkan decoder BCD (Binary Coded Decimal) untuk membantu kita dalam memproses data.
Decoder ini biasanya digunakan untuk mengubah data desimal menjadi data biner. Decoder untuk jenis Common Anode
diperlukan keluaran aktip rendah (misalnya SN-7447) sedangkan untuk jenis Common Cathode diperlukan keluaran aktip
tinggi (misalnya SN-7448).
Teknik pemberian datanya agak berbeda dengan sebelumnya. Yakni dengan cara membagi dua bagian sebuah port
lalu mengontrol masing-masing bagian tanpa harus mengganggu data yang lain. Misalkan data terakhir pada 7 segment
adalah 34, berarti data PORTA =0x43. Kemudian mau diubah menjadi 35, berarti angka satuan menjadi angka 5 (4  5),
berarti kita hanya mengubah data pada LSB, sedangkan data MSB tetap. Caranya adalah sebagai berikut,
Data heksa Biner
LSB MSB
Tahap 1 PORTA =0x43; 0B 0100 | 0011  data sekarang / terakhir
Tahap 2 Kosongkan MSB  0000 | 0011  di AND -kan dengan data (0000 | 0011)
Dengan perintah PORTA&=0x03;
Tahap 3 Set MSB menjadi  0101 | 0011  di OR –kan dengan data (0101 | 0000)
Dengan perintah PORTA|=0x50;
Tugas Program Aplikasi LED.
Buatlah program baru dengan CodeWizardAVR seperti konfigurasi berikut, kemudian edit program seperti pada gambar.
Program 1. Aplikasi 7 Segment 1 digit
Puluhan
Satuan
15
#include <mega8535.h>
#include <delay.h>
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
while (1)
{
PORTA=0x0;
delay_ms(500);
PORTA=0x1;
delay_ms(500);
PORTA=0x2;
delay_ms(500);
PORTA=0x3;
delay_ms(500);
PORTA=0x4;
delay_ms(500);
PORTA=0x5;
delay_ms(500);
PORTA=0x6;
delay_ms(500);
PORTA=0x7;
delay_ms(500);
PORTA=0x8;
delay_ms(500);
PORTA=0x9;
delay_ms(500);
};
}
Program 2. Aplikasi 7 Segment 2 digit
#include <mega8535.h>
#include <delay.h>
void satuan()
{
PORTA&=0x0F;
PORTA |=0x00;
delay_ms(500);
PORTA&=0x0F;
PORTA |=0x10;
delay_ms(500);
PORTA&=0x0F;
PORTA |=0x20;
delay_ms(500);
PORTA&=0x0F;
PORTA |=0x30;
delay_ms(500);
PORTA&=0x0F;
PORTA |=0x40;
delay_ms(500);
PORTA&=0x0F;
PORTA |=0x50;
delay_ms(500);
PORTA&=0x0F;
PORTA |=0x60;
delay_ms(500);
PORTA&=0x0F;
PORTA |=0x70;
delay_ms(500);
PORTA&=0x0F;
PORTA |=0x80;
delay_ms(500);
PORTA&=0x0F;
PORTA |=0x90;
delay_ms(500);
}
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTC=0x00;
DDRC=0xFF;
while (1)
{
PORTA&=0xF0;
PORTA|=0x00;
satuan();
PORTA&=0xF0;
PORTA|=0x01;
satuan();
PORTA&=0xF0;
PORTA|=0x02;
satuan();
PORTA&=0xF0;
PORTA|=0x03;
satuan();
PORTA&=0xF0;
PORTA|=0x04;
satuan();
PORTA&=0xF0;
PORTA|=0x05;
satuan();
PORTA&=0xF0;
PORTA|=0x06;
satuan();
PORTA&=0xF0;
PORTA|=0x07;
satuan();
PORTA&=0xF0;
PORTA|=0x08;
satuan();
PORTA&=0xF0;
PORTA|=0x09;
satuan();
};
}
16
BAB 5
APLIKASI 7 SEGMENT MULTIPLEX
5.1 Rangkaian Simulasi 7 Segment Multiplex
Aplikasi 7 segment Multiplex merupakan penggunaan 7 segment secara paralel. 7 segment yang berjumlah 2 atau
lebih disusun sedemikian rupa sehingga masing-masing pin yang sama pada 7 segment terubung secara paralel terhadap
pin pada port mikrokontroler. Sehingga pada mikrokontroler hanya akan menggunakan 2 buah port apabila 7 segment
yang digunakan berjumlah maksimum 8 buah. Port pada mikrokontroler yang dihubungkan dengan pin pada 7 segment
digunakan untuk menetukan data yang akan ditampilkan. Sedangkan port yang terhubung pada common masing-masing
7 segment digunakan untuk mengontrol 7 segment mana yang akan aktif/menyala.
Rangkaian Simulasi 7 Segment Multiplex
Gambar 5.1 Rangkaian 7 Segment Multiplex
Tugas Program Aplikasi LED.
Buatlah program baru dengan CodeWizardAVR seperti konfigurasi berikut, kemudian edit program seperti pada gambar.
Gambar 5.2 Konfigurasi 7 Segment Multiplex
Program 1. Aplikasi 7 Segment 8 digit
#include <mega8535.h>
#include <delay.h>
void main(void)
{
PORTA=0xFF;
DDRA=0xFF;
PORTC=0x00;
DDRC=0xFF;
while (1)
{
PORTC=0x40;
delay_ms(500);
PORTC=0x79;
delay_ms(500);
PORTC=0x24;
delay_ms(500);
PORTC=0x30;
delay_ms(500);
PORTC=0x19;
delay_ms(500);
PORTC=0x12;
delay_ms(500);
PORTC=0x02;
delay_ms(500);
PORTC=0x78;
delay_ms(500);
PORTC=0x00;
delay_ms(500);
PORTC=0x10;
delay_ms(500);
};
}
17
5.2 Aplikasi 7 Segment LCD dengan Decoder 7447
Aplikasi 7 segment menggunakan LCD display tidak berbeda dengan menggunakan 7 segment biasa, perbedaan
hanya terdapat pada bentuk dan ukuran saja.
Namun pada penjelasan kali ini hanya menambahkan komponen IC TTL sebagai decoder agar pemberian data
menjadi lebih mudah. 7 segment LCD Display ini sudah terdiri dari 8 buah 7 segment yang tersusun secara multiplex.
Sehingga kita cukup menggunakan 2 buah port yang akan dihubungkan dengan pin common pada LCD dan Pin Input
pada IC TTL. Untuk jelasnya bisa dilihat pada gambar 5.3.
Rangkaian Simulasi 7 Segment LCD dengan Decoder 7447
Gambar 5.3 Rangkaian 7 Segment LCD Multiplex dengan Decoder
Program 2. Aplikasi 7 Segment 8 digit dengan decoder
#include <mega8535.h>
#include <delay.h>
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTC=0x00;
DDRC=0xFF;
while (1)
{
PORTC=0x0;
delay_ms(500);
PORTC=0x1;
delay_ms(500);
PORTC=0x2;
delay_ms(500);
PORTC=0x3;
delay_ms(500);
PORTC=0x4;
delay_ms(500);
PORTC=0x5;
delay_ms(500);
PORTC=0x6;
delay_ms(500);
PORTC=0x7;
delay_ms(500);
PORTC=0x8;
delay_ms(500);
PORTC=0x9;
delay_ms(500);
};
}
Program 3. Aplikasi 7 Segment 8 digit dengan decoder
#include <mega8535.h>
#include <delay.h>
void main(void)
{
PORTA=0xFF;
DDRA=0xFF;
PORTC=0x00;
DDRC=0xFF;
while (1)
{
PORTA=0B00000001;
PORTC=0x0;
delay_ms(500);
PORTA=0B00000010;
PORTC=0x1;
delay_ms(500);
PORTA=0B00000100;
PORTC=0x2;
delay_ms(500);
PORTA=0B00001000;
PORTC=0x3;
delay_ms(500);
PORTA=0B00010000;
PORTC=0x4;
delay_ms(500);
PORTA=0B00100000;
PORTC=0x5;
delay_ms(500);
PORTA=0B01000000;
PORTC=0x6;
delay_ms(500);
PORTA=0B10000000;
PORTC=0x7;
delay_ms(500);
};
}
18
BAB 6
APLIKASI LED DOT MATRIX
LED Dot Matrix merupakan salah satu aplikasi dari LED yang disusun secara Matrix dan dapat berfungsi untuk
menampilkan berbagai macam karakter. Terdapat berbagai macam tampilan yang dapat dihasilkan melalui LED Dot
Matrix.
Pada LED Dot Matrix 5x7 terdapat 5 pin kolom dan 7 pin baris yang digunakan untuk menentukan kondisi masing-
masing LED. Jika salah satu bagian menjadi input maka bagian yang lain harus sebagai output atau sebaliknya.
Maksudnya salah satu bagian akan menjadi tempat masuknya arus dan bagian yang lain akan menjadi tempat keluarnya
arus tergantung pada kondisi posisi Anoda/katoda LED yang terpasang didalamnya. Jika Anoda dari LED terpasang pada
bagian kolom maka semua pin pada bagian kolom merupakn tempat masuknya arus dan bagian baris merupakan tempat
keluarnya arus.
Apabila bagian kolom diberi arus atau diberi data 1 (high) maka kolom tersebut aktif atau LED pada kolom tersebut
siap menyala. LED yang menyala akan tergantung pada bagian baris yang diberi data 0 (low).
Rangkaian Simulasi
Gambar 4.4 Ranglaian LED Dot Matrix 5x7
Contoh Program.
Program 1. Menampilkan 1 Karakter pada LED Dot Matrix 5x7
#include <mega8535.h>
#include <delay.h>
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTC=0x00;
DDRC=0xFF;
while (1)
{
PORTA=0x01;
PORTC=0B00000011;
delay_ms(1);
PORTA=0x02;
PORTC=0B01110101;
delay_ms(1);
PORTA=0x04;
PORTC=0B01110110;
delay_ms(1);
PORTA=0x08;
PORTC=0B01110101;
delay_ms(1);
PORTA=0x10;
PORTC=0B00000011;
delay_ms(1);
};
}
19
BAB 7
APLIKASI LCD DISPLAY 16X2
LCD Display 16x2 merupakan salah satu komponen display yang paling populer digunakan untuk berbagai aplikasi.
LCD Display memberikan kenyamanan dalam interface, selain lebih menarik LCD Display juga dapat menampilkan
berbagai macam karakter yang tidak dapat ditampilkan menggunakan 7 segment.
Lakukan konfigurasi CodeWizardAVR seperti gambar berikut.
Gambar 7.1 Konfigurasi LCD Display 16x2
Rangkaian Simulasi LCD Display 16x2
Gambar 7.3 Rangkaian Aplikasi LCD Display 16x2
20
Contoh Program
Program 1. Penampil Karakter dengan LCD
#include <mega8535.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
// Declare your global variables here
unsigned int temp=15;
char buf[33];
void main(void)
{
// LCD module initialization
lcd_init(16);
while (1)
{
// Place your code here
lcd_gotoxy(0,0);
lcd_putsf("Sensor");
lcd_gotoxy(0,1);
sprintf(buf, "Data = %d",temp);
lcd_puts(buf);
};
}
Program 2. Penampil Data Variable yang berubah
#include <mega8535.h>
#include <stdio.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
// Declare your global variables here
unsigned int temp=0;
char buf[33];
void main(void)
{
// LCD module initialization
lcd_init(16);
while (1)
{
// Place your code here
lcd_gotoxy(0,0);
sprintf(buf, "%d",temp);
lcd_puts(buf);
delay_ms(1000);
++temp;
};
}
21
BAB 8
APLIKASI TOMBOL PUSH BUTTON
Tombol salah satu komponen yang paling sering digunakan pada aplikasi elektronik. Tombol biasa digunakan
sebagai pemilih, pengatur dan juga sebagai sensor yang kemudian diproses untuk mengerjakan sesuatu. Umumnya jenis
tombol ada 2 macam, yaitu tombol Push Button (Tombol Tekan) dan Tombol Toggle (On/Off). Terdapat berbagai
macam bentuk dan ukuran tombol dari yang kecil sampai yang besar, sehingga pengguna harus memilih tombol yang
sesuai tergantung kebutuhan. Contoh bentuk-bentuk tombol bias dilihat pada gambar 6.1 berikut.
Gambar 8.1 Macam-Macam Tombol
PUSH BUTTON
Tombol Push Button sering kita lihat dalam kehidupan sehari-hari pada peralatan elektronik, seperti radio, televisi,
keyboard dan kalkulator lain-lain. Biasanya tombol push button ini digunakan untuk memilih atau menetukan suatu
proses, misalnya memilih channel televisi atau mengetik komputer.
Gambar 8.2 Konfigurasi Tombol, 7 Segment dan LCD
22
Rangkaian Aplikasi Tombol Push Button dan LED
Gambar 8.3 Aplikasi Tombol Push Button dan LED
Program Baca Masukan Tombol Push Button ke LED
#include <mega8535.h>
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTB=0xFF;
DDRB=0x00;
while (1)
{
// Place your code here
PORTA=PINB;
};
}
Rangkaian Aplikasi Tombol Push Button dan 7 Segment
Gambar 8.4 Aplikasi Tombol Push Button dan Seven Segment
23
Program Baca Masukan Tombol Push Button ke 7 Segment
#include <mega8535.h>
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTB=0xFF;
DDRB=0x00;
while (1)
{
// Place your code here
if(PINB.0==0) PORTA=0x79;
if(PINB.1==0) PORTA=0x24;
if(PINB.2==0) PORTA=0x30;
if(PINB.3==0) PORTA=0x19;
if(PINB.4==0) PORTA=0x12;
if(PINB.5==0) PORTA=0x02;
if(PINB.6==0) PORTA=0x78;
if(PINB.7==0) PORTA=0x00;
if(PINB==255) PORTA=0x40;
};
}
Rangkaian Aplikasi Tombol Push Button dan LCD
Gambar 8.5 Aplikasi Tombol Push Button dan LCD
Program Baca Masukan Tombol Push Button ke LCD
#include <mega8535.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
// Declare your global variables here
unsigned int temp=15;
char buf[33];
void main(void)
{
24
PORTB=0xFF;
DDRB=0x00;
// LCD module initialization
lcd_init(16);
while (1)
{
// Place your code here
if(PINB.0==0) temp=1;
if(PINB.1==0) temp=2;
if(PINB.2==0) temp=3;
if(PINB.3==0) temp=4;
if(PINB.4==0) temp=5;
if(PINB.5==0) temp=6;
if(PINB.6==0) temp=7;
if(PINB.7==0) temp=8;
if(PINB==255) temp=0;
lcd_gotoxy(0,0);
sprintf(buf, "Data = %d",temp);
lcd_puts(buf);
};
}
25
BAB 9
TOMBOL MATRIX
Tombol matrix merupakan tombol push button yang disusun secara matrix sehingga tombol tampak menjadi susunan
tombol yang teratur. Kita ambil salah satu contoh tombol matrix 4x4. ini berarti tombol tersebut memiliki 4 baris dan 4
kolom. Sebuah tombol yang ditekan akan terhubung ke salah satu baris dan salah satu kolom yang nantinya akan
menghubungkan baris dan kolom tersebut sesuai letak tombol tersebut. Seperti yang ditunjukan oleh gambar 9.1.
Gambar 9.1 Rangkaian Tombol Matrix 4x4
Rangkaian Simulasi Tombol Matrix To LCD
Gambar 9.2 Rangkaian Tombol Matrix To LCD Display
26
Gambar 9.3 Konfigurasi Keypad dan LCD
Contoh Program
Program Baca Masukan Tombol Matrix 4x4
#include <mega8535.h>
#include <stdio.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
// Declare your global variables here
int key;
char buff[33];
unsigned char keypad( )
{
//Kolom 1==================
PORTD = 0b11110111;
if(PIND.7==0) {key=10; goto run;}
if(PIND.6==0) {key=15; goto run;}
if(PIND.5==0) {key=0; goto run;}
if(PIND.4==0) {key=14; goto run;}
//Kolom 2=================
PORTD = 0b11111011;
if(PIND.7==0) {key=13; goto run;}
if(PIND.6==0) {key=9; goto run;}
if(PIND.5==0) {key=8; goto run;}
if(PIND.4==0) {key=7; goto run;}
//Kolom 3=================
PORTD = 0b11111101;
if(PIND.7==0) {key=12; goto run;}
if(PIND.6==0) {key=6; goto run;}
if(PIND.5==0) {key=5; goto run;}
if(PIND.4==0) {key=4; goto run;}
//Kolom 4=================
27
PORTD = 0b11111110;
if(PIND.7==0) {key=11; goto run;}
if(PIND.6==0) {key=3; goto run;}
if(PIND.5==0) {key=2; goto run;}
if(PIND.4==0) {key=1; goto run;}
run:
return key;
}
void main(void)
{
PORTD=0xF0;
DDRD=0x0F;
// LCD module initialization
lcd_init(16);
while (1)
{
// Place your code here
awal:
lcd_gotoxy(0,0);
lcd_putsf("Tekan Sembarang ");
set:
key=keypad();
lcd_gotoxy(0,1);
sprintf(buff,"%d ",key);
lcd_puts(buff);
delay_ms(5);
//key=keypad();
};
}
Rangkaian Simulasi Kalkulator
Gambar 9.4 Rangkaian Simulasi Kalkulator
28
Gambar 9.5 Konfigurasi Keypad dan LCD
Contoh Program
Program Aplikasi Kalkulator
#include <mega8535.h>
#include <stdio.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
// Declare your global variables here
int key=20,step,op,a1,b1,c;
char buff[33];
unsigned char keypad( )
{
//Kolom 1==================
PORTB = 0b11110111;
if(PINB.7==0) {key=10; goto run;} //tambah
if(PINB.6==0) {key=15; goto run;} //sama dengan = Enter
if(PINB.5==0) {key=0; goto run;}
if(PINB.4==0) {key=14; goto run;} //ON = Cancel
//Kolom 2=================
PORTB = 0b11111011;
if(PINB.7==0) {key=13; goto run;} //kurang
if(PINB.6==0) {key=9; goto run;}
if(PINB.5==0) {key=8; goto run;}
if(PINB.4==0) {key=7; goto run;}
//Kolom 3=================
PORTB = 0b11111101;
if(PINB.7==0) {key=12; goto run;} //kali
if(PINB.6==0) {key=6; goto run;}
if(PINB.5==0) {key=5; goto run;}
if(PINB.4==0) {key=4; goto run;}
29
//Kolom 4=================
PORTB = 0b11111110;
if(PINB.7==0) {key=11; goto run;} //bagi
if(PINB.6==0) {key=3; goto run;}
if(PINB.5==0) {key=2; goto run;}
if(PINB.4==0) {key=1; goto run;}
run:
return key;
}
void main(void)
{
PORTB=0xF0;
DDRB=0x0F;
// LCD module initialization
lcd_init(16);
while (1)
{
if(step == 0)
{
key=keypad();
if(key < 10)
{
a1=key;
lcd_gotoxy(0,0);
sprintf(buff,"%d ",a1);
lcd_puts(buff);
step = 1;
}
else step=0;
}
if(step == 1)
{
key=keypad();
if(key == 10)
{
op=1; //Tambah
sprintf(buff,"+ ");
lcd_puts(buff);
step = 2;
}
if(key == 13)
{
op=2; //Kurang
sprintf(buff,"- ");
lcd_puts(buff);
step = 2;
}
if(key == 12)
{
op=3; //Kali
sprintf(buff,"* ");
lcd_puts(buff);
step = 2;
}
if(key == 11)
{
op=4; //Bagi
sprintf(buff,"/ ");
lcd_puts(buff);
30
step = 2;
}
}
if(step == 2)
{
key=keypad();
if(key < 10)
{
b1=key;
sprintf(buff,"%d ",b1);
lcd_puts(buff);
step = 3;
}
else step=2;
}
if(step == 3)
{
if(op == 1)
{
c=a1+b1;
sprintf(buff,"= %d ",c);
lcd_puts(buff);
step = 4;
}
if(op == 2)
{
c=a1-b1;
sprintf(buff,"= %d ",c);
lcd_puts(buff);
step = 4;
}
if(op == 3)
{
c=a1*b1;
sprintf(buff,"= %d ",c);
lcd_puts(buff);
step = 4;
}
if(op == 4)
{
c=a1/b1;
sprintf(buff,"= %d ",c);
lcd_puts(buff);
step = 4;
}
step = 4;
}
if(step == 4)
{
key=keypad();
if(key == 14)
{
lcd_clear();
step = 0;
}
else step=4;
}
};
}
31
BAB 10
APLIKASI DATA ANALOG PADA LCD DISPLAY
Aplikasi data analog sering digunakan pada sensor-sensor yang keluarannya seperti sensor suhu, kelembaban, asap
dan sensor lainnya. Pada rangkaian simulasi kita hanya menggunakan resistor variabel sebagai pengatur output analog
yang nantinya diproses oleh mikrokontroler dan kemudian ditampilkan melalui LCD Display.
Rangkaian Simulasi Analog pada LCD Display
Gambar 10.1 Aplikasi ADC to LCD Display
Gambar 10.2 Konfigurasi ADC dan LCD
32
Contoh Program
Program Pembaca Data Analog 8 Channel
#include <mega8535.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x60
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
// Declare your global variables here
unsigned char temp[30];
void main(void)
{
// Declare your local variables here
// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
SFIOR&=0xEF;
// LCD module initialization
lcd_init(16);
while (1)
{
// Place your code here
lcd_gotoxy(0,0);
sprintf(temp,"Data ADC0 = %d ",read_adc(0));
lcd_puts(temp);
delay_ms(1000);
lcd_gotoxy(0,0);
sprintf(temp,"Data ADC1 = %d ",read_adc(1));
33
lcd_puts(temp);
delay_ms(1000);
lcd_gotoxy(0,0);
sprintf(temp,"Data ADC2 = %d ",read_adc(2));
lcd_puts(temp);
delay_ms(1000);
lcd_gotoxy(0,0);
sprintf(temp,"Data ADC3 = %d ",read_adc(3));
lcd_puts(temp);
delay_ms(1000);
lcd_gotoxy(0,0);
sprintf(temp,"Data ADC4 = %d ",read_adc(4));
lcd_puts(temp);
delay_ms(1000);
lcd_gotoxy(0,0);
sprintf(temp,"Data ADC5 = %d ",read_adc(5));
lcd_puts(temp);
delay_ms(1000);
lcd_gotoxy(0,0);
sprintf(temp,"Data ADC6 = %d ",read_adc(6));
lcd_puts(temp);
delay_ms(1000);
lcd_gotoxy(0,0);
sprintf(temp,"Data ADC7 = %d ",read_adc(7));
lcd_puts(temp);
delay_ms(1000);
};
}
Program Pemilih Channel Data Analog
#include <mega8535.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x60
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
34
// Declare your global variables here
unsigned char temp[30];
int x;
void main(void)
{
// Declare your local variables here
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P
PORTB=0xFF;
DDRB=0x00;
// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
SFIOR&=0xEF;
// LCD module initialization
lcd_init(16);
while (1)
{
// Place your code here
if(x==0)
{
lcd_gotoxy(0,0);
sprintf(temp,"Data ADC0 = %d ",read_adc(0));
lcd_puts(temp);
}
if(x==1)
{
lcd_gotoxy(0,0);
sprintf(temp,"Data ADC1 = %d ",read_adc(1));
lcd_puts(temp);
}
if(x==2)
{
lcd_gotoxy(0,0);
sprintf(temp,"Data ADC2 = %d ",read_adc(2));
lcd_puts(temp);
}
if(x==3)
{
lcd_gotoxy(0,0);
sprintf(temp,"Data ADC3 = %d ",read_adc(3));
lcd_puts(temp);
}
if(x==4)
35
{
lcd_gotoxy(0,0);
sprintf(temp,"Data ADC4 = %d ",read_adc(4));
lcd_puts(temp);
}
if(x==5)
{
lcd_gotoxy(0,0);
sprintf(temp,"Data ADC5 = %d ",read_adc(5));
lcd_puts(temp);
}
if(x==6)
{
lcd_gotoxy(0,0);
sprintf(temp,"Data ADC6 = %d ",read_adc(6));
lcd_puts(temp);
}
if(x==7)
{
lcd_gotoxy(0,0);
sprintf(temp,"Data ADC7 = %d ",read_adc(7));
lcd_puts(temp);
}
if(PINB.0==0) x=0;
if(PINB.1==0) x=1;
if(PINB.2==0) x=2;
if(PINB.3==0) x=3;
if(PINB.4==0) x=4;
if(PINB.5==0) x=5;
if(PINB.6==0) x=6;
if(PINB.7==0) x=7;
};
}
36
BAB 11
APLIKASI PULSE WIDTH MODULATION (PWM)
PWM (Pulse Width Modulation) merupakan metode untuk mengatur lebar pulsa suatu frekuensi. Salah satu fungsi
metode ini, dapat digunakan untuk mengontrol kecepatan putaran motor dc. Dengan mengatur lebar pulsa, akan
menghasilkan tegangan keluaran yang cukup linier sesuai besarnya duty cicle. Keluaran tegangan yang linier inilah yang
digunakan untuk menyulut driver agar motor bisa berputar. Semangkin besar duty cicle yang diberikan maka semangkin
besar juga tegangan keluarannya dan kecepatan motor akan semangkin cepat.
Gambar 11.1 Aplikasi PWM dan Motor DC
Gambar 11.2 CodeWizardAVR untuk PWM
37
Contoh Program
Rangkaian Simulasi Analog dan PWM pada LCD Display
#include <mega8535.h>
#include <delay.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
// Declare your global variables here
char temp[5];
void main(void)
{
// Declare your local variables here
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3.906 kHz
// Mode: Fast PWM top=FFh
// OC0 output: Non-Inverted PWM
TCCR0=0x6D;
TCNT0=0x00;
OCR0=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// LCD module initialization
lcd_init(16);
while (1)
{
// Place your code here
OCR0=100;
lcd_gotoxy(0,0);
sprintf(temp,"Data PWM = %d ",OCR0);
lcd_puts(temp);
};
}
38
Gambar 11.3 CodeWizardAVR untuk PWM, ADC dan LCD
Rangkaian Simulasi Analog dan PWM pada LCD Display
Gambar 11.4 Aplikasi ADC to LCD Display
Program PWM dengan Fast PWM 1
#include <mega8535.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
39
#include <lcd.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x60
// Read the 8 most significant bits
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
// Declare your global variables here
unsigned char temp[10];
void main(void)
{
// Port D initialization
// Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x30;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7.813 kHz
// Mode: Fast PWM top=00FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x0D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
40
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 62.500 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x87;
SFIOR&=0xEF;
// LCD module initialization
lcd_init(16);
while (1)
{
// Place your code here
OCR1A = read_adc(0); //keluarkan data ADC ke PORTD.5 sebagai PWM
lcd_gotoxy(0,0);
sprintf(temp,"Nilai PWM = %d ", OCR1A);
lcd_puts(temp);
delay_ms(100);
};
}
Rangkaian Simulasi Analog dan PWM pada LCD Display
Gambar 11.5 Aplikasi ADC to LCD Display
Program PWM dengan Fast PWM 2
#include <mega8535.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
41
#include <lcd.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x60
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
// Declare your global variables here
unsigned char temp[30];
void main(void)
{
// Port D initialization
// Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x30;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7.813 kHz
// Mode: Fast PWM top=00FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x0D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
42
// ADC initialization
// ADC Clock frequency: 62.500 kHz
// ADC Voltage Reference: AVCC pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x87;
SFIOR&=0xEF;
// LCD module initialization
lcd_init(16);
while (1)
{
// Place your code here
OCR1A = read_adc(0); //keluarkan data ADC ke PORTD.5 sebagai PWM
lcd_gotoxy(0,0);
sprintf(temp,"PWM1 = %d ", OCR1A); //PWM 1
lcd_puts(temp);
OCR1B = read_adc(1);
lcd_gotoxy(0,1);
sprintf(temp,"PWM2 = %d ", OCR1B); //PWM 2
lcd_puts(temp);
delay_ms(1000);
};
}
43
BAB 12
APLIKASI TIMER
12.1 Mode Normal
Pada ATmega8535 terdapat 3 buah timer, yaitu Timer0 (8 bit), Timer1 (16 bit) dan Timer2 (8 bit). Untuk perbedaan
dan cara kerja masing-masing timer, teman-teman dapat membacanya pada datasheet. Disini akan membahas Timer0 dan
Timer1 saja. Sedangkan Timer2 memiliki perlakuan yang sama dengan Timer0.
Perhitungan untuk Timer0 dan Timer1 adalah sebagai berikut:
Ttimer0 = Tosc*(256-TCNT0)*N → (8 bit = 256)
Ttimer1 = Tosc*(65536-TCNT1)*N → (16 bit = 65536)
Tosc = 1/Fosc → pada aplikasi ini saya menggunakan kristal 12 MHz, sehingga:
Tosc = 1/12Mhz = 0,0000000833 detik
Dimana:
Ttimer0 = lamanya periode Timer0
Ttimer1 = lamanya periode Timer1
TCNT0 = Register Timer0
TCNT1 = Register Timer1
N = Skala clock (mempunyai nilai 1, 8, 64, 256 dan 1024)
Tosc = periode clock
Fosc = frekuensi clock kristal
Sekarang kita akan membuat aplikasi timer yang ditampilkan pada LCD. LCD menampilkan suatu nilai yang akan
selalu bertambah setiap detik (menggunakan fitur timer), nilai awal yaitu 0 setelah 1 detik (menggunakan timer)
kemudian nilai tersebut akan naik menjadi 1, kemudian 2 dan seterusnya, jika sudah sampai 100 maka akan diset kembali
menjadi 0.
Gambar 12.1 Rangkaian Simulasi Timer
Menggunakan Timer1:
Ttimer1 = Tosc*(65536-TCNT1)*N
Pada aplikasi diatas diinginkan lamanya timer adalah 1 detik (Ttimer1 = 1 detik) dan jika saya menggunakan kristal
12 MHz dan menggunakan skala clock N = 1024, maka didapat:
1 = 0,0000000833*(65536-TCNT1)*1024
TCNT1= 53817.25  53818
TCNT1= 53818 = D23A (dalam hexa)
44
Dari perhitungan diatas didapat nilai 53818 atau dalam hexa D23A, nilai tersebut harus diisikan pada register
TCNT1 agar Timer 1 bernilai 1 detik.
Berikut adalah gambar untuk mensetting pada CodeVision CodeWizard AVR:
Gambar 12.2 Configurasi CodeWizardAVR Timer1
Pada settingan diatas digunanakan nilai clock value yaitu 11.719 kHz, nilai tersebut didapat dari Fosc/N atau 12
Mhz/1024.
Berikut adalah listing program lengkapnya:
#include <mega8535.h>
#include <stdlib.h>
#asm
.equ __lcd_port=0×15 ;PORTC
#endasm
#include <lcd.h>
unsigned char temp[6];
int data;
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
TCNT1H=0xD23A >> 8;
TCNT1L=0xD23A & 0xff;
data++; //setelah 1 detik increament data
}
void main(void)
{
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: Normal top=FFFFh
45
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0×00;
TCCR1B=0×05;
TCNT1H=0xD2;
TCNT1L=0x3A;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0×04;
// LCD module initialization
lcd_init(16);
// Global enable interrupts
#asm(“sei”)
while (1)
{
if (data==100)
{
lcd_clear();
data=0;
}
lcd_gotoxy(0,0);
lcd_putsf(“Timer :”);
itoa(data,temp); //menampilkan di LCD
lcd_gotoxy(0,1);
lcd_puts(temp);
};
}
Menggunakan Timer0 :
Ttimer0 = Tosc*(256-TCNT0)*N
Dengan menggunakan Timer0, untuk aplikasi yang sama seperti diatas, sebenarnya timer0 ini tidak dapat
menghasilkan periode timer selama 1 detik dikarenakan keterbatasan jumlah bit yaitu hanya 8 bit (256) saja. Tetapi kita
masih dapat memanupulasi program agar dapat menghasilkan timer selama 1 detik, caranya dengan membuat timer
selama 10 ms kemudian dilakukan pengulangan sebanyak 100 kali, maka akan dihasilkan timer selama 1 detik.
10 ms * 100= 1 detik
Pada aplikasi ini diinginkan lamanya timer adalah 10 ms (Ttimer0 = 10 ms = 0.01 s) dan jika saya menggunakan kristal
12 MHz dan menggunakan skala clock/prescaler N = 1024, maka didapat:
0.01 = 0,0000000833*(256-TCNT0)*1024
TCNT0= 138 = 8A (dalam hexa)
46
Dari perhitungan diatas didapat nilai 138 atau dalam hexa 8A, nilai tersebut harus diisikan pada register TCNT0 agar
Timer 0 bernilai 10 mili detik.
Berikut adalah gambar untuk mensetting pada CodeVision CodeWizard AVR:
Gambar 12.3 Configurasi CodeWizardAVR Timer0
Pada settingan diatas digunanakan nilai clock value yaitu 11.719 kHz, nilai tersebut didapat dari Fosc/N atau 12
Mhz/1024.
Berikut adalah listing program lengkapnya:
#include <mega16.h>
#include <stdlib.h>
#asm
.equ __lcd_port=0×15 ;PORTC
#endasm
#include <lcd.h>
unsigned char temp[6], loop=0;
int data;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x8A;
loop++;
if (loop>=100)
{
data++;
loop=0;
}
}
void main(void)
{
// Timer/Counter 0 initialization
47
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0×05;
TCNT0=0x8A;
OCR0=0×00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0×01;
// LCD module initialization
lcd_init(16);
// Global enable interrupts
#asm(“sei”)
while (1)
{
if (data==100)
{
lcd_clear();
data=0;
}
lcd_gotoxy(0,0);
lcd_putsf(“ElectrO-cOntrOl”);
itoa(data,temp); //menampilkan di LCD
lcd_gotoxy(0,1);
lcd_puts(temp);
};
}
48
12.2 Mode CTC
Pada mode CTC tidak jauh berbeda dengan mode Normal, perbedaan hanya terletak pada cara menghitung, tepatnya
mulai dan akhir perhitungan pada register TCNT0.
Perhitungan untuk Timer0 dan Timer1 adalah sebagai berikut:
Ttimer0 = Tosc*(1+OCR0)*N → (8 bit = 256)
Ttimer1 = Tosc*(1+OCR1A)*N → (16 bit = 65536)
Tosc = 1/Fosc → pada aplikasi ini saya menggunakan kristal 12 MHz, sehingga:
Tosc = 1/12Mhz = 0,0000000833 detik
Dimana:
Ttimer0 = lamanya periode Timer0
Ttimer1 = lamanya periode Timer1
OCR0 = Register Timer0 ( 0 – 255 )
OCR1A = Register Timer1 ( 0 – 65535 )
N = Skala clock (mempunyai nilai 1, 8, 64, 256 dan 1024)
Tosc = periode clock
Fosc = frekuensi clock kristal
Sekarang kita akan membuat aplikasi timer yang ditampilkan pada LCD. LCD menampilkan suatu nilai yang akan
selalu bertambah setiap detik (menggunakan fitur timer), nilai awal yaitu 0 setelah 1 detik (menggunakan timer)
kemudian nilai tersebut akan naik menjadi 1, kemudian 2 dan seterusnya, jika sudah sampai 100 maka akan diset kembali
menjadi 0.
Menggunakan Timer1:
Ttimer1 = Tosc*(1+OCR1A)*N
Pada aplikasi diatas diinginkan lamanya timer adalah 1 detik (Ttimer1 = 1 detik) dan jika saya menggunakan kristal
12 MHz dan menggunakan skala clock N = 1024, maka didapat:
1 = 0,0000000833*(1+OCR1A)*1024
1+OCR1A = 11718.75  11719
OCR1A = 11718 = 2DC6 (dalam hexa)
Dari perhitungan diatas didapat nilai 53818 atau dalam hexa D23A, nilai tersebut harus diisikan pada register
TCNT1 agar Timer 1 bernilai 1 detik.
Berikut adalah gambar untuk mensetting pada CodeVision CodeWizard AVR:
Gambar 12.4 Configurasi CodeWizardAVR Timer1
49
Pada settingan diatas digunanakan nilai clock value yaitu 11.719 kHz, nilai tersebut didapat dari Fosc/N atau 12
Mhz/1024.
Berikut adalah listing program lengkapnya:
#include <mega8535.h>
#include <stdlib.h>
#asm
.equ __lcd_port=0×15 ;PORTC
#endasm
#include <lcd.h>
unsigned char temp[6];
int data;
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
TCNT1H=0xD23A >> 8;
TCNT1L=0xD23A & 0xff;
data++; //setelah 1 detik increament data
}
void main(void)
{
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0×00;
TCCR1B=0×05;
TCNT1H=0xD2;
TCNT1L=0x3A;
ICR1H=0×00;
ICR1L=0×00;
OCR1AH=0×00;
OCR1AL=0×00;
OCR1BH=0×00;
OCR1BL=0×00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0×04;
// LCD module initialization
lcd_init(16);
// Global enable interrupts
#asm(“sei”)
while (1)
{
50
if (data==100)
{
lcd_clear();
data=0;
}
lcd_gotoxy(0,0);
lcd_putsf(“Timer :”);
itoa(data,temp); //menampilkan di LCD
lcd_gotoxy(0,1);
lcd_puts(temp);
};
}
Menggunakan Timer0 :
Ttimer0 = Tosc*(256-TCNT0)*N
Dengan menggunakan Timer0, untuk aplikasi yang sama seperti diatas, sebenarnya timer0 ini tidak dapat
menghasilkan periode timer selama 1 detik dikarenakan keterbatasan jumlah bit yaitu hanya 8 bit (256) saja. Tetapi kita
masih dapat memanupulasi program agar dapat menghasilkan timer selama 1 detik, caranya dengan membuat timer
selama 10 ms kemudian dilakukan pengulangan sebanyak 100 kali, maka akan dihasilkan timer selama 1 detik.
10 ms * 100= 1 detik
Pada aplikasi ini diinginkan lamanya timer adalah 10 ms (Ttimer0 = 10 ms = 0.01 s) dan jika saya menggunakan kristal
12 MHz dan menggunakan skala clock/prescaler N = 1024, maka didapat:
0.01 = 0,0000000833*(256-TCNT0)*1024
TCNT0= 138 = 8A (dalam hexa)
Dari perhitungan diatas didapat nilai 138 atau dalam hexa 8A, nilai tersebut harus diisikan pada register TCNT0 agar
Timer 0 bernilai 10 mili detik.
Berikut adalah gambar untuk mensetting pada CodeVision CodeWizard AVR:
Gambar 12.5 Configurasi CodeWizardAVR Timer0
51
Pada settingan diatas digunanakan nilai clock value yaitu 11.719 kHz, nilai tersebut didapat dari Fosc/N atau 12
Mhz/1024.
Berikut adalah listing program lengkapnya:
#include <mega16.h>
#include <stdlib.h>
#asm
.equ __lcd_port=0×15 ;PORTC
#endasm
#include <lcd.h>
unsigned char temp[6], loop=0;
int data;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x8A;
loop++;
if (loop>=100)
{
data++;
loop=0;
}
}
void main(void)
{
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0×05;
TCNT0=0x8A;
OCR0=0×00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0×01;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0×80;
SFIOR=0×00;
// LCD module initialization
lcd_init(16);
// Global enable interrupts
#asm(“sei”)
while (1)
{
if (data==100)
{
lcd_clear();
52
data=0;
}
lcd_gotoxy(0,0);
lcd_putsf(“ElectrO-cOntrOl”);
itoa(data,temp); //menampilkan di LCD
lcd_gotoxy(0,1);
lcd_puts(temp);
};
}
53
BAB 13
APLIKASI COUNTER
13.1 Menggunakan Timer
Counter0
Untuk aplikasi counter lebih mudah dibandingkan dengan timer, karena kita tidak harus lagi menghitung untuk
mendapatkan nilai dari register TCNT, tetapi secara otomatis register TCNT yang akan mencacah jika ada input yang
masuk.
Berikut adalah contoh aplikasi counter untuk menghitung menggunakan T0 dan ditampilkan pada LCD, input yang
digunakan berasal dari pushbutton.
Gambar 13.1 Rangkaian Simulasi Counter
Input untuk counter0 berasal dari pin T0 atau PB0 akan disimpan pada register TCNT0 kemudian ditampilkan ke
LCD. Counter0 hanya mampu mencacah sampai dengan nilai 256 dikarenakan counter 8 bit. Berikut adalah setting pada
CodeVision CodeWizard AVR:
Gambar 13.2 Configurasi CodeWizardAVR Timer0
54
Berikut adalah listing program lengkap:
#include <mega8535.h>
#include <stdlib.h>
#asm
.equ __lcd_port=0×15 ;PORTC
#endasm
#include <lcd.h>
unsigned char temp[6];
int data;
void main(void)
{
// Timer/Counter 0 initialization
// Clock source: T0 pin Falling Edge
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0×06;
TCNT0=0×00;
OCR0=0×00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0×80;
SFIOR=0×00;
// LCD module initialization
lcd_init(16);
while (1)
{
data=TCNT0;//hasil counter (TCNT0) dipindah ke data
if (data>=256)
{
lcd_clear();
}
lcd_gotoxy(0,0);
lcd_putsf(“*Electro – PCR*”);
itoa(data,temp); //menampilkan di LCD
lcd_gotoxy(0,1);
lcd_puts(temp);
};
}
55
13.2 Menggunakan Interups
Interupsi merupakan suatu perintah untuk menghentian proses normal sementara waktu lalu melakukan proses
tertentu, setelah proses tertentu tersebut selesai maka proses normal akan berjalan kembali.
Interups0
Berikut adalah contoh aplikasi counter sebagai proses normal. Proses normal melakukan perhitungan mundur dari
1000. Sedangkan proses interupsi adalah melakukan perhitungan naik mulai dari 0. Input yang menggunakan tombol
pushbutton akan di cek oleh INT0. Jika terdapat sinyal pada INT0 maka kemudian proses normal terhenti lalu proses
interupsi dilakukan, setelah proses interupsi selesai, maka proses normal akan berjalan kembali melanjutkan proses
sebelumnya.
Gambar 13.3 Rangkaian Simulasi Interupsi
Berikut adalah setting pada CodeVision CodeWizard AVR:
Gambar 13.4 Configurasi CodeWizardAVR INT0
56
Berikut adalah listing program lengkap:
#include <mega8535.h>
#include <delay.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
int i=1000,x=0;
char buffer[33];
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
x++;
lcd_gotoxy(0,0);
sprintf(buffer,"counter = %d ", x);
lcd_puts(buffer);
delay_ms(2000);
}
void main(void)
{
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: Off
// INT2: Off
GICR|=0x40;
MCUCR=0x02;
MCUCSR=0x00;
GIFR=0x40;
lcd_init(16);
#asm("sei")
while (1)
{
// Place your code here
i--;
lcd_gotoxy(0,0);
sprintf(buffer,"Hitung = %4d", i);
lcd_puts(buffer);
if(i==0) i=1000;
delay_ms(300);
};
}
57
BAB 14
KOMUNIKASI SERIAL RS-232
I. Tujuan:
 Mahasiswa mengerti cara melakukan komunikasi serial dengan mikrokontroller AVR untuk
mengendalikan sesuatu peralatan
 Mahasiswa mengerti cara membuat program C pada mikrokontroller AVR untuk melakukan
komunikasi serial
II. Peralatan yang digunakan:
 modul AVR
 Modul LED dan switch
 Kabel serial RS232 (cross)
III. Dasar Teori:
Komunikasi serial merupakan komunikasi data dengan pengiriman data secara satu per satu
dengan menggunakan satu jalur kabel data. Sehingga komunikasi serial hanya menggunakan 2
kabel data yaitu kabel data untuk pengiriman yang disebut transmit (Tx) dan kabel data untuk
penerimaan yang disebut receive (Rx). Kelebihan dari komunikasi serial adalah jarak pengiriman dan
penerimaan dapat dilakukan dalam jarak yang cukup jauh dibandingan dengan komunikasi
parallel tetapi kekurangannya adalah kecepatan lebih lambat daripada komunikasi parallel, untuk
saat ini sedang dikembangkan teknologi serial baru yang dinamakan USB (Universal Serial Bus)
yang memiliki kecepatan pengiriman dan penerimaan data lebih cepat disbanding serial biasa.
Beberapa contoh : komunikasi Serial RS-232 dan RS-485.
Mode serial port :
1. Pada mode 0, Pin TX mengeluarkan shift clock, dan pin RX dapat menerima maupun
mengirim data, dengan format 8 bit data dimulai dengan LSB dulu yang dikirim. Jadi pada
saat dikirim data melalui RX maka sekalian pin TX mengirimkan signal clock secara
berbarengan. Baud ratenya fix yaitu 1/12 frekuensi osilatornya.
2. Pada mode 1, Pin TX berfungsi untuk mengirim data dan RX berfungsi untuk menerima
data, data yang dikirim formatnya 8 bit data dengan LSB dikirim dahulu,serta 1 start bit(
berlogika 0 ) dan 1 stop bit( berlogika 1 ). Baud ratenya variabel tergantung dari nilai yang
ada pada register timer 1 maupun timer 2.
3. Pada mode 2, Pin TX berfungsi untuk mengirim data dan RX untuk menerima data, format
datanya sama dengan mode 1 hanya saja terdapat parity bitnya sehingga total bit yang
terkirim sebanyak 11 bit. Bit paritynya dapat diset melalui TB8( lihat pada SCON ).
Baud ratenya hanya ada 2 pilihan yaitu 1/32 atau 1/64 dari frekuensi osilatornya.
4. Pada mode 3 identik dengan mode 2, hanya saja Baud ratenya variabel
tergantung nilai yang terdapat pada register dari timer 1 dan timer 2.
SM0: Serial Port Mode bit 0, bit Pengatur Mode Serial
SM1: Serial Port Mode bit 1, bit Pengatur Mode Serial
SM2: Serial Port Mode bit 2, bit untuk mengaktifkan komunikasi multiprosesor pada kondisi
set.
58
REN: Receive Enable, bit untuk mengaktifkan penerimaan data dari Port Serial pada kondisi
set. Bit ini di set dan clear oleh perangkat lunak.
TB8: Transmit bit 8, bit ke 9 yang akan dikirimkan pada mode 2 atau 3. Bit ini diset dan clear
oleh perangkat lunak
RB8: Receive bit 8, bit ke 9 yang diterima pada mode 2 atau 3. Pada Mode 1 bit ini berfungsi
sebagai stop bit.
TI: Transmit Interrupt Flag, bit yang akan set pada akhir pengiriman karakter. Bit ini diset
oleh perangkat keras dan di clear oleh perangkat lunak
RI: Receive Interrupt Flag, bit yang akan set pada akhir penerimaan karakter. Bit ini diset
oleh perangkat keras dan di clear oleh perangkat lunak
Dalam coding serial dalam AVR, terdapat 2 konsep yaitu secara polling maupun
secara interrupt. Seperti yang sudah dijelaskan diatas mengenai TI dan RI, maka dalam
menerima data RI akan terset secara hardware sedangkan TI diset pada saat data hampir
selesai dikirim, dan dalam hal transmisi data sangat perlu untu“CEK" kondisi TI. Bila TI
sudah berlogika 1 berarti data yang ditaruh dalam SBUF sudah selesai dikirim dan harus
diclear secara software( secara program ), sebab bila tidak dicek apakah TI sudah „1‟ atau
belum maka mungkin saja terjadi SBUF sudah direload dengan data baru sedangkan data
yang lama belum selesai dikirim sehingga terjadi apa yang disebut dengan data corruption.
Maka sebelum mengirim byte data yang selanjutnya sangatlah perlu untuk mengecek TI dulu.
Bila coding serial dengan konsep polling maka codenya harus terus menerus mengecek flag
TI dan RI, apakah berlogika „1‟, bila berlogika „1‟ maka langsung lompat ke procedure yang
bersangkutan, dengan jangan lupa secepatnya mengclear flag TI atau RI, agar tidak lompat ke
int. veltor dari serial. Keuntungan konsep polling adalah codenya yang simple, tetapi
menghabiskan cpu time sebab selalu mengecek flag TI dan RI terus menerus tanpa dapat
melakukan tugas yang lain, sebab bila melakukan yang lain maka pada saat salah satu flag
tersebut menjadi satu maka akan langsung lompat ke int. vektor serial sehingga program akan
menjadi kacau. Bila coding serial dengan konsep interrupt, maka program serialnya hanya
ada pada subroutine dari int. serial saja, dimana hanya mengecek oleh flag mana interrupt
serial terpanggil? Oleh TI atau RI? Bila oleh TI maka taruh datanya ke SBUF TI utk
dikirim, dan bila karena RI maka selamatkan datanya ke suatu variabel dari SBUF RI.
Keuntungannya code kita dapat melakukan tugas yang lainnya, kerugiannya adalah code yang
cukup kompleks.
IV. Langkah Kerja
59
Gambar2.1. Setting komunikasi Serial Gambar2.2. Setting komunikasi Serial
Gambar2.3. Sistem Komunikasi serial PC dengan AVR Min. Sys.
Gambar2.4. Kabel komunikasi Serial Null Modem (cross)
Gambar2.5. Menu Setting -> terminal
Modul AVR
min Sys
PC with serial
port (COM)
COM 1
DB-9 female
1
2
3
4
5
4
1
2
3
4
5
4
female male
PC side AVR Min. Sys.
side
60
Gambar2.6. Menu Tools -> terminal
Gambar2.7. Menjalankan window terminal di Code Vision AVR untuk mengamati hasil program
yang mengakses komunikasi serial
61
Gambar2.8. Terminal program bisa juga memakai program Hyperterminal bawaan MS Windows.
Bisa di akses di Start-> All programs -> Acessories -> Communications -> Hyperterminal
V. Program
Melakukan pengiriman 1 buah karakter terus menerus
#include <mega16.h>
#include <stdio.h>
void main(void)
{
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;
while (1)
{
putchar(‘a’);
}
}
Bandingkan hasilnya dengan program yang ada di bawah ini:
#include <mega16.h>
#include <stdio.h>
void main(void)
{
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;
while (1)
{
putchar(‘a’);
putchar(0x0d);
putchar(0x0a);
}
}
62
VI. Analisa
Pada percobaan ini pertama – tama dilakukan setting terhadap chip menggunakan
Atmega8535L pada clock 4Mhz lalu mnestting LACd pada portB,setting ADC 8 bit dengan interrupt
, setting komunikasi serial (USART). Pada setting USART yang digunakan hanya transmitter (TX)
saja karena hanya mengirimkan data ke PC atau dengan kata lain tidak menrima masukan dari PC.
Setelah itu nilai ADC dibaca dan datanya dikirim melalui serial dengan perintah sprinf untuk kalimat
dan putchar unutk sebuah karakter seperti “L”,”D”,R” atau apbila ingin lebih dari satu karakter dapat
dikirim dengan sprin(LDR);.
63
RTC
Apa itu RTC ? (http://pccontrol.wordpress.com/2011/06/27/pengetahuan-dasar-pemrograman-
rtc-ds1307-dengan-bahasa-c-codevision-untuk-avr/)
RTC yang dimaksud disini adalah real time clock (bukan real time computing), biasanya berupa IC
yg mempunyai clock sumber sendiri dan internal batery untuk menyimpan data waktu dan tanggal.
Sehingga jika system komputer / microcontroller mati waktu dan tanggal didalam memori RTC tetap
uptodate.
Salah satu RTC yang sudah populer dan mudah penggunaanya adalah DS1307, apalagi pada
Codevision sudah tersedia fungsi-fungsi untuk mengambil data waktu dan tanggal untuk
RTCDS1307 ini.
Fitur-fitur DS1307:
 Real-time clock (RTC) menghitung detik, menit, jam,tanggal,bulan dan hari dan tahun valid
sampai tahun 2100
 Ram 56-byte, nonvolatile untuk menyimpan data.
 2 jalur serial interface (I2C).
 output gelombang kotak yg diprogram.
 Automatic power-fail detect and switch
 Konsumsi arus hanya 500nA pada batery internal.
 mode dg oscillator running.
 temperature range: -40°C sampai +85°C
64
Untuk membaca data tangal dan waktu yg tersimpan di memori RTC Ds1307 dapat dilakukan
melalui komunikasi serial I2C spt tampak pada gambar berikut:
Cara pembacaan
DS1307 beropersai sebagai slave pada bus I2C. Cara Access pertama mengirim sinyal
START diikuti device address dan alamat sebuah register yg akan dibaca. Beberapa register dapat
dibaca sampai STOP condition dikirim.
Data waktu dan tanggal tersimpan dalam memori masing masing 1 byte , mulai dari alamat 00H
sampai 07H. Sisanya (08H ~ 3FHalamat RAM yg bisa digunakan).
65
Pemrograman RTC DS1307 dengan Codevision.
Codevision sudah menyediakan fungsi-fungsi khusus untuk mengakses data DS1307 jadi kita tinggal
menggunakanya. Apalagi dengan fasilitas codewizard pemrograman RTC menjadi mudah.
setelah kita klik ok maka akan tersedia template Code program sbb:
#include <mega16.h>
// I2C Bus functions
#asm
.equ __i2c_port=0×18 ;PORTB
.equ __sda_bit=0
.equ __scl_bit=1
#endasm
#include <i2c.h>
// DS1307 Real Time Clock functions
#include <ds1307.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0×15 ;PORTC
#endasm
#include <lcd.h>
66
char tampungLCD[16];
void main(void)
{
unsigned char hour,minute,second;
/ I2C Bus initialization
i2c_init();
// DS1307 Real Time Clock initialization
// Square wave output on pin SQW/OUT: Off
// SQW/OUT pin state: 0
rtc_init(0,0,0);
// LCD module initialization
lcd_init(16);
/* initialize the DS1307 RTC */
rtc_init(0,0,0); //tambahankan baris ini
//this function sets the current time of the RTC.
rtc_set_time(6,0,0); // jam 6:00:00
while (1)
{
/* read time from the DS1307 RTC */
rtc_get_time(&hour,&minute,&second);
//tampilkan di LCD 2×16
lcd_gotoxy(0,0);
sprintf(tampungLCD,”Time: %d:%d:%d “,hour,minute,second);
lcd_puts(tampungLCD);
}
}

More Related Content

What's hot

MODUL PLC (Programmable Logic Control) DIDIK
MODUL PLC (Programmable Logic Control) DIDIKMODUL PLC (Programmable Logic Control) DIDIK
MODUL PLC (Programmable Logic Control) DIDIKDidik Supriyono
 
Aktuator pada robot
Aktuator pada robotAktuator pada robot
Aktuator pada robot111903102021
 
1 pengukuran dan kesalahan
1 pengukuran dan kesalahan1 pengukuran dan kesalahan
1 pengukuran dan kesalahanSimon Patabang
 
Penyearah Satu Fasa Tidak terkontrol
Penyearah Satu Fasa Tidak terkontrolPenyearah Satu Fasa Tidak terkontrol
Penyearah Satu Fasa Tidak terkontrolUniv of Jember
 
Alat penyortir botol minum berbasis plc
Alat penyortir botol minum berbasis plcAlat penyortir botol minum berbasis plc
Alat penyortir botol minum berbasis plcDeva Saputra
 
Materi 2-dasar-sistem-proteksi-tt
Materi 2-dasar-sistem-proteksi-ttMateri 2-dasar-sistem-proteksi-tt
Materi 2-dasar-sistem-proteksi-ttTim Suwardiyanto
 
Menampilkan Karakter pada Lcd dengan Mikrokontroler ATMEGA16
Menampilkan Karakter pada  Lcd dengan Mikrokontroler ATMEGA16Menampilkan Karakter pada  Lcd dengan Mikrokontroler ATMEGA16
Menampilkan Karakter pada Lcd dengan Mikrokontroler ATMEGA16University of Lampung
 
8 rangkaian-dasar-kontrol-motor-listrik
8 rangkaian-dasar-kontrol-motor-listrik8 rangkaian-dasar-kontrol-motor-listrik
8 rangkaian-dasar-kontrol-motor-listrikpprawira11
 
Laporan plc traffic light
Laporan plc traffic lightLaporan plc traffic light
Laporan plc traffic lighta_mahmud
 
Instruksi timer dan counter plc omron
Instruksi timer dan counter plc omronInstruksi timer dan counter plc omron
Instruksi timer dan counter plc omronAdi Hartanto
 
RESISTANSI SERI, PARALEL, DAN GABUNGAN
RESISTANSI SERI, PARALEL, DAN GABUNGANRESISTANSI SERI, PARALEL, DAN GABUNGAN
RESISTANSI SERI, PARALEL, DAN GABUNGANPRAMITHA GALUH
 
Gerbang logika
Gerbang logikaGerbang logika
Gerbang logikaputusumaye
 
Perbedaan mikrokontroler dan mikroprosesor
Perbedaan mikrokontroler dan mikroprosesorPerbedaan mikrokontroler dan mikroprosesor
Perbedaan mikrokontroler dan mikroprosesorFAIZAL ALIF BUDI PRAKOSO
 

What's hot (20)

MODUL PLC (Programmable Logic Control) DIDIK
MODUL PLC (Programmable Logic Control) DIDIKMODUL PLC (Programmable Logic Control) DIDIK
MODUL PLC (Programmable Logic Control) DIDIK
 
Aktuator pada robot
Aktuator pada robotAktuator pada robot
Aktuator pada robot
 
Rangkaian penyearah
Rangkaian penyearahRangkaian penyearah
Rangkaian penyearah
 
1 pengukuran dan kesalahan
1 pengukuran dan kesalahan1 pengukuran dan kesalahan
1 pengukuran dan kesalahan
 
Materi Relay.pdf
Materi Relay.pdfMateri Relay.pdf
Materi Relay.pdf
 
Penyearah Satu Fasa Tidak terkontrol
Penyearah Satu Fasa Tidak terkontrolPenyearah Satu Fasa Tidak terkontrol
Penyearah Satu Fasa Tidak terkontrol
 
Sistem proteksi tenaga listrik
Sistem proteksi tenaga listrikSistem proteksi tenaga listrik
Sistem proteksi tenaga listrik
 
Alat penyortir botol minum berbasis plc
Alat penyortir botol minum berbasis plcAlat penyortir botol minum berbasis plc
Alat penyortir botol minum berbasis plc
 
Materi 2-dasar-sistem-proteksi-tt
Materi 2-dasar-sistem-proteksi-ttMateri 2-dasar-sistem-proteksi-tt
Materi 2-dasar-sistem-proteksi-tt
 
Menampilkan Karakter pada Lcd dengan Mikrokontroler ATMEGA16
Menampilkan Karakter pada  Lcd dengan Mikrokontroler ATMEGA16Menampilkan Karakter pada  Lcd dengan Mikrokontroler ATMEGA16
Menampilkan Karakter pada Lcd dengan Mikrokontroler ATMEGA16
 
8 rangkaian-dasar-kontrol-motor-listrik
8 rangkaian-dasar-kontrol-motor-listrik8 rangkaian-dasar-kontrol-motor-listrik
8 rangkaian-dasar-kontrol-motor-listrik
 
Laporan plc traffic light
Laporan plc traffic lightLaporan plc traffic light
Laporan plc traffic light
 
Instruksi timer dan counter plc omron
Instruksi timer dan counter plc omronInstruksi timer dan counter plc omron
Instruksi timer dan counter plc omron
 
Motor dc.
Motor dc.Motor dc.
Motor dc.
 
RESISTANSI SERI, PARALEL, DAN GABUNGAN
RESISTANSI SERI, PARALEL, DAN GABUNGANRESISTANSI SERI, PARALEL, DAN GABUNGAN
RESISTANSI SERI, PARALEL, DAN GABUNGAN
 
Gerbang logika
Gerbang logikaGerbang logika
Gerbang logika
 
Perbedaan mikrokontroler dan mikroprosesor
Perbedaan mikrokontroler dan mikroprosesorPerbedaan mikrokontroler dan mikroprosesor
Perbedaan mikrokontroler dan mikroprosesor
 
Lift 3 lantai plc
Lift 3 lantai plcLift 3 lantai plc
Lift 3 lantai plc
 
Tugas modulation AM, FM, dan PM
Tugas modulation AM, FM, dan PMTugas modulation AM, FM, dan PM
Tugas modulation AM, FM, dan PM
 
Transistor
TransistorTransistor
Transistor
 

Viewers also liked

Cara membuat simulasi lcd running text dengan menggunakan proteus
Cara membuat simulasi lcd running text dengan menggunakan proteusCara membuat simulasi lcd running text dengan menggunakan proteus
Cara membuat simulasi lcd running text dengan menggunakan proteusFilla Fidyana
 
Tutorial Penggunaan CodeVision AVR dengan Bahasa C
Tutorial Penggunaan CodeVision AVR dengan Bahasa CTutorial Penggunaan CodeVision AVR dengan Bahasa C
Tutorial Penggunaan CodeVision AVR dengan Bahasa CMuhammad Kennedy Ginting
 
Running Text on LCD ATMEGA 8535
Running Text on LCD ATMEGA 8535Running Text on LCD ATMEGA 8535
Running Text on LCD ATMEGA 8535Chardian Arguta
 
Tutorial membuat project termometer dan jam digital menggunakan codevision av...
Tutorial membuat project termometer dan jam digital menggunakan codevision av...Tutorial membuat project termometer dan jam digital menggunakan codevision av...
Tutorial membuat project termometer dan jam digital menggunakan codevision av...Muhammad Kennedy Ginting
 
Bab 4. Penggunaan Software AVR Studio 4, Simulasi dan Downloader
Bab 4. Penggunaan Software  AVR Studio 4, Simulasi dan DownloaderBab 4. Penggunaan Software  AVR Studio 4, Simulasi dan Downloader
Bab 4. Penggunaan Software AVR Studio 4, Simulasi dan DownloaderBeny Abd
 
Running led dengan mikrokontroler avr atmega16 (codevision
Running led dengan mikrokontroler avr atmega16 (codevisionRunning led dengan mikrokontroler avr atmega16 (codevision
Running led dengan mikrokontroler avr atmega16 (codevisionPriyo Harjiyono
 
72681707 jam-digital-at-mega-16
72681707 jam-digital-at-mega-1672681707 jam-digital-at-mega-16
72681707 jam-digital-at-mega-16Satria Speed
 
Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...
Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...
Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...Muhammad Kennedy Ginting
 
Hukum ohm-dan-hambatan
Hukum ohm-dan-hambatanHukum ohm-dan-hambatan
Hukum ohm-dan-hambatanAris Saputro
 
2 mikrokontroler atmega 8535
2 mikrokontroler atmega 85352 mikrokontroler atmega 8535
2 mikrokontroler atmega 8535Agung Gumelar
 
Laporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan ledLaporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan ledSawah Dan Ladang Ku
 
Modul praktikum rl2
Modul praktikum rl2Modul praktikum rl2
Modul praktikum rl2heri santosa
 
Modul dasar-mikrokontroler-bab-i-pengantar
Modul dasar-mikrokontroler-bab-i-pengantarModul dasar-mikrokontroler-bab-i-pengantar
Modul dasar-mikrokontroler-bab-i-pengantarBeny Abdurrahman
 
ARDUINOLIKE BOARDS: A SHORT HARDWARE REFERENCE GUIDE FOR MAKERS
ARDUINOLIKE BOARDS: A SHORT HARDWARE REFERENCE GUIDE FOR MAKERSARDUINOLIKE BOARDS: A SHORT HARDWARE REFERENCE GUIDE FOR MAKERS
ARDUINOLIKE BOARDS: A SHORT HARDWARE REFERENCE GUIDE FOR MAKERSLeandro Agro'
 

Viewers also liked (20)

Cara membuat simulasi lcd running text dengan menggunakan proteus
Cara membuat simulasi lcd running text dengan menggunakan proteusCara membuat simulasi lcd running text dengan menggunakan proteus
Cara membuat simulasi lcd running text dengan menggunakan proteus
 
Tutorial Penggunaan CodeVision AVR dengan Bahasa C
Tutorial Penggunaan CodeVision AVR dengan Bahasa CTutorial Penggunaan CodeVision AVR dengan Bahasa C
Tutorial Penggunaan CodeVision AVR dengan Bahasa C
 
Running Text on LCD ATMEGA 8535
Running Text on LCD ATMEGA 8535Running Text on LCD ATMEGA 8535
Running Text on LCD ATMEGA 8535
 
Tutorial membuat project termometer dan jam digital menggunakan codevision av...
Tutorial membuat project termometer dan jam digital menggunakan codevision av...Tutorial membuat project termometer dan jam digital menggunakan codevision av...
Tutorial membuat project termometer dan jam digital menggunakan codevision av...
 
Bab 4. Penggunaan Software AVR Studio 4, Simulasi dan Downloader
Bab 4. Penggunaan Software  AVR Studio 4, Simulasi dan DownloaderBab 4. Penggunaan Software  AVR Studio 4, Simulasi dan Downloader
Bab 4. Penggunaan Software AVR Studio 4, Simulasi dan Downloader
 
Modul pengenalan proteus
Modul pengenalan proteusModul pengenalan proteus
Modul pengenalan proteus
 
Makalah Mikrokontroler ATmega16
Makalah Mikrokontroler ATmega16Makalah Mikrokontroler ATmega16
Makalah Mikrokontroler ATmega16
 
(1) pemrograman lcd
(1) pemrograman lcd(1) pemrograman lcd
(1) pemrograman lcd
 
Running led dengan mikrokontroler avr atmega16 (codevision
Running led dengan mikrokontroler avr atmega16 (codevisionRunning led dengan mikrokontroler avr atmega16 (codevision
Running led dengan mikrokontroler avr atmega16 (codevision
 
72681707 jam-digital-at-mega-16
72681707 jam-digital-at-mega-1672681707 jam-digital-at-mega-16
72681707 jam-digital-at-mega-16
 
Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...
Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...
Membuat stopwatch menggunakan mikrokontroler atmega16 by muhammad kennedy gin...
 
Running text
Running textRunning text
Running text
 
Hukum ohm-dan-hambatan
Hukum ohm-dan-hambatanHukum ohm-dan-hambatan
Hukum ohm-dan-hambatan
 
Hukum ohm
Hukum ohmHukum ohm
Hukum ohm
 
2 mikrokontroler atmega 8535
2 mikrokontroler atmega 85352 mikrokontroler atmega 8535
2 mikrokontroler atmega 8535
 
Laporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan ledLaporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan led
 
Lu 3 hukum ohm
Lu 3 hukum ohmLu 3 hukum ohm
Lu 3 hukum ohm
 
Modul praktikum rl2
Modul praktikum rl2Modul praktikum rl2
Modul praktikum rl2
 
Modul dasar-mikrokontroler-bab-i-pengantar
Modul dasar-mikrokontroler-bab-i-pengantarModul dasar-mikrokontroler-bab-i-pengantar
Modul dasar-mikrokontroler-bab-i-pengantar
 
ARDUINOLIKE BOARDS: A SHORT HARDWARE REFERENCE GUIDE FOR MAKERS
ARDUINOLIKE BOARDS: A SHORT HARDWARE REFERENCE GUIDE FOR MAKERSARDUINOLIKE BOARDS: A SHORT HARDWARE REFERENCE GUIDE FOR MAKERS
ARDUINOLIKE BOARDS: A SHORT HARDWARE REFERENCE GUIDE FOR MAKERS
 

Similar to 97674720 buku-mikrokontroler-atmega8535-dengan-codevisionavr

Kk8 melakukan instalasi software
Kk8 melakukan instalasi softwareKk8 melakukan instalasi software
Kk8 melakukan instalasi softwareWahyu S
 
Modul pengenalan-proteus-75-ppm-2012
Modul pengenalan-proteus-75-ppm-2012Modul pengenalan-proteus-75-ppm-2012
Modul pengenalan-proteus-75-ppm-2012Mabekni Yulianto
 
Materi X TKJ Menerapkan fungsi periferal dan instalasi PC
Materi X TKJ Menerapkan fungsi periferal dan instalasi PCMateri X TKJ Menerapkan fungsi periferal dan instalasi PC
Materi X TKJ Menerapkan fungsi periferal dan instalasi PCHarly Umboh
 
Menerapkan fungsi periperhal dan instalasi pc
Menerapkan fungsi periperhal dan instalasi pcMenerapkan fungsi periperhal dan instalasi pc
Menerapkan fungsi periperhal dan instalasi pcEko Supriyadi
 
Laporan praktikum pti modul 2
Laporan praktikum pti modul 2Laporan praktikum pti modul 2
Laporan praktikum pti modul 2Faisal Zamar
 
MudafiqRiyan - Membuat Installer Dari Java Desktop
MudafiqRiyan - Membuat Installer Dari Java DesktopMudafiqRiyan - Membuat Installer Dari Java Desktop
MudafiqRiyan - Membuat Installer Dari Java DesktopMudafiq R. Pratama
 
Menerapkan Fungsi Periferal dan Instalasi PC
Menerapkan Fungsi Periferal dan Instalasi PCMenerapkan Fungsi Periferal dan Instalasi PC
Menerapkan Fungsi Periferal dan Instalasi PCm4stoer
 
Introduction on Android programming Tutorial
Introduction on Android programming TutorialIntroduction on Android programming Tutorial
Introduction on Android programming TutorialDimas Prawira
 
Kk2 (MENERAPKAN FUNGSI PERIPERHAL DAN INSTALASI PC)
Kk2 (MENERAPKAN FUNGSI PERIPERHAL DAN INSTALASI PC)Kk2 (MENERAPKAN FUNGSI PERIPERHAL DAN INSTALASI PC)
Kk2 (MENERAPKAN FUNGSI PERIPERHAL DAN INSTALASI PC)Danial Ahadian
 

Similar to 97674720 buku-mikrokontroler-atmega8535-dengan-codevisionavr (20)

6 modul avr
6 modul avr6 modul avr
6 modul avr
 
Ona anisa
Ona anisaOna anisa
Ona anisa
 
Kk8 melakukan instalasi software
Kk8 melakukan instalasi softwareKk8 melakukan instalasi software
Kk8 melakukan instalasi software
 
Kk8
Kk8Kk8
Kk8
 
KK_8_TKJ
KK_8_TKJKK_8_TKJ
KK_8_TKJ
 
Runnig led[1]
Runnig led[1]Runnig led[1]
Runnig led[1]
 
Modul pengenalan-proteus-75-ppm-2012
Modul pengenalan-proteus-75-ppm-2012Modul pengenalan-proteus-75-ppm-2012
Modul pengenalan-proteus-75-ppm-2012
 
Referensi proteus
Referensi proteusReferensi proteus
Referensi proteus
 
Laporan led
Laporan ledLaporan led
Laporan led
 
KK_2_TKJ
KK_2_TKJKK_2_TKJ
KK_2_TKJ
 
Materi X TKJ Menerapkan fungsi periferal dan instalasi PC
Materi X TKJ Menerapkan fungsi periferal dan instalasi PCMateri X TKJ Menerapkan fungsi periferal dan instalasi PC
Materi X TKJ Menerapkan fungsi periferal dan instalasi PC
 
Menerapkan fungsi periperhal dan instalasi pc
Menerapkan fungsi periperhal dan instalasi pcMenerapkan fungsi periperhal dan instalasi pc
Menerapkan fungsi periperhal dan instalasi pc
 
Laporan praktikum pti modul 2
Laporan praktikum pti modul 2Laporan praktikum pti modul 2
Laporan praktikum pti modul 2
 
MudafiqRiyan - Membuat Installer Dari Java Desktop
MudafiqRiyan - Membuat Installer Dari Java DesktopMudafiqRiyan - Membuat Installer Dari Java Desktop
MudafiqRiyan - Membuat Installer Dari Java Desktop
 
Menerapkan Fungsi Periferal dan Instalasi PC
Menerapkan Fungsi Periferal dan Instalasi PCMenerapkan Fungsi Periferal dan Instalasi PC
Menerapkan Fungsi Periferal dan Instalasi PC
 
Tugas bascom
Tugas bascomTugas bascom
Tugas bascom
 
Introduction on Android programming Tutorial
Introduction on Android programming TutorialIntroduction on Android programming Tutorial
Introduction on Android programming Tutorial
 
Avogadro
AvogadroAvogadro
Avogadro
 
Kk2 (MENERAPKAN FUNGSI PERIPERHAL DAN INSTALASI PC)
Kk2 (MENERAPKAN FUNGSI PERIPERHAL DAN INSTALASI PC)Kk2 (MENERAPKAN FUNGSI PERIPERHAL DAN INSTALASI PC)
Kk2 (MENERAPKAN FUNGSI PERIPERHAL DAN INSTALASI PC)
 
Assembly
AssemblyAssembly
Assembly
 

97674720 buku-mikrokontroler-atmega8535-dengan-codevisionavr

  • 1. 1 BAB 1 SOFTWARE COMPILER CODEVISION AVR 1.1 PENGENALAN CodeVisionAVR merupakan salah satu software gratis yang berfungsi sebagai text editor dalam menulis baris perintah sekaligus sebagai compiler yang dapat mengubah file sumber menjadi file hexa. Software CodeVisionAVR versi demo dapat di unduh dari http://www.hpinfotech.ro/html/cvavr.htm atau dari CD yang terdapat pada buku ini. CodeVisionAVR menyediakan berbagai fasilitas yang memudahkan pengguna. Salah satunya adalah CodeWizardAVR yang memberikan kemudahan dalam melakukan konfigurasi fungsi-fungsi pin dan fitur yang yang ingin digunakan. Pengguna dapat membuat dan menjalankan program yang ditulis, kemudian mengujinya langkah demi langkah sehingga pengguna dapat mengamati perubahan data pada setiap register dan port I/O. Selain itu juga CodeVisionAVR menyediakan toolbar yang memudahkan pengguna untuk melakukan berbagai interaksi yang diinginkan dan juga memiliki arena kerja yang cukup leluasa. 1.2 INSTALASI Agar pengguna dapat menggunakan software CodeVisionAVR maka para pengguna harus meng-instal-nya terlebih dahulu. Adapun proses instalasi software CodeVisionAVR ini cukup mudah. 1. Klik dua kali master program CodeVisionAVR yang ada di CD buku ini. 2. Ikuti langkah-langkah yang diminta dan lakukan perubahan seperlunya. 3. Setelah selesai, program dapat langsung dijalankan. 1.3 MEMBUAT PROGRAM BARU Membuat program baru menggunakan CodeVisionAVR tidaklah sulit. Adapun langkah-langkah yang harus dilakukan adalah sebagai berikut: 1. Jalankan program CodeVisionAVR. Dengan cara klik dua kali pada Icon CodeVisionAVR seperti pada gambar 1.1. Gambar 1.1 Icon CodeVisionAVR 2. Pada saat jalankan program CodeVisionAVR maka layar kosong tampak seperti pada gambar 1.2. Gambar 1.2 Tampilan CodeVisionAVR
  • 2. 2 3. Klik Menu File dan pilih New, maka tampil jendela pilihan seperti pada gambar 1.3. Gambar 1.3 Jendela Pilihan Tipe File 4. Untuk membuat program baru pilihlah Project kemudian klik OK, maka muncul pertanyaan yang menanyakan apakah kita ingin menggunakan CodeWizardAVR seperti pada gambar 1.4 berikut, kemudian pilih Yes. Gambar 1.4 Jendela Confirm CodeWizardAVR 5. Jendela CodeWizardAVR tampil seperti gambar 1.5. Pada tab Chip, lakukan konfigurasi seperti pada gambar 1.5. Gambar 1.5 CodeWizardAVR pada tab Chip
  • 3. 3 6. Selanjutnya pilih tab Ports, lalu lakukan pengaturan seperti pada gambar 1.6. Gambar 1.6 CodeWizardAVR pada tab Ports 7. Kemudian pilih menu File lalu pilih Generat, Save and Exit. Lalu kita diminta menyimpan tiga jenis file secara berurut. Dianjurkan simpan ketiga file tersebut dalam sebuah folder yang sama. 8. Setelah selesai, maka program CodeVisionAVR akan tampak seperti gambar 1.7, yang menunjukan bahwa sudah terdapat program yang telah dikonfigurasi dan siap digunakan atau disisipkan program tambahan. Gambar 1.7 Program CodeVisionAVR yang terkonfigurasi
  • 4. 4 9. Kemudian sisipkan program utama seperti yang tampak pada gambar 1.8 berikut. Gambar 1.8 Menyisipkan program utama 10. Setelah selesai kita dapat melakukan kompilasi pada program dengan cara pilih menu Project lalu pilih Build All atau Ctrl+F9. 11. Jika program sudah benar atau tidak terdapat kesalahan, maka akan tampil jendela informasi seperti gambar 1.9 berikut ini. Gambar 1.10 Jendela Informasi 12. Kemudian klik OK, dan program siap di download ke rangkaian. Langlah-langkah diatas adalah proses untuk menghasilkan file dengan bahasa mesin yaitu file dengan ekstensi hexa (*.hex). File ini dibutuhkan untuk diisi (download) ke IC mikrokontroler, karena mikrokontroler hanya mengerti bahasa mesin. Tahap-tahap ini akan terus dilakukan setiap membuat program baru.
  • 5. 5 BAB 2 SOFTWARE PROTEUS 7 PROFESSIONAL 2.1 PENGENALAN Pada umumnya setiap pegguna yang baru mulai belajar mengalami kesulitan untuk mempelajari mikrokontroler apabila tidak ada pendukung secara langsung seperti pengajar dan peralatan yang memadai. Untuk itu dibutuhkan suatu sarana yang dapat digunakan untuk mencoba suatu rangkaian mikrokontroler. Salah satunya adalah software Proteus 7 Professional. Software Proteus 7 Professional ini tidak free, maka pada CD saya hanya bisa memberikan Proteus 7 Professional versi demo. Penggunaannya tidak jauh berbeda dengan Proteus 7 Professional. Proteus 7 Professional memiliki program yang dapat berfungsi untuk mensimulasikan rangkaian mikrokontroler seolah-olah pengguna berhadapan dengan rangkaian yang sesungguhnya. Software Proteus terdiri dari dua program utama yaitu ARES dan ISIS. Dimana masing- masing program memiliki fungsi yang berbeda. ARES biasa digunakan untuk membuat layout PCB (Printed Circuit Board), sedangkan ISIS biasa digunakan untuk menggambar schematic rangkaian serta mensimulasikan program. Pada buku ini hanya menggunakan program ISIS yang digunakan untuk mensimulasikan rangkaian mikrokontroler. Sedangkan untuk membuat layoutnya silahkan anda pilih sesuai selera mau menggunakan software mana. 2.2 INSTALASI Untuk instalasi program, tidak jauh berbeda dengan cara menginstal program lain pada umumnya. Yang diinstal disini adalah software Proteus-nya, namun pada penggunaannya kita hanya akan menggunakan program ISIS-nya saja yang dapat digunakan sebagai simulator, agar rangkaian mikrokontrolernya tampak seperti rangkaian sesungguhnya. Adapun proses instalasi nya adalah sebagai berikut : 1. Klik dua kali master program Proteus 7 Professional versi Demo yang ada di CD buku ini atau download dari http://www.labcenter.co.uk/download/prodemo_download.cfm 2. Ikuti langkah-langkah yang diminta dan lakukan perubahan seperlunya jika dibutuhkan. 3. Setelah selesai, program dapat langsung dijalankan. 2.3 TAMPILAN PROGRAM Pada software Proteus, kita menggunakan program ISIS yang berfungsi sebagai simulator. Pada program ISIS banyak sekali fasilitas yang disajikan dan akan memakan banyak waktu jika harus menjelaskan semuanya. Oleh karena itu saya hanya akan menjelas beberapa saja yang diperlukan. Secara umum tampilan program ISIS pada Software Proteus 7 Professional adalah sebagai berikut : Gambar 2.1 Tampilan Program ISIS Keterangan : 1. Editing Window. 2. Overview Window. 3. Object Selector. 1 2 3
  • 6. 6 2.4 MEMBUAT SIMULASI PROGRAM Dalam membuat simulasi program tidaklah sulit. Namun ada beberapa tahap yang harus dilalui. Secara garis besar ada 3 tahap, yaitu :  Pemilihan komponen yang akan digunakan.  Peletakan komponen dan penyusunan rangkaian.  Download program pada rangkaian. Namun sebelum pengguna membuat schematic rangkaian, pengguna harus paham prinsip kerja dari rangkaian yang ingin dibuat, sehingga pengguna dapat memeriksa kesalahan sedini mungkin pada rangkaian jika terdapat error atau ketidaksesuaian prinsip kerja pada rangkaian. Untuk mensimulasikan rangkaian mikrokontroler menggunakan program ISIS ini, pengguna tidak perlu membuat schematic secara ”lengkap”, tapi cukup membuat rangkaian input/output-nya saja seperti pada gambar-gambar schematic yang nanti akan anda temukan pada contoh-contoh rangkaian. Pada rangkaian sebenarnya kita menggunakan IC mikrokontroler ATMega8535, tetapi pada simulator tidak terdapat IC ATMega8535, maka kita menggunakan IC mikrokontroler yang sekelas dengan ATMega8535 yaitu AT90S8535 dan untuk seterusnya kita akan menggunakan IC tersebut dalam membuat simulasi-simulasi rangkaian pada buku ini. Berikut ini adalah langkah-langkah membuat simulasi program menggunakan program ISIS : 1. Siapkan gambar rangkaian yang ingin disimulasikan. Contohnya seperti gambar 2.2 berikut. Gambar 2.2 Rangkaian ATMega8535 2. Jalankan program ISIS dan buka lembar baru. Tampak seperti gambar 2.3 berikut. Gambar 2.3 Tampilan Jendela baru Component Mode Terminal Mode
  • 7. 7 3. Pilih komponen yang akan digunakan, klik Component Mode kemudian tekan tombol Pick Devices. Seperti gambar 2.4 berikut. Dan cari komponen IC Mikrokontroler AT90S8535 dan komponen LED. Gambar 2.4 Tombol Pick Devices 4. Pilih kategori, dan ambil komponen yang dibutuhkan dengan cara klik dua kali nama komponen yang dipilih seperti gambar 2.5 berikut. Gambar 2.5 Jendela Pick Devices 5. Setelah semua komponen terkumpul di bagian Object Selector, klik OK. 6. Pilih toolbar Terminal Mode, ambil komponen Power dan letakkan pada rangkaian, atur posisi komponen pada Editing Window. Seperti gambar 2.6 berikut. Gambar 2.6 Posisi komponen
  • 8. 8 7. Hubungkan jalur pada masing-masing komponen sesuai gambar rangkaian sehingga tampak seperti gambar 2.7. Gambar 2.7 Hubungan Jalur Komponen 8. Gambar rangkaian tidak perlu lengkap seperti aslinya. Yang penting input dan output rangkaian terhubung dengan komponen yang diinginkan seperti contoh gambar 2.7. Setelah selesai, rangkaian siap disimulasikan dan lihatlah tampilan yang dihasilkan pada gambar simulasi. Gambar 2.8 Jendela Edit Component 9. Klik dua kali IC mikrokontroler pada rangkaian, akan muncul jendela Edit Component. Pada bagian Program File, klik lambang folder, maka akan muncul jendela Select File Name, pilih program LED.HEX yang telah dibuat dan berhasil di compile sebelumnya. Klik Open, lalu Klik OK. 10. Jalankan simulasi rangkaian dengan cara menekan tombol Play pada bagian sudut kiri bawah. 11. Jika LED pada rangkaian berkedap-kedip, maka berarti rangkaian anda telah berhasil disimulasikan.
  • 9. 9 BAB 3 APLIKASI LAMPU LED LED (Light Emitting Diode) adalah komponen semikonduktor yang dapat mengemisikan cahaya ketika dialiri arus listrik. Penggunaan LED sudah sangat populer sehingga banyak digunakan diindustri perangkat elektronika. LED mempunyai banyak kelebihan yaitu penggunaan arus yang kecil dan dapat menghasilkan cahaya yang bermacam-macam, sehingga LED banyak digunakan sebagai indikator dan lampu display. Gambar 3.1 Contoh bentuk dan warna LED 3.1 ANIMASI LED. Aplikasi lampu LED (Light Emitting Diode) adalah aplikasi yang paling sederhana dan yang paling dasar dalam mempelajari dasar pengontrolan menggunakan mikrokontroler. Maka dianggap penting sekali memahami prinsip kerja dari LED ini. LED terdiri dari 2 kaki yaitu anoda dan katoda, dimana LED akan menyala jika arus mengalir dari anoda ke katoda. Pada apliksi lampu LED kali ini, kita akan menghubungkan LED ke mikrokontroler melalui Port A. Seperti pada gambar 3.3. Gambar 3.2 Simbol LED (Light Emitting Diode) Rangkaian Simulasi Animasi LED. Gambar 3.3 Rangkaian Lampu Flip-flop Kedelapan LED kita hubungkan ke PortA dengan menghubungkan semua pin Anoda dari LED ke sumber positif dari tegangan atau biasa disebut Common Anoda (CA). Maka untuk menyalakan LED, data pada PortA harus diberi data ‟0‟.
  • 10. 10 Tugas Program Aplikasi LED. Buatlah program baru dengan CodeWizardAVR seperti konfigurasi berikut, kemudian edit program seperti pada gambar. Program 1. Aplikasi Lampu LED
  • 11. 11 Program 2. Animasi Lampu LED Flip-Flop Program 3. Animasi LED Bergeser
  • 12. 12 BAB 4 APLIKASI 7 SEGMENT NON-MULTIPLEX Aplikasi 7 segment sering kita temukan pada keseharian kita terutama pada peralatan elektronik. Biasanya digunakan untuk menampilkan channel atau track pada televisi atau VCD, pada aplikasi lampu lalu lintas di perempatan jalan dan pada sistem antriandi Bank atau tempat pelayanan umum lainnya. Pada bab ini akan membahas aplikasi menggunakan 7 segment secara sederhana. Aplikasi 7 segment Non-Multiplex disini dimaksudkan cara penggunaan 7 segment secara sendiri-sendiri atau independent. Sebuah 7 segment memiliki 8 buah pin yang masing-masing dihubungkan dengan 1 buah port pada mikrokontroler. Masing-masing port akan mengontrol 1 buah 7 segment yang digunakan untuk menampilkan 1 digit angka seperti pada gambar 4.1. Rangkaian Simulasi 7 Segment Non-Multiplex tanpa decoder Gambar 4.1 Rangkaian 7 Segment Non-Multiplex Tugas Program Aplikasi LED. Buatlah program baru dengan CodeWizardAVR seperti konfigurasi berikut, kemudian edit program seperti pada gambar. Program 1. Aplikasi 7 Segment 1 digit
  • 13. 13 Program 2. Aplikasi 7 Segment 2 digit #include <mega8535.h> #include <delay.h> void satuan() { PORTC=0x40; delay_ms(500); PORTC=0x79; delay_ms(500); PORTC=0x24; delay_ms(500); PORTC=0x30; delay_ms(500); PORTC=0x19; delay_ms(500); PORTC=0x12; delay_ms(500); PORTC=0x02; delay_ms(500); PORTC=0x78; delay_ms(500); PORTC=0x00; delay_ms(500); PORTC=0x10; delay_ms(500); } void main(void) { PORTA=0x00; DDRA=0xFF; PORTC=0x00; DDRC=0xFF; while (1) { PORTA=0x40; satuan(); PORTA=0x79; satuan(); PORTA=0x24; satuan(); PORTA=0x30; satuan(); PORTA=0x19; satuan(); PORTA=0x12; satuan(); PORTA=0x02; satuan(); PORTA=0x78; satuan(); PORTA=0x00; satuan(); PORTA=0x10; satuan(); }; } Rangkaian Simulasi 7 Segment Non-Multiplex tanpa decoder
  • 14. 14 Decoder adalah suatu driver yang digunakan mengubah data. Untuk menampilkan angka pada 7 segment display terkadang kita membutuhkan decoder BCD (Binary Coded Decimal) untuk membantu kita dalam memproses data. Decoder ini biasanya digunakan untuk mengubah data desimal menjadi data biner. Decoder untuk jenis Common Anode diperlukan keluaran aktip rendah (misalnya SN-7447) sedangkan untuk jenis Common Cathode diperlukan keluaran aktip tinggi (misalnya SN-7448). Teknik pemberian datanya agak berbeda dengan sebelumnya. Yakni dengan cara membagi dua bagian sebuah port lalu mengontrol masing-masing bagian tanpa harus mengganggu data yang lain. Misalkan data terakhir pada 7 segment adalah 34, berarti data PORTA =0x43. Kemudian mau diubah menjadi 35, berarti angka satuan menjadi angka 5 (4  5), berarti kita hanya mengubah data pada LSB, sedangkan data MSB tetap. Caranya adalah sebagai berikut, Data heksa Biner LSB MSB Tahap 1 PORTA =0x43; 0B 0100 | 0011  data sekarang / terakhir Tahap 2 Kosongkan MSB  0000 | 0011  di AND -kan dengan data (0000 | 0011) Dengan perintah PORTA&=0x03; Tahap 3 Set MSB menjadi  0101 | 0011  di OR –kan dengan data (0101 | 0000) Dengan perintah PORTA|=0x50; Tugas Program Aplikasi LED. Buatlah program baru dengan CodeWizardAVR seperti konfigurasi berikut, kemudian edit program seperti pada gambar. Program 1. Aplikasi 7 Segment 1 digit Puluhan Satuan
  • 15. 15 #include <mega8535.h> #include <delay.h> void main(void) { PORTA=0x00; DDRA=0xFF; while (1) { PORTA=0x0; delay_ms(500); PORTA=0x1; delay_ms(500); PORTA=0x2; delay_ms(500); PORTA=0x3; delay_ms(500); PORTA=0x4; delay_ms(500); PORTA=0x5; delay_ms(500); PORTA=0x6; delay_ms(500); PORTA=0x7; delay_ms(500); PORTA=0x8; delay_ms(500); PORTA=0x9; delay_ms(500); }; } Program 2. Aplikasi 7 Segment 2 digit #include <mega8535.h> #include <delay.h> void satuan() { PORTA&=0x0F; PORTA |=0x00; delay_ms(500); PORTA&=0x0F; PORTA |=0x10; delay_ms(500); PORTA&=0x0F; PORTA |=0x20; delay_ms(500); PORTA&=0x0F; PORTA |=0x30; delay_ms(500); PORTA&=0x0F; PORTA |=0x40; delay_ms(500); PORTA&=0x0F; PORTA |=0x50; delay_ms(500); PORTA&=0x0F; PORTA |=0x60; delay_ms(500); PORTA&=0x0F; PORTA |=0x70; delay_ms(500); PORTA&=0x0F; PORTA |=0x80; delay_ms(500); PORTA&=0x0F; PORTA |=0x90; delay_ms(500); } void main(void) { PORTA=0x00; DDRA=0xFF; PORTC=0x00; DDRC=0xFF; while (1) { PORTA&=0xF0; PORTA|=0x00; satuan(); PORTA&=0xF0; PORTA|=0x01; satuan(); PORTA&=0xF0; PORTA|=0x02; satuan(); PORTA&=0xF0; PORTA|=0x03; satuan(); PORTA&=0xF0; PORTA|=0x04; satuan(); PORTA&=0xF0; PORTA|=0x05; satuan(); PORTA&=0xF0; PORTA|=0x06; satuan(); PORTA&=0xF0; PORTA|=0x07; satuan(); PORTA&=0xF0; PORTA|=0x08; satuan(); PORTA&=0xF0; PORTA|=0x09; satuan(); }; }
  • 16. 16 BAB 5 APLIKASI 7 SEGMENT MULTIPLEX 5.1 Rangkaian Simulasi 7 Segment Multiplex Aplikasi 7 segment Multiplex merupakan penggunaan 7 segment secara paralel. 7 segment yang berjumlah 2 atau lebih disusun sedemikian rupa sehingga masing-masing pin yang sama pada 7 segment terubung secara paralel terhadap pin pada port mikrokontroler. Sehingga pada mikrokontroler hanya akan menggunakan 2 buah port apabila 7 segment yang digunakan berjumlah maksimum 8 buah. Port pada mikrokontroler yang dihubungkan dengan pin pada 7 segment digunakan untuk menetukan data yang akan ditampilkan. Sedangkan port yang terhubung pada common masing-masing 7 segment digunakan untuk mengontrol 7 segment mana yang akan aktif/menyala. Rangkaian Simulasi 7 Segment Multiplex Gambar 5.1 Rangkaian 7 Segment Multiplex Tugas Program Aplikasi LED. Buatlah program baru dengan CodeWizardAVR seperti konfigurasi berikut, kemudian edit program seperti pada gambar. Gambar 5.2 Konfigurasi 7 Segment Multiplex Program 1. Aplikasi 7 Segment 8 digit #include <mega8535.h> #include <delay.h> void main(void) { PORTA=0xFF; DDRA=0xFF; PORTC=0x00; DDRC=0xFF; while (1) { PORTC=0x40; delay_ms(500); PORTC=0x79; delay_ms(500); PORTC=0x24; delay_ms(500); PORTC=0x30; delay_ms(500); PORTC=0x19; delay_ms(500); PORTC=0x12; delay_ms(500); PORTC=0x02; delay_ms(500); PORTC=0x78; delay_ms(500); PORTC=0x00; delay_ms(500); PORTC=0x10; delay_ms(500); }; }
  • 17. 17 5.2 Aplikasi 7 Segment LCD dengan Decoder 7447 Aplikasi 7 segment menggunakan LCD display tidak berbeda dengan menggunakan 7 segment biasa, perbedaan hanya terdapat pada bentuk dan ukuran saja. Namun pada penjelasan kali ini hanya menambahkan komponen IC TTL sebagai decoder agar pemberian data menjadi lebih mudah. 7 segment LCD Display ini sudah terdiri dari 8 buah 7 segment yang tersusun secara multiplex. Sehingga kita cukup menggunakan 2 buah port yang akan dihubungkan dengan pin common pada LCD dan Pin Input pada IC TTL. Untuk jelasnya bisa dilihat pada gambar 5.3. Rangkaian Simulasi 7 Segment LCD dengan Decoder 7447 Gambar 5.3 Rangkaian 7 Segment LCD Multiplex dengan Decoder Program 2. Aplikasi 7 Segment 8 digit dengan decoder #include <mega8535.h> #include <delay.h> void main(void) { PORTA=0x00; DDRA=0xFF; PORTC=0x00; DDRC=0xFF; while (1) { PORTC=0x0; delay_ms(500); PORTC=0x1; delay_ms(500); PORTC=0x2; delay_ms(500); PORTC=0x3; delay_ms(500); PORTC=0x4; delay_ms(500); PORTC=0x5; delay_ms(500); PORTC=0x6; delay_ms(500); PORTC=0x7; delay_ms(500); PORTC=0x8; delay_ms(500); PORTC=0x9; delay_ms(500); }; } Program 3. Aplikasi 7 Segment 8 digit dengan decoder #include <mega8535.h> #include <delay.h> void main(void) { PORTA=0xFF; DDRA=0xFF; PORTC=0x00; DDRC=0xFF; while (1) { PORTA=0B00000001; PORTC=0x0; delay_ms(500); PORTA=0B00000010; PORTC=0x1; delay_ms(500); PORTA=0B00000100; PORTC=0x2; delay_ms(500); PORTA=0B00001000; PORTC=0x3; delay_ms(500); PORTA=0B00010000; PORTC=0x4; delay_ms(500); PORTA=0B00100000; PORTC=0x5; delay_ms(500); PORTA=0B01000000; PORTC=0x6; delay_ms(500); PORTA=0B10000000; PORTC=0x7; delay_ms(500); }; }
  • 18. 18 BAB 6 APLIKASI LED DOT MATRIX LED Dot Matrix merupakan salah satu aplikasi dari LED yang disusun secara Matrix dan dapat berfungsi untuk menampilkan berbagai macam karakter. Terdapat berbagai macam tampilan yang dapat dihasilkan melalui LED Dot Matrix. Pada LED Dot Matrix 5x7 terdapat 5 pin kolom dan 7 pin baris yang digunakan untuk menentukan kondisi masing- masing LED. Jika salah satu bagian menjadi input maka bagian yang lain harus sebagai output atau sebaliknya. Maksudnya salah satu bagian akan menjadi tempat masuknya arus dan bagian yang lain akan menjadi tempat keluarnya arus tergantung pada kondisi posisi Anoda/katoda LED yang terpasang didalamnya. Jika Anoda dari LED terpasang pada bagian kolom maka semua pin pada bagian kolom merupakn tempat masuknya arus dan bagian baris merupakan tempat keluarnya arus. Apabila bagian kolom diberi arus atau diberi data 1 (high) maka kolom tersebut aktif atau LED pada kolom tersebut siap menyala. LED yang menyala akan tergantung pada bagian baris yang diberi data 0 (low). Rangkaian Simulasi Gambar 4.4 Ranglaian LED Dot Matrix 5x7 Contoh Program. Program 1. Menampilkan 1 Karakter pada LED Dot Matrix 5x7 #include <mega8535.h> #include <delay.h> void main(void) { PORTA=0x00; DDRA=0xFF; PORTC=0x00; DDRC=0xFF; while (1) { PORTA=0x01; PORTC=0B00000011; delay_ms(1); PORTA=0x02; PORTC=0B01110101; delay_ms(1); PORTA=0x04; PORTC=0B01110110; delay_ms(1); PORTA=0x08; PORTC=0B01110101; delay_ms(1); PORTA=0x10; PORTC=0B00000011; delay_ms(1); }; }
  • 19. 19 BAB 7 APLIKASI LCD DISPLAY 16X2 LCD Display 16x2 merupakan salah satu komponen display yang paling populer digunakan untuk berbagai aplikasi. LCD Display memberikan kenyamanan dalam interface, selain lebih menarik LCD Display juga dapat menampilkan berbagai macam karakter yang tidak dapat ditampilkan menggunakan 7 segment. Lakukan konfigurasi CodeWizardAVR seperti gambar berikut. Gambar 7.1 Konfigurasi LCD Display 16x2 Rangkaian Simulasi LCD Display 16x2 Gambar 7.3 Rangkaian Aplikasi LCD Display 16x2
  • 20. 20 Contoh Program Program 1. Penampil Karakter dengan LCD #include <mega8535.h> #include <stdio.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x15 ;PORTC #endasm #include <lcd.h> // Declare your global variables here unsigned int temp=15; char buf[33]; void main(void) { // LCD module initialization lcd_init(16); while (1) { // Place your code here lcd_gotoxy(0,0); lcd_putsf("Sensor"); lcd_gotoxy(0,1); sprintf(buf, "Data = %d",temp); lcd_puts(buf); }; } Program 2. Penampil Data Variable yang berubah #include <mega8535.h> #include <stdio.h> #include <delay.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x15 ;PORTC #endasm #include <lcd.h> // Declare your global variables here unsigned int temp=0; char buf[33]; void main(void) { // LCD module initialization lcd_init(16); while (1) { // Place your code here lcd_gotoxy(0,0); sprintf(buf, "%d",temp); lcd_puts(buf); delay_ms(1000); ++temp; }; }
  • 21. 21 BAB 8 APLIKASI TOMBOL PUSH BUTTON Tombol salah satu komponen yang paling sering digunakan pada aplikasi elektronik. Tombol biasa digunakan sebagai pemilih, pengatur dan juga sebagai sensor yang kemudian diproses untuk mengerjakan sesuatu. Umumnya jenis tombol ada 2 macam, yaitu tombol Push Button (Tombol Tekan) dan Tombol Toggle (On/Off). Terdapat berbagai macam bentuk dan ukuran tombol dari yang kecil sampai yang besar, sehingga pengguna harus memilih tombol yang sesuai tergantung kebutuhan. Contoh bentuk-bentuk tombol bias dilihat pada gambar 6.1 berikut. Gambar 8.1 Macam-Macam Tombol PUSH BUTTON Tombol Push Button sering kita lihat dalam kehidupan sehari-hari pada peralatan elektronik, seperti radio, televisi, keyboard dan kalkulator lain-lain. Biasanya tombol push button ini digunakan untuk memilih atau menetukan suatu proses, misalnya memilih channel televisi atau mengetik komputer. Gambar 8.2 Konfigurasi Tombol, 7 Segment dan LCD
  • 22. 22 Rangkaian Aplikasi Tombol Push Button dan LED Gambar 8.3 Aplikasi Tombol Push Button dan LED Program Baca Masukan Tombol Push Button ke LED #include <mega8535.h> void main(void) { PORTA=0x00; DDRA=0xFF; PORTB=0xFF; DDRB=0x00; while (1) { // Place your code here PORTA=PINB; }; } Rangkaian Aplikasi Tombol Push Button dan 7 Segment Gambar 8.4 Aplikasi Tombol Push Button dan Seven Segment
  • 23. 23 Program Baca Masukan Tombol Push Button ke 7 Segment #include <mega8535.h> void main(void) { PORTA=0x00; DDRA=0xFF; PORTB=0xFF; DDRB=0x00; while (1) { // Place your code here if(PINB.0==0) PORTA=0x79; if(PINB.1==0) PORTA=0x24; if(PINB.2==0) PORTA=0x30; if(PINB.3==0) PORTA=0x19; if(PINB.4==0) PORTA=0x12; if(PINB.5==0) PORTA=0x02; if(PINB.6==0) PORTA=0x78; if(PINB.7==0) PORTA=0x00; if(PINB==255) PORTA=0x40; }; } Rangkaian Aplikasi Tombol Push Button dan LCD Gambar 8.5 Aplikasi Tombol Push Button dan LCD Program Baca Masukan Tombol Push Button ke LCD #include <mega8535.h> #include <stdio.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x15 ;PORTC #endasm #include <lcd.h> // Declare your global variables here unsigned int temp=15; char buf[33]; void main(void) {
  • 24. 24 PORTB=0xFF; DDRB=0x00; // LCD module initialization lcd_init(16); while (1) { // Place your code here if(PINB.0==0) temp=1; if(PINB.1==0) temp=2; if(PINB.2==0) temp=3; if(PINB.3==0) temp=4; if(PINB.4==0) temp=5; if(PINB.5==0) temp=6; if(PINB.6==0) temp=7; if(PINB.7==0) temp=8; if(PINB==255) temp=0; lcd_gotoxy(0,0); sprintf(buf, "Data = %d",temp); lcd_puts(buf); }; }
  • 25. 25 BAB 9 TOMBOL MATRIX Tombol matrix merupakan tombol push button yang disusun secara matrix sehingga tombol tampak menjadi susunan tombol yang teratur. Kita ambil salah satu contoh tombol matrix 4x4. ini berarti tombol tersebut memiliki 4 baris dan 4 kolom. Sebuah tombol yang ditekan akan terhubung ke salah satu baris dan salah satu kolom yang nantinya akan menghubungkan baris dan kolom tersebut sesuai letak tombol tersebut. Seperti yang ditunjukan oleh gambar 9.1. Gambar 9.1 Rangkaian Tombol Matrix 4x4 Rangkaian Simulasi Tombol Matrix To LCD Gambar 9.2 Rangkaian Tombol Matrix To LCD Display
  • 26. 26 Gambar 9.3 Konfigurasi Keypad dan LCD Contoh Program Program Baca Masukan Tombol Matrix 4x4 #include <mega8535.h> #include <stdio.h> #include <delay.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x15 ;PORTC #endasm #include <lcd.h> // Declare your global variables here int key; char buff[33]; unsigned char keypad( ) { //Kolom 1================== PORTD = 0b11110111; if(PIND.7==0) {key=10; goto run;} if(PIND.6==0) {key=15; goto run;} if(PIND.5==0) {key=0; goto run;} if(PIND.4==0) {key=14; goto run;} //Kolom 2================= PORTD = 0b11111011; if(PIND.7==0) {key=13; goto run;} if(PIND.6==0) {key=9; goto run;} if(PIND.5==0) {key=8; goto run;} if(PIND.4==0) {key=7; goto run;} //Kolom 3================= PORTD = 0b11111101; if(PIND.7==0) {key=12; goto run;} if(PIND.6==0) {key=6; goto run;} if(PIND.5==0) {key=5; goto run;} if(PIND.4==0) {key=4; goto run;} //Kolom 4=================
  • 27. 27 PORTD = 0b11111110; if(PIND.7==0) {key=11; goto run;} if(PIND.6==0) {key=3; goto run;} if(PIND.5==0) {key=2; goto run;} if(PIND.4==0) {key=1; goto run;} run: return key; } void main(void) { PORTD=0xF0; DDRD=0x0F; // LCD module initialization lcd_init(16); while (1) { // Place your code here awal: lcd_gotoxy(0,0); lcd_putsf("Tekan Sembarang "); set: key=keypad(); lcd_gotoxy(0,1); sprintf(buff,"%d ",key); lcd_puts(buff); delay_ms(5); //key=keypad(); }; } Rangkaian Simulasi Kalkulator Gambar 9.4 Rangkaian Simulasi Kalkulator
  • 28. 28 Gambar 9.5 Konfigurasi Keypad dan LCD Contoh Program Program Aplikasi Kalkulator #include <mega8535.h> #include <stdio.h> #include <delay.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x15 ;PORTC #endasm #include <lcd.h> // Declare your global variables here int key=20,step,op,a1,b1,c; char buff[33]; unsigned char keypad( ) { //Kolom 1================== PORTB = 0b11110111; if(PINB.7==0) {key=10; goto run;} //tambah if(PINB.6==0) {key=15; goto run;} //sama dengan = Enter if(PINB.5==0) {key=0; goto run;} if(PINB.4==0) {key=14; goto run;} //ON = Cancel //Kolom 2================= PORTB = 0b11111011; if(PINB.7==0) {key=13; goto run;} //kurang if(PINB.6==0) {key=9; goto run;} if(PINB.5==0) {key=8; goto run;} if(PINB.4==0) {key=7; goto run;} //Kolom 3================= PORTB = 0b11111101; if(PINB.7==0) {key=12; goto run;} //kali if(PINB.6==0) {key=6; goto run;} if(PINB.5==0) {key=5; goto run;} if(PINB.4==0) {key=4; goto run;}
  • 29. 29 //Kolom 4================= PORTB = 0b11111110; if(PINB.7==0) {key=11; goto run;} //bagi if(PINB.6==0) {key=3; goto run;} if(PINB.5==0) {key=2; goto run;} if(PINB.4==0) {key=1; goto run;} run: return key; } void main(void) { PORTB=0xF0; DDRB=0x0F; // LCD module initialization lcd_init(16); while (1) { if(step == 0) { key=keypad(); if(key < 10) { a1=key; lcd_gotoxy(0,0); sprintf(buff,"%d ",a1); lcd_puts(buff); step = 1; } else step=0; } if(step == 1) { key=keypad(); if(key == 10) { op=1; //Tambah sprintf(buff,"+ "); lcd_puts(buff); step = 2; } if(key == 13) { op=2; //Kurang sprintf(buff,"- "); lcd_puts(buff); step = 2; } if(key == 12) { op=3; //Kali sprintf(buff,"* "); lcd_puts(buff); step = 2; } if(key == 11) { op=4; //Bagi sprintf(buff,"/ "); lcd_puts(buff);
  • 30. 30 step = 2; } } if(step == 2) { key=keypad(); if(key < 10) { b1=key; sprintf(buff,"%d ",b1); lcd_puts(buff); step = 3; } else step=2; } if(step == 3) { if(op == 1) { c=a1+b1; sprintf(buff,"= %d ",c); lcd_puts(buff); step = 4; } if(op == 2) { c=a1-b1; sprintf(buff,"= %d ",c); lcd_puts(buff); step = 4; } if(op == 3) { c=a1*b1; sprintf(buff,"= %d ",c); lcd_puts(buff); step = 4; } if(op == 4) { c=a1/b1; sprintf(buff,"= %d ",c); lcd_puts(buff); step = 4; } step = 4; } if(step == 4) { key=keypad(); if(key == 14) { lcd_clear(); step = 0; } else step=4; } }; }
  • 31. 31 BAB 10 APLIKASI DATA ANALOG PADA LCD DISPLAY Aplikasi data analog sering digunakan pada sensor-sensor yang keluarannya seperti sensor suhu, kelembaban, asap dan sensor lainnya. Pada rangkaian simulasi kita hanya menggunakan resistor variabel sebagai pengatur output analog yang nantinya diproses oleh mikrokontroler dan kemudian ditampilkan melalui LCD Display. Rangkaian Simulasi Analog pada LCD Display Gambar 10.1 Aplikasi ADC to LCD Display Gambar 10.2 Konfigurasi ADC dan LCD
  • 32. 32 Contoh Program Program Pembaca Data Analog 8 Channel #include <mega8535.h> #include <stdio.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x15 ;PORTC #endasm #include <lcd.h> #include <delay.h> #define ADC_VREF_TYPE 0x60 // Read the 8 most significant bits // of the AD conversion result unsigned char read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCH; } // Declare your global variables here unsigned char temp[30]; void main(void) { // Declare your local variables here // ADC initialization // ADC Clock frequency: 1000.000 kHz // ADC Voltage Reference: AVCC pin // ADC High Speed Mode: Off // ADC Auto Trigger Source: None // Only the 8 most significant bits of // the AD conversion result are used ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x83; SFIOR&=0xEF; // LCD module initialization lcd_init(16); while (1) { // Place your code here lcd_gotoxy(0,0); sprintf(temp,"Data ADC0 = %d ",read_adc(0)); lcd_puts(temp); delay_ms(1000); lcd_gotoxy(0,0); sprintf(temp,"Data ADC1 = %d ",read_adc(1));
  • 33. 33 lcd_puts(temp); delay_ms(1000); lcd_gotoxy(0,0); sprintf(temp,"Data ADC2 = %d ",read_adc(2)); lcd_puts(temp); delay_ms(1000); lcd_gotoxy(0,0); sprintf(temp,"Data ADC3 = %d ",read_adc(3)); lcd_puts(temp); delay_ms(1000); lcd_gotoxy(0,0); sprintf(temp,"Data ADC4 = %d ",read_adc(4)); lcd_puts(temp); delay_ms(1000); lcd_gotoxy(0,0); sprintf(temp,"Data ADC5 = %d ",read_adc(5)); lcd_puts(temp); delay_ms(1000); lcd_gotoxy(0,0); sprintf(temp,"Data ADC6 = %d ",read_adc(6)); lcd_puts(temp); delay_ms(1000); lcd_gotoxy(0,0); sprintf(temp,"Data ADC7 = %d ",read_adc(7)); lcd_puts(temp); delay_ms(1000); }; } Program Pemilih Channel Data Analog #include <mega8535.h> #include <stdio.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x15 ;PORTC #endasm #include <lcd.h> #include <delay.h> #define ADC_VREF_TYPE 0x60 // Read the 8 most significant bits // of the AD conversion result unsigned char read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCH; }
  • 34. 34 // Declare your global variables here unsigned char temp[30]; int x; void main(void) { // Declare your local variables here // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P PORTB=0xFF; DDRB=0x00; // ADC initialization // ADC Clock frequency: 1000.000 kHz // ADC Voltage Reference: AVCC pin // ADC High Speed Mode: Off // ADC Auto Trigger Source: None // Only the 8 most significant bits of // the AD conversion result are used ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x83; SFIOR&=0xEF; // LCD module initialization lcd_init(16); while (1) { // Place your code here if(x==0) { lcd_gotoxy(0,0); sprintf(temp,"Data ADC0 = %d ",read_adc(0)); lcd_puts(temp); } if(x==1) { lcd_gotoxy(0,0); sprintf(temp,"Data ADC1 = %d ",read_adc(1)); lcd_puts(temp); } if(x==2) { lcd_gotoxy(0,0); sprintf(temp,"Data ADC2 = %d ",read_adc(2)); lcd_puts(temp); } if(x==3) { lcd_gotoxy(0,0); sprintf(temp,"Data ADC3 = %d ",read_adc(3)); lcd_puts(temp); } if(x==4)
  • 35. 35 { lcd_gotoxy(0,0); sprintf(temp,"Data ADC4 = %d ",read_adc(4)); lcd_puts(temp); } if(x==5) { lcd_gotoxy(0,0); sprintf(temp,"Data ADC5 = %d ",read_adc(5)); lcd_puts(temp); } if(x==6) { lcd_gotoxy(0,0); sprintf(temp,"Data ADC6 = %d ",read_adc(6)); lcd_puts(temp); } if(x==7) { lcd_gotoxy(0,0); sprintf(temp,"Data ADC7 = %d ",read_adc(7)); lcd_puts(temp); } if(PINB.0==0) x=0; if(PINB.1==0) x=1; if(PINB.2==0) x=2; if(PINB.3==0) x=3; if(PINB.4==0) x=4; if(PINB.5==0) x=5; if(PINB.6==0) x=6; if(PINB.7==0) x=7; }; }
  • 36. 36 BAB 11 APLIKASI PULSE WIDTH MODULATION (PWM) PWM (Pulse Width Modulation) merupakan metode untuk mengatur lebar pulsa suatu frekuensi. Salah satu fungsi metode ini, dapat digunakan untuk mengontrol kecepatan putaran motor dc. Dengan mengatur lebar pulsa, akan menghasilkan tegangan keluaran yang cukup linier sesuai besarnya duty cicle. Keluaran tegangan yang linier inilah yang digunakan untuk menyulut driver agar motor bisa berputar. Semangkin besar duty cicle yang diberikan maka semangkin besar juga tegangan keluarannya dan kecepatan motor akan semangkin cepat. Gambar 11.1 Aplikasi PWM dan Motor DC Gambar 11.2 CodeWizardAVR untuk PWM
  • 37. 37 Contoh Program Rangkaian Simulasi Analog dan PWM pada LCD Display #include <mega8535.h> #include <delay.h> #include <stdio.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x15 ;PORTC #endasm #include <lcd.h> // Declare your global variables here char temp[5]; void main(void) { // Declare your local variables here // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 3.906 kHz // Mode: Fast PWM top=FFh // OC0 output: Non-Inverted PWM TCCR0=0x6D; TCNT0=0x00; OCR0=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // LCD module initialization lcd_init(16); while (1) { // Place your code here OCR0=100; lcd_gotoxy(0,0); sprintf(temp,"Data PWM = %d ",OCR0); lcd_puts(temp); }; }
  • 38. 38 Gambar 11.3 CodeWizardAVR untuk PWM, ADC dan LCD Rangkaian Simulasi Analog dan PWM pada LCD Display Gambar 11.4 Aplikasi ADC to LCD Display Program PWM dengan Fast PWM 1 #include <mega8535.h> #include <stdio.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x15 ;PORTC #endasm
  • 39. 39 #include <lcd.h> #include <delay.h> #define ADC_VREF_TYPE 0x60 // Read the 8 most significant bits unsigned char read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCH; } // Declare your global variables here unsigned char temp[10]; void main(void) { // Port D initialization // Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x30; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 7.813 kHz // Mode: Fast PWM top=00FFh // OC1A output: Non-Inv. // OC1B output: Non-Inv. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0xA1; TCCR1B=0x0D; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80;
  • 40. 40 SFIOR=0x00; // ADC initialization // ADC Clock frequency: 62.500 kHz // ADC Voltage Reference: AVCC pin // ADC High Speed Mode: Off // ADC Auto Trigger Source: None // Only the 8 most significant bits of // the AD conversion result are used ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x87; SFIOR&=0xEF; // LCD module initialization lcd_init(16); while (1) { // Place your code here OCR1A = read_adc(0); //keluarkan data ADC ke PORTD.5 sebagai PWM lcd_gotoxy(0,0); sprintf(temp,"Nilai PWM = %d ", OCR1A); lcd_puts(temp); delay_ms(100); }; } Rangkaian Simulasi Analog dan PWM pada LCD Display Gambar 11.5 Aplikasi ADC to LCD Display Program PWM dengan Fast PWM 2 #include <mega8535.h> #include <stdio.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x15 ;PORTC #endasm
  • 41. 41 #include <lcd.h> #include <delay.h> #define ADC_VREF_TYPE 0x60 // Read the 8 most significant bits // of the AD conversion result unsigned char read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCH; } // Declare your global variables here unsigned char temp[30]; void main(void) { // Port D initialization // Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x30; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 7.813 kHz // Mode: Fast PWM top=00FFh // OC1A output: Non-Inv. // OC1B output: Non-Inv. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0xA1; TCCR1B=0x0D; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00;
  • 42. 42 // ADC initialization // ADC Clock frequency: 62.500 kHz // ADC Voltage Reference: AVCC pin // ADC High Speed Mode: Off // ADC Auto Trigger Source: None // Only the 8 most significant bits of // the AD conversion result are used ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x87; SFIOR&=0xEF; // LCD module initialization lcd_init(16); while (1) { // Place your code here OCR1A = read_adc(0); //keluarkan data ADC ke PORTD.5 sebagai PWM lcd_gotoxy(0,0); sprintf(temp,"PWM1 = %d ", OCR1A); //PWM 1 lcd_puts(temp); OCR1B = read_adc(1); lcd_gotoxy(0,1); sprintf(temp,"PWM2 = %d ", OCR1B); //PWM 2 lcd_puts(temp); delay_ms(1000); }; }
  • 43. 43 BAB 12 APLIKASI TIMER 12.1 Mode Normal Pada ATmega8535 terdapat 3 buah timer, yaitu Timer0 (8 bit), Timer1 (16 bit) dan Timer2 (8 bit). Untuk perbedaan dan cara kerja masing-masing timer, teman-teman dapat membacanya pada datasheet. Disini akan membahas Timer0 dan Timer1 saja. Sedangkan Timer2 memiliki perlakuan yang sama dengan Timer0. Perhitungan untuk Timer0 dan Timer1 adalah sebagai berikut: Ttimer0 = Tosc*(256-TCNT0)*N → (8 bit = 256) Ttimer1 = Tosc*(65536-TCNT1)*N → (16 bit = 65536) Tosc = 1/Fosc → pada aplikasi ini saya menggunakan kristal 12 MHz, sehingga: Tosc = 1/12Mhz = 0,0000000833 detik Dimana: Ttimer0 = lamanya periode Timer0 Ttimer1 = lamanya periode Timer1 TCNT0 = Register Timer0 TCNT1 = Register Timer1 N = Skala clock (mempunyai nilai 1, 8, 64, 256 dan 1024) Tosc = periode clock Fosc = frekuensi clock kristal Sekarang kita akan membuat aplikasi timer yang ditampilkan pada LCD. LCD menampilkan suatu nilai yang akan selalu bertambah setiap detik (menggunakan fitur timer), nilai awal yaitu 0 setelah 1 detik (menggunakan timer) kemudian nilai tersebut akan naik menjadi 1, kemudian 2 dan seterusnya, jika sudah sampai 100 maka akan diset kembali menjadi 0. Gambar 12.1 Rangkaian Simulasi Timer Menggunakan Timer1: Ttimer1 = Tosc*(65536-TCNT1)*N Pada aplikasi diatas diinginkan lamanya timer adalah 1 detik (Ttimer1 = 1 detik) dan jika saya menggunakan kristal 12 MHz dan menggunakan skala clock N = 1024, maka didapat: 1 = 0,0000000833*(65536-TCNT1)*1024 TCNT1= 53817.25  53818 TCNT1= 53818 = D23A (dalam hexa)
  • 44. 44 Dari perhitungan diatas didapat nilai 53818 atau dalam hexa D23A, nilai tersebut harus diisikan pada register TCNT1 agar Timer 1 bernilai 1 detik. Berikut adalah gambar untuk mensetting pada CodeVision CodeWizard AVR: Gambar 12.2 Configurasi CodeWizardAVR Timer1 Pada settingan diatas digunanakan nilai clock value yaitu 11.719 kHz, nilai tersebut didapat dari Fosc/N atau 12 Mhz/1024. Berikut adalah listing program lengkapnya: #include <mega8535.h> #include <stdlib.h> #asm .equ __lcd_port=0×15 ;PORTC #endasm #include <lcd.h> unsigned char temp[6]; int data; // Timer 1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) { TCNT1H=0xD23A >> 8; TCNT1L=0xD23A & 0xff; data++; //setelah 1 detik increament data } void main(void) { // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 11.719 kHz // Mode: Normal top=FFFFh
  • 45. 45 // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: On // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0×00; TCCR1B=0×05; TCNT1H=0xD2; TCNT1L=0x3A; ICR1H=0×00; ICR1L=0×00; OCR1AH=0×00; OCR1AL=0×00; OCR1BH=0×00; OCR1BL=0×00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0×04; // LCD module initialization lcd_init(16); // Global enable interrupts #asm(“sei”) while (1) { if (data==100) { lcd_clear(); data=0; } lcd_gotoxy(0,0); lcd_putsf(“Timer :”); itoa(data,temp); //menampilkan di LCD lcd_gotoxy(0,1); lcd_puts(temp); }; } Menggunakan Timer0 : Ttimer0 = Tosc*(256-TCNT0)*N Dengan menggunakan Timer0, untuk aplikasi yang sama seperti diatas, sebenarnya timer0 ini tidak dapat menghasilkan periode timer selama 1 detik dikarenakan keterbatasan jumlah bit yaitu hanya 8 bit (256) saja. Tetapi kita masih dapat memanupulasi program agar dapat menghasilkan timer selama 1 detik, caranya dengan membuat timer selama 10 ms kemudian dilakukan pengulangan sebanyak 100 kali, maka akan dihasilkan timer selama 1 detik. 10 ms * 100= 1 detik Pada aplikasi ini diinginkan lamanya timer adalah 10 ms (Ttimer0 = 10 ms = 0.01 s) dan jika saya menggunakan kristal 12 MHz dan menggunakan skala clock/prescaler N = 1024, maka didapat: 0.01 = 0,0000000833*(256-TCNT0)*1024 TCNT0= 138 = 8A (dalam hexa)
  • 46. 46 Dari perhitungan diatas didapat nilai 138 atau dalam hexa 8A, nilai tersebut harus diisikan pada register TCNT0 agar Timer 0 bernilai 10 mili detik. Berikut adalah gambar untuk mensetting pada CodeVision CodeWizard AVR: Gambar 12.3 Configurasi CodeWizardAVR Timer0 Pada settingan diatas digunanakan nilai clock value yaitu 11.719 kHz, nilai tersebut didapat dari Fosc/N atau 12 Mhz/1024. Berikut adalah listing program lengkapnya: #include <mega16.h> #include <stdlib.h> #asm .equ __lcd_port=0×15 ;PORTC #endasm #include <lcd.h> unsigned char temp[6], loop=0; int data; // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Reinitialize Timer 0 value TCNT0=0x8A; loop++; if (loop>=100) { data++; loop=0; } } void main(void) { // Timer/Counter 0 initialization
  • 47. 47 // Clock source: System Clock // Clock value: 11.719 kHz // Mode: Normal top=FFh // OC0 output: Disconnected TCCR0=0×05; TCNT0=0x8A; OCR0=0×00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0×01; // LCD module initialization lcd_init(16); // Global enable interrupts #asm(“sei”) while (1) { if (data==100) { lcd_clear(); data=0; } lcd_gotoxy(0,0); lcd_putsf(“ElectrO-cOntrOl”); itoa(data,temp); //menampilkan di LCD lcd_gotoxy(0,1); lcd_puts(temp); }; }
  • 48. 48 12.2 Mode CTC Pada mode CTC tidak jauh berbeda dengan mode Normal, perbedaan hanya terletak pada cara menghitung, tepatnya mulai dan akhir perhitungan pada register TCNT0. Perhitungan untuk Timer0 dan Timer1 adalah sebagai berikut: Ttimer0 = Tosc*(1+OCR0)*N → (8 bit = 256) Ttimer1 = Tosc*(1+OCR1A)*N → (16 bit = 65536) Tosc = 1/Fosc → pada aplikasi ini saya menggunakan kristal 12 MHz, sehingga: Tosc = 1/12Mhz = 0,0000000833 detik Dimana: Ttimer0 = lamanya periode Timer0 Ttimer1 = lamanya periode Timer1 OCR0 = Register Timer0 ( 0 – 255 ) OCR1A = Register Timer1 ( 0 – 65535 ) N = Skala clock (mempunyai nilai 1, 8, 64, 256 dan 1024) Tosc = periode clock Fosc = frekuensi clock kristal Sekarang kita akan membuat aplikasi timer yang ditampilkan pada LCD. LCD menampilkan suatu nilai yang akan selalu bertambah setiap detik (menggunakan fitur timer), nilai awal yaitu 0 setelah 1 detik (menggunakan timer) kemudian nilai tersebut akan naik menjadi 1, kemudian 2 dan seterusnya, jika sudah sampai 100 maka akan diset kembali menjadi 0. Menggunakan Timer1: Ttimer1 = Tosc*(1+OCR1A)*N Pada aplikasi diatas diinginkan lamanya timer adalah 1 detik (Ttimer1 = 1 detik) dan jika saya menggunakan kristal 12 MHz dan menggunakan skala clock N = 1024, maka didapat: 1 = 0,0000000833*(1+OCR1A)*1024 1+OCR1A = 11718.75  11719 OCR1A = 11718 = 2DC6 (dalam hexa) Dari perhitungan diatas didapat nilai 53818 atau dalam hexa D23A, nilai tersebut harus diisikan pada register TCNT1 agar Timer 1 bernilai 1 detik. Berikut adalah gambar untuk mensetting pada CodeVision CodeWizard AVR: Gambar 12.4 Configurasi CodeWizardAVR Timer1
  • 49. 49 Pada settingan diatas digunanakan nilai clock value yaitu 11.719 kHz, nilai tersebut didapat dari Fosc/N atau 12 Mhz/1024. Berikut adalah listing program lengkapnya: #include <mega8535.h> #include <stdlib.h> #asm .equ __lcd_port=0×15 ;PORTC #endasm #include <lcd.h> unsigned char temp[6]; int data; // Timer 1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) { TCNT1H=0xD23A >> 8; TCNT1L=0xD23A & 0xff; data++; //setelah 1 detik increament data } void main(void) { // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 11.719 kHz // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: On // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0×00; TCCR1B=0×05; TCNT1H=0xD2; TCNT1L=0x3A; ICR1H=0×00; ICR1L=0×00; OCR1AH=0×00; OCR1AL=0×00; OCR1BH=0×00; OCR1BL=0×00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0×04; // LCD module initialization lcd_init(16); // Global enable interrupts #asm(“sei”) while (1) {
  • 50. 50 if (data==100) { lcd_clear(); data=0; } lcd_gotoxy(0,0); lcd_putsf(“Timer :”); itoa(data,temp); //menampilkan di LCD lcd_gotoxy(0,1); lcd_puts(temp); }; } Menggunakan Timer0 : Ttimer0 = Tosc*(256-TCNT0)*N Dengan menggunakan Timer0, untuk aplikasi yang sama seperti diatas, sebenarnya timer0 ini tidak dapat menghasilkan periode timer selama 1 detik dikarenakan keterbatasan jumlah bit yaitu hanya 8 bit (256) saja. Tetapi kita masih dapat memanupulasi program agar dapat menghasilkan timer selama 1 detik, caranya dengan membuat timer selama 10 ms kemudian dilakukan pengulangan sebanyak 100 kali, maka akan dihasilkan timer selama 1 detik. 10 ms * 100= 1 detik Pada aplikasi ini diinginkan lamanya timer adalah 10 ms (Ttimer0 = 10 ms = 0.01 s) dan jika saya menggunakan kristal 12 MHz dan menggunakan skala clock/prescaler N = 1024, maka didapat: 0.01 = 0,0000000833*(256-TCNT0)*1024 TCNT0= 138 = 8A (dalam hexa) Dari perhitungan diatas didapat nilai 138 atau dalam hexa 8A, nilai tersebut harus diisikan pada register TCNT0 agar Timer 0 bernilai 10 mili detik. Berikut adalah gambar untuk mensetting pada CodeVision CodeWizard AVR: Gambar 12.5 Configurasi CodeWizardAVR Timer0
  • 51. 51 Pada settingan diatas digunanakan nilai clock value yaitu 11.719 kHz, nilai tersebut didapat dari Fosc/N atau 12 Mhz/1024. Berikut adalah listing program lengkapnya: #include <mega16.h> #include <stdlib.h> #asm .equ __lcd_port=0×15 ;PORTC #endasm #include <lcd.h> unsigned char temp[6], loop=0; int data; // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Reinitialize Timer 0 value TCNT0=0x8A; loop++; if (loop>=100) { data++; loop=0; } } void main(void) { // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 11.719 kHz // Mode: Normal top=FFh // OC0 output: Disconnected TCCR0=0×05; TCNT0=0x8A; OCR0=0×00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0×01; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0×80; SFIOR=0×00; // LCD module initialization lcd_init(16); // Global enable interrupts #asm(“sei”) while (1) { if (data==100) { lcd_clear();
  • 53. 53 BAB 13 APLIKASI COUNTER 13.1 Menggunakan Timer Counter0 Untuk aplikasi counter lebih mudah dibandingkan dengan timer, karena kita tidak harus lagi menghitung untuk mendapatkan nilai dari register TCNT, tetapi secara otomatis register TCNT yang akan mencacah jika ada input yang masuk. Berikut adalah contoh aplikasi counter untuk menghitung menggunakan T0 dan ditampilkan pada LCD, input yang digunakan berasal dari pushbutton. Gambar 13.1 Rangkaian Simulasi Counter Input untuk counter0 berasal dari pin T0 atau PB0 akan disimpan pada register TCNT0 kemudian ditampilkan ke LCD. Counter0 hanya mampu mencacah sampai dengan nilai 256 dikarenakan counter 8 bit. Berikut adalah setting pada CodeVision CodeWizard AVR: Gambar 13.2 Configurasi CodeWizardAVR Timer0
  • 54. 54 Berikut adalah listing program lengkap: #include <mega8535.h> #include <stdlib.h> #asm .equ __lcd_port=0×15 ;PORTC #endasm #include <lcd.h> unsigned char temp[6]; int data; void main(void) { // Timer/Counter 0 initialization // Clock source: T0 pin Falling Edge // Mode: Normal top=FFh // OC0 output: Disconnected TCCR0=0×06; TCNT0=0×00; OCR0=0×00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0×80; SFIOR=0×00; // LCD module initialization lcd_init(16); while (1) { data=TCNT0;//hasil counter (TCNT0) dipindah ke data if (data>=256) { lcd_clear(); } lcd_gotoxy(0,0); lcd_putsf(“*Electro – PCR*”); itoa(data,temp); //menampilkan di LCD lcd_gotoxy(0,1); lcd_puts(temp); }; }
  • 55. 55 13.2 Menggunakan Interups Interupsi merupakan suatu perintah untuk menghentian proses normal sementara waktu lalu melakukan proses tertentu, setelah proses tertentu tersebut selesai maka proses normal akan berjalan kembali. Interups0 Berikut adalah contoh aplikasi counter sebagai proses normal. Proses normal melakukan perhitungan mundur dari 1000. Sedangkan proses interupsi adalah melakukan perhitungan naik mulai dari 0. Input yang menggunakan tombol pushbutton akan di cek oleh INT0. Jika terdapat sinyal pada INT0 maka kemudian proses normal terhenti lalu proses interupsi dilakukan, setelah proses interupsi selesai, maka proses normal akan berjalan kembali melanjutkan proses sebelumnya. Gambar 13.3 Rangkaian Simulasi Interupsi Berikut adalah setting pada CodeVision CodeWizard AVR: Gambar 13.4 Configurasi CodeWizardAVR INT0
  • 56. 56 Berikut adalah listing program lengkap: #include <mega8535.h> #include <delay.h> #include <stdio.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x15 ;PORTC #endasm #include <lcd.h> int i=1000,x=0; char buffer[33]; // External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) { // Place your code here x++; lcd_gotoxy(0,0); sprintf(buffer,"counter = %d ", x); lcd_puts(buffer); delay_ms(2000); } void main(void) { // External Interrupt(s) initialization // INT0: On // INT0 Mode: Falling Edge // INT1: Off // INT2: Off GICR|=0x40; MCUCR=0x02; MCUCSR=0x00; GIFR=0x40; lcd_init(16); #asm("sei") while (1) { // Place your code here i--; lcd_gotoxy(0,0); sprintf(buffer,"Hitung = %4d", i); lcd_puts(buffer); if(i==0) i=1000; delay_ms(300); }; }
  • 57. 57 BAB 14 KOMUNIKASI SERIAL RS-232 I. Tujuan:  Mahasiswa mengerti cara melakukan komunikasi serial dengan mikrokontroller AVR untuk mengendalikan sesuatu peralatan  Mahasiswa mengerti cara membuat program C pada mikrokontroller AVR untuk melakukan komunikasi serial II. Peralatan yang digunakan:  modul AVR  Modul LED dan switch  Kabel serial RS232 (cross) III. Dasar Teori: Komunikasi serial merupakan komunikasi data dengan pengiriman data secara satu per satu dengan menggunakan satu jalur kabel data. Sehingga komunikasi serial hanya menggunakan 2 kabel data yaitu kabel data untuk pengiriman yang disebut transmit (Tx) dan kabel data untuk penerimaan yang disebut receive (Rx). Kelebihan dari komunikasi serial adalah jarak pengiriman dan penerimaan dapat dilakukan dalam jarak yang cukup jauh dibandingan dengan komunikasi parallel tetapi kekurangannya adalah kecepatan lebih lambat daripada komunikasi parallel, untuk saat ini sedang dikembangkan teknologi serial baru yang dinamakan USB (Universal Serial Bus) yang memiliki kecepatan pengiriman dan penerimaan data lebih cepat disbanding serial biasa. Beberapa contoh : komunikasi Serial RS-232 dan RS-485. Mode serial port : 1. Pada mode 0, Pin TX mengeluarkan shift clock, dan pin RX dapat menerima maupun mengirim data, dengan format 8 bit data dimulai dengan LSB dulu yang dikirim. Jadi pada saat dikirim data melalui RX maka sekalian pin TX mengirimkan signal clock secara berbarengan. Baud ratenya fix yaitu 1/12 frekuensi osilatornya. 2. Pada mode 1, Pin TX berfungsi untuk mengirim data dan RX berfungsi untuk menerima data, data yang dikirim formatnya 8 bit data dengan LSB dikirim dahulu,serta 1 start bit( berlogika 0 ) dan 1 stop bit( berlogika 1 ). Baud ratenya variabel tergantung dari nilai yang ada pada register timer 1 maupun timer 2. 3. Pada mode 2, Pin TX berfungsi untuk mengirim data dan RX untuk menerima data, format datanya sama dengan mode 1 hanya saja terdapat parity bitnya sehingga total bit yang terkirim sebanyak 11 bit. Bit paritynya dapat diset melalui TB8( lihat pada SCON ). Baud ratenya hanya ada 2 pilihan yaitu 1/32 atau 1/64 dari frekuensi osilatornya. 4. Pada mode 3 identik dengan mode 2, hanya saja Baud ratenya variabel tergantung nilai yang terdapat pada register dari timer 1 dan timer 2. SM0: Serial Port Mode bit 0, bit Pengatur Mode Serial SM1: Serial Port Mode bit 1, bit Pengatur Mode Serial SM2: Serial Port Mode bit 2, bit untuk mengaktifkan komunikasi multiprosesor pada kondisi set.
  • 58. 58 REN: Receive Enable, bit untuk mengaktifkan penerimaan data dari Port Serial pada kondisi set. Bit ini di set dan clear oleh perangkat lunak. TB8: Transmit bit 8, bit ke 9 yang akan dikirimkan pada mode 2 atau 3. Bit ini diset dan clear oleh perangkat lunak RB8: Receive bit 8, bit ke 9 yang diterima pada mode 2 atau 3. Pada Mode 1 bit ini berfungsi sebagai stop bit. TI: Transmit Interrupt Flag, bit yang akan set pada akhir pengiriman karakter. Bit ini diset oleh perangkat keras dan di clear oleh perangkat lunak RI: Receive Interrupt Flag, bit yang akan set pada akhir penerimaan karakter. Bit ini diset oleh perangkat keras dan di clear oleh perangkat lunak Dalam coding serial dalam AVR, terdapat 2 konsep yaitu secara polling maupun secara interrupt. Seperti yang sudah dijelaskan diatas mengenai TI dan RI, maka dalam menerima data RI akan terset secara hardware sedangkan TI diset pada saat data hampir selesai dikirim, dan dalam hal transmisi data sangat perlu untu“CEK" kondisi TI. Bila TI sudah berlogika 1 berarti data yang ditaruh dalam SBUF sudah selesai dikirim dan harus diclear secara software( secara program ), sebab bila tidak dicek apakah TI sudah „1‟ atau belum maka mungkin saja terjadi SBUF sudah direload dengan data baru sedangkan data yang lama belum selesai dikirim sehingga terjadi apa yang disebut dengan data corruption. Maka sebelum mengirim byte data yang selanjutnya sangatlah perlu untuk mengecek TI dulu. Bila coding serial dengan konsep polling maka codenya harus terus menerus mengecek flag TI dan RI, apakah berlogika „1‟, bila berlogika „1‟ maka langsung lompat ke procedure yang bersangkutan, dengan jangan lupa secepatnya mengclear flag TI atau RI, agar tidak lompat ke int. veltor dari serial. Keuntungan konsep polling adalah codenya yang simple, tetapi menghabiskan cpu time sebab selalu mengecek flag TI dan RI terus menerus tanpa dapat melakukan tugas yang lain, sebab bila melakukan yang lain maka pada saat salah satu flag tersebut menjadi satu maka akan langsung lompat ke int. vektor serial sehingga program akan menjadi kacau. Bila coding serial dengan konsep interrupt, maka program serialnya hanya ada pada subroutine dari int. serial saja, dimana hanya mengecek oleh flag mana interrupt serial terpanggil? Oleh TI atau RI? Bila oleh TI maka taruh datanya ke SBUF TI utk dikirim, dan bila karena RI maka selamatkan datanya ke suatu variabel dari SBUF RI. Keuntungannya code kita dapat melakukan tugas yang lainnya, kerugiannya adalah code yang cukup kompleks. IV. Langkah Kerja
  • 59. 59 Gambar2.1. Setting komunikasi Serial Gambar2.2. Setting komunikasi Serial Gambar2.3. Sistem Komunikasi serial PC dengan AVR Min. Sys. Gambar2.4. Kabel komunikasi Serial Null Modem (cross) Gambar2.5. Menu Setting -> terminal Modul AVR min Sys PC with serial port (COM) COM 1 DB-9 female 1 2 3 4 5 4 1 2 3 4 5 4 female male PC side AVR Min. Sys. side
  • 60. 60 Gambar2.6. Menu Tools -> terminal Gambar2.7. Menjalankan window terminal di Code Vision AVR untuk mengamati hasil program yang mengakses komunikasi serial
  • 61. 61 Gambar2.8. Terminal program bisa juga memakai program Hyperterminal bawaan MS Windows. Bisa di akses di Start-> All programs -> Acessories -> Communications -> Hyperterminal V. Program Melakukan pengiriman 1 buah karakter terus menerus #include <mega16.h> #include <stdio.h> void main(void) { // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud rate: 9600 UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x47; while (1) { putchar(‘a’); } } Bandingkan hasilnya dengan program yang ada di bawah ini: #include <mega16.h> #include <stdio.h> void main(void) { // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud rate: 9600 UCSRA=0x00; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x47; while (1) { putchar(‘a’); putchar(0x0d); putchar(0x0a); } }
  • 62. 62 VI. Analisa Pada percobaan ini pertama – tama dilakukan setting terhadap chip menggunakan Atmega8535L pada clock 4Mhz lalu mnestting LACd pada portB,setting ADC 8 bit dengan interrupt , setting komunikasi serial (USART). Pada setting USART yang digunakan hanya transmitter (TX) saja karena hanya mengirimkan data ke PC atau dengan kata lain tidak menrima masukan dari PC. Setelah itu nilai ADC dibaca dan datanya dikirim melalui serial dengan perintah sprinf untuk kalimat dan putchar unutk sebuah karakter seperti “L”,”D”,R” atau apbila ingin lebih dari satu karakter dapat dikirim dengan sprin(LDR);.
  • 63. 63 RTC Apa itu RTC ? (http://pccontrol.wordpress.com/2011/06/27/pengetahuan-dasar-pemrograman- rtc-ds1307-dengan-bahasa-c-codevision-untuk-avr/) RTC yang dimaksud disini adalah real time clock (bukan real time computing), biasanya berupa IC yg mempunyai clock sumber sendiri dan internal batery untuk menyimpan data waktu dan tanggal. Sehingga jika system komputer / microcontroller mati waktu dan tanggal didalam memori RTC tetap uptodate. Salah satu RTC yang sudah populer dan mudah penggunaanya adalah DS1307, apalagi pada Codevision sudah tersedia fungsi-fungsi untuk mengambil data waktu dan tanggal untuk RTCDS1307 ini. Fitur-fitur DS1307:  Real-time clock (RTC) menghitung detik, menit, jam,tanggal,bulan dan hari dan tahun valid sampai tahun 2100  Ram 56-byte, nonvolatile untuk menyimpan data.  2 jalur serial interface (I2C).  output gelombang kotak yg diprogram.  Automatic power-fail detect and switch  Konsumsi arus hanya 500nA pada batery internal.  mode dg oscillator running.  temperature range: -40°C sampai +85°C
  • 64. 64 Untuk membaca data tangal dan waktu yg tersimpan di memori RTC Ds1307 dapat dilakukan melalui komunikasi serial I2C spt tampak pada gambar berikut: Cara pembacaan DS1307 beropersai sebagai slave pada bus I2C. Cara Access pertama mengirim sinyal START diikuti device address dan alamat sebuah register yg akan dibaca. Beberapa register dapat dibaca sampai STOP condition dikirim. Data waktu dan tanggal tersimpan dalam memori masing masing 1 byte , mulai dari alamat 00H sampai 07H. Sisanya (08H ~ 3FHalamat RAM yg bisa digunakan).
  • 65. 65 Pemrograman RTC DS1307 dengan Codevision. Codevision sudah menyediakan fungsi-fungsi khusus untuk mengakses data DS1307 jadi kita tinggal menggunakanya. Apalagi dengan fasilitas codewizard pemrograman RTC menjadi mudah. setelah kita klik ok maka akan tersedia template Code program sbb: #include <mega16.h> // I2C Bus functions #asm .equ __i2c_port=0×18 ;PORTB .equ __sda_bit=0 .equ __scl_bit=1 #endasm #include <i2c.h> // DS1307 Real Time Clock functions #include <ds1307.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0×15 ;PORTC #endasm #include <lcd.h>
  • 66. 66 char tampungLCD[16]; void main(void) { unsigned char hour,minute,second; / I2C Bus initialization i2c_init(); // DS1307 Real Time Clock initialization // Square wave output on pin SQW/OUT: Off // SQW/OUT pin state: 0 rtc_init(0,0,0); // LCD module initialization lcd_init(16); /* initialize the DS1307 RTC */ rtc_init(0,0,0); //tambahankan baris ini //this function sets the current time of the RTC. rtc_set_time(6,0,0); // jam 6:00:00 while (1) { /* read time from the DS1307 RTC */ rtc_get_time(&hour,&minute,&second); //tampilkan di LCD 2×16 lcd_gotoxy(0,0); sprintf(tampungLCD,”Time: %d:%d:%d “,hour,minute,second); lcd_puts(tampungLCD); } }