1. Pendahuluan
Pada praktikum ini akan mempelajari cara mengembangkan sebuah system menggunakan
mikrokontroler AVR buatan Atmel menggunakan software CodeVisionAVR. CodeVisionAVR
merupakan software C-cross compiler, dimana program dapat ditulis menggunakan bahasa-C.
Dengan menggunakan pemrograman bahasa-C diharapkan waktu disain (deleloping time) akan
menjadi lebih singkat. Setelah program dalam bahasa-C ditulis dan dilakukan kompilasi tidak
terdapat kesalahan (error) maka proses download dapat dilakukan. Pada percobaan ini anda akan
mengendalikan LED dengan menggunakan Saklar Push Button.
2. Tujuan
Setelah menyelesaikan praktikum ini, yang anda peroleh adalah :
1. Dapat menjelaskan arsitektur umum dan keistimewaan dari mikrokontroler AVR
ATmega16.
2. Dapat menceritakan kembali alur pengembangan software pada mikrokontroler AVR
menggunakan CodeVisionAVR.
3. Dapat menggunakan fungsi input/ output pada mikrokontroler AVR
4. Dapat mengerjakan tugas yang diberikan dengan bahasa-C.
3. Dasar Teori
ATmega 16 pada dasarnya memiliki 4 port yaitu: PortA, PortB, PortC, dan PortD. Port ini
merupakan jalur bi-directional dengan pilihan internal pull-up. Ada 3 buah register bit pada setiap
port, yaitu DDxn, PORTxn, dan PINxn. Dimana x merupakan huruf yang merupakan bagian
dari port tersebut sedangkan n sebagai nomer bit. Di setiap Bit terdapat pada address, seperti
pada DDxn addressnya DDRx, pada PORTxn addressnya PORTx, pada PINxn addressnya PINx.
DDxn di daftarkan sebagai DDRx (Data Directional Register) untuk menentukan arah pin.
Sebagai contoh DDRC di set 1 maka Pc merupakan output, jika PORTC di set 1 merupakan
input, sehingga resistor pull-up akan di aktifkan. Cara untuk mematikan resistor pull-up adalah
dengan setting PORTC di set 0 atau pin di atur sebagai output. Jika PORTC di set 1 pada pin
yang merupakan output maka pin port menangkap logika 1. Jika PORTC di set 0 pada pin yang
merupakan pin output maka pin port berlogika 0.
Fungsi delay adalah menunda eksekusi program, dengan kisaran waktu tertentu. Sebelum
menggunakan delay kita harus meng-includekan delay terlebih dahulu. Fungsi delay dalam
beberapa keadaan misalnya: Void delay_us(unsigned int c), artinya menghasilkan delay selama c
-detik. Void delay_ms(unsigned int c) artinya menghasilkan delay selama c m-detik.
void main(void)
{
PORTC=0x0F;
DDRC=0xFF;
}
Penjelasan Program:
#include <mega16.h> => Yang merupakan bagian dari header yang berfungsi memasukan
library mega16.
void main(void) => Merupakan sebuah fungsi yang tidak bertife data.
{
DDRC=0xFF; => Artinya PORTC sebagai output.
PORTC=0x0F; => Di PORTC setting sebagai output dengan PORTC=0x0F artinya output
berlogika (00001111), sehingga hanya 4 lampu yang menyala.
}
Flow Chart:
Mulai
DDRC=0xFF;
PORTC=0x0F;
PORTC
Selesai
Simulasi Proteus:
Penjelasan Program:
#include <mega16.h> => Yang merupakan bagian dari header yang berfungsi memasukan
library mega16.
void main(void) => Merupakan sebuah fungsi yang tidak bertife data.
{
DDRC=0xFF; => Artinya PORTC sebagai output.
DDRB=0x00; => Artinya PORTB sebagai input
PORTB=0xFF; => Di PORTB setting sebagai Input dengan PORTB=0xFF artinya output
berlogika (11111111).
while (1) => Sebuah fungsi yang menjalankan/berkerja sebagai pengunci dan perulangan.
{
Flow Chart:
Mulai
DDRC=0xFF;PORTB=0xF
F;
PINB.0==0
PINB.1==0
PINB.2==0
PINB.3==0
If
PORTC=0x01;
PORTC=0x02;
PORTC=0x04;
Else
PORTC=0x00;
PORTC
Selesai
Simulasi Proteus:
Ketika Push Buton 0 di tekan
Penjelasan Program:
#include <mega16.h> => Yang merupakan bagian dari header yang berfungsi memasukan
library mega16.
#include <delay.h> => Yang merupakan bagian dari hedaer yang befungsi memasukan
library delay.
unsigned char p1[4] = {0b10000001, 0b01000010, 0b00011000 }; => Merupakan tife data
dengan ukuran 0 225 dengan memberika variabel p1 sebanyak 4 keadaan.
unsigned char p2[4] = {0b11111111, 0b01111110, 0b00011000 }; => Memberikan variabel
p1 sebanyak 4 keadaan.
void main(void) => Merupakan sebuah fungsi yang tidak bertife data.
{
unsigned char i; => Program untuk mengeluarkan data dari 0-225 dengan pendeklarasian
konstanta variabel i.
DDRB=0x00; => Mengatur PORTB sebagai input.
PORTC=0x00; => PORTC berlogika (00000000)
DDRC=0xFF; => PORTC sebagai output.
PORTB.0 = 1; => Jika Push Button 0 di tekan maka keadaan awal 1.
PORTB.1 = 1; => Jika Push Button 1 di tekan maka keadaan awal 1.
while (1) => Sebuah fungsi yang menjalankan/berkerja sebagai pengunci dan perulangan.
{
if(PINB.0==0)
=>
if
merupakan
sebuah
perintah
untuk
melakukan
operasi
dengan deklarasi i.
delay_ms(300); => delay berfungsi menunda eksekusi program selama 300ms.
}
PORTC=0; => PORTC dengan kondisi 0
}
if(PINB.1==0) => Perintah jika Push Button 1 di tekan maka keadaan awalnya 0.
{
for(i=0;i,3;i++) => => for di gunakan untuk melakukan perulangan dengan statement
(nama_variabel=nilai awal;syarat_loop;nama_variabel++).
{
PORTC=p2[i]; => Statement yang di ulang dimana PORTC berlogika sesuai keadaan p2
dengan deklarasi i.
delay_ms(300); => delay berfungsi menunda eksekusi program selama 300ms.
}
PORTC=0; => Output menyala (kondisi 0).
}}
Flow Chart:
Mulai
Unsigned char
[p1];
[p2];
Unsigned char i;
DDRB=0x00;
if(PINB.0==0)
for(i=0;i<3;i+
+)
PORTC=p1[i];
if(PINB.1==0)
for(i=0;i<3;i+
+)
PORTC=p2[i];
PORTC
selesai
Simulasi Proteus:
Ketika PB0 di tekan.
Ketika PB 1 ditekan
5. Kesimpulan
Jadi dari hasil percobaan SW PUSH BUTTON Praktikum 2, di sini sudah sesuai dengan
teori pada modul praktikum. Seperti pada percobaan 1 4 LED menyala, percobaan 2 LED mati
sesuai perintah ketika di tekan PB0, PB1, PB2, PB3 sudah sesuai, percobaan 3 LED mati sesuai
perintah ketika di tekan PB0 dan PB1 sudah sesuai.