Anda di halaman 1dari 11

PRAKTIKUM 2

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.

Penjelasan Rangkaian diatas:


a. Dalam Microcontroller ATMEGA16 Trainer Kit, semua katoda pada LED diatas terhubung
dengan PORTC ATMEGA16.
b. Dalam Microcontroller ATMEGA 16 Trainer kit, kaki push button kiri terhubung dengan
PORTB ATMEGA 16.
c. 8 LED diatas mendapat Vcc pada bagian Anodenya. Sehingga untuk menyalakan LED
tersebut, katoda harus mendapat logika 0 dari PORTC ATMEGA16. Ketika katoda
mendapat logika 1, maka LED tidak akan menyala. 8 kaki Push Button kanan di atas
mendapat Vcc.

4. Hasil dan Analisis


A. Percobaan 1 ( PORTB sebagai input PORTC sebagai output )
Coding Program:
#include <mega16.h>

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:

B. Percobaan 2 (Percobaan Input/Output dengan fungsi BIT)


Coding Program:
#include <mega16.h>
void main(void)
{
PORTB=0xFF;
DDRB=0x00;
DDRC=0xFF;
while (1)
{
if (PINB.0==0) {PORTC=0x01;}
else if (PINB.1==0) {PORTC=0x02;}
else if (PINB.2==0) {PORTC=0x04;}
else if (PINB.3==0) {PORTC=0x08;}
else {PORTC=0x00;}
}}

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

if (PINB.0==0) {PORTC=0x01;} => if merukan perintah untuk melakukan operasi


percabangan. Jika Push Button 0 di tekan maka PORTC berlogika (00000001).
else if (PINB.1==0) {PORTC=0x02;} => if else sama dengan if yaitu melakukan operasi
percabangan. Jika Push Button 1 di tekan maka PORTC berlogika (00000010).
else if (PINB.2==0) {PORTC=0x04;}=> Jika Push Button 1 di tekan maka PORTC
berlogika (00000100).
else if (PINB.3==0) {PORTC=0x08;} => Jika Push Button 1 di tekan maka PORTC
berlogika (00001000).
else {PORTC=0x00;}=> else artinya tidak, jika Push Button tidak di tekan atau keadaan
awal adalah 0 (lampu menyala semua).
}}

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

Ketika Push Buton 1 di tekan

Ketika push button 2 di tekan

Ketika push button 3 di tekan

C. Percobaan 3 (Dengan pemilihan kombinasi LED)


Coding Program:
#include <mega16.h>
#include <delay.h>
unsigned char p1[4] = {0b10000001, 0b01000010, 0b00011000 };
unsigned char p2[4] = {0b11111111, 0b01111110, 0b00011000 };
void main(void)
{
unsigned char i;
DDRB=0x00;
PORTC=0x00;
DDRC=0xFF;
PORTB.0 = 1;
PORTB.1 = 1;
while (1)
{
if(PINB.0==0)
{
for(i=0;i<3;i++)
{
PORTC=p1[i];
delay_ms(300);
}
PORTC=0;
}
if(PINB.1==0)
{
for(i=0;i<3;i++)
{
PORTC=p2[i];
delay_ms(300);
}
PORTC=0;
}}

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

percabangandengan perintah jika PINB.0 di tekan maka keadaan awal 0.


{
for(i=0;i,3;i++) => for di gunakan untuk melakukan perulangan dengan statement
(nama_variabel=nilai awal;syarat_loop;nama_variabel++).
{
PORTC=p1[i]; => Statement yang di ulang dimana PORTC berlogika sesuai keadaan p1

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.

Anda mungkin juga menyukai