Anda di halaman 1dari 13

LAPORAN PRAKTIKUM

MIKROKONTROLER DAN PLC


PARALEL INPUT OUTPUT (PIO)

DISUSUN OLEH :

NAMA : ENRICO W. F
NIM : 021500430
PRODI : ELEKTRONIKA INSTRUMENTASI
JURUSAN : TEKNOFISIKA NUKLIR

SEKOLAH TINGGI TEKNOLOGI NUKLIR


BADAN TENAGA NUKLIR NASIONAL
YOGYAKARTA
2017
PARALEL INPUT OUTPUT

I. TUJUAN
1. Praktikan mampu memahami Input output mikrokontroler AVR AT Mega
2. Praktikan mampu memahami Input output AVR AT Mega
3. Praktikan mampu membuata program dalam bahasa C untuk input output Port
mikrokontroler dan penerapannya.

II. DASAR TEORI


Atmel AT Mega8535/16/32 dilengkapi dengan empat buah 8-bit input output (I/O) digital
multiguna yaitu PORTA, PORTB, PORTC, dan PORTD. Semua port ini juga memiliki
fungsi alternatif yang akan dijelaskan kemudian. Pada bab ini akan dibahas mengenai
fungsi dasar port I/O digital. Selanjutnya pada subbab berikut akan dibahas mengenai
penggunaan port I/O dalam aplikasi led, seven segmen, keypad, dan LCD.

Register Port
Setiap port dalam AT Mega8535 memiliki tiga buah register yang berkaitan
yaitu
1. Data Register (PORTx), digunakan untuk menulis data keluaran port.
2. Data Direction Register (DDRx), digunakan untuk menentukan pin port spesifik
sebagai output (bernilai 1) atau sebagai input (bernilai 0).
3. Input Pin Address (PINx) digunakan untuk membaca data input dari port.
Gambar 5.1 merupakan gambaran register-register yang dimiliki setiap port.

Gambar 1. Register-register port

Port mikrokontroler AVR dapat dikonfigurasi sebagai input atau output, dengan cara
mengubah isi I/O register DDRx. Bit-bit pada DDRx menentukan arah pin. Setiap pin
pada AVR juga memiliki internal pull-up, untuk mengaktifkannya dilakukan dengan
memberikan nilai 0xFF pada register PORTx.

Untuk membaca data pada salah satu port, dapat digunakan fungsi PINx, sedangkan
membaca data per pin pada suatu port maka ditentukan bit pin-nya yaitu PINx.bit.

III. LANGKAH PERCOBAAN


1. Hubungkan port PIO pada AVR ATMega dengan modul penampil led.
2. Hubungkan port PIO yang lain pada AVR ATMega dengan modul switch.
3. Buatlah program-program berikut, kemudian download kedalam chip AVR.
4. Ubahlah beberapa variable pada program dengan nilai yang bervariasi, kemudian
amati hasilnya dan simpulkan dalam pembahasan.
5. Buatlah program sesuai tugas yang diberikan pada saat praktikum.

Catatan: Cobalah program dibawah bisa menggunakan codewizard atau langsung


dibuat pada project,lalu compile dan download ke AVR-chip dan amati setiap
program yang dibuat dibawah ini dan catat hasil keluarannya.

Program 1:
#include <mega8535.h>
void main(void)
{
DDRD=0xFF; //PortD sebagai output
PORTD=0xFF; //PortD bernilai low
while(1)
{
PORTD.0=0; //PortD pin 0 diberi nilai 0
PORTD.1=1; //PortD pin 1 diberi nilai 1
PORTD.2=1;
PORTD.3=1;
PORTD.4=0;
PORTD.5=1;
PORTD.6=1;
PORTD.7=1;
};
}

Program 2:
/* Program portA input,dan port D output
*/
#include <mega8535.h>
void main(void)
{
//Deklarasi variabel lokal
unsigned char A; //variabel A bertipe uchar 0-255
DDRA=0X00; //PortA sebagai input
PORTA=0XFF; //PortA menggunakan pullup
DDRD=0XFF; //PortD sebagai output
PORTD=0XFF; //PortD bernilai awal high
while(1)
{
A=PINA;
PORTD=A;
};
}

Program 3.
/*Program PortD sebagai keluaran,
dengan fungsi jeda/delay
*/
#include <mega8535.h>
#include <delay.h>

void main(void)
{
unsigned int A;
DDRD=0XFF;
PORTD=0X00;
A=1;
while(1)
{
PORTD=~A; //portD mengeluarkan invers A
delay_ms(250);
A=A*2;
if (A>128)
{
A=1;
};
};
}

Program 4.
/*Program geser bit
variasikan nilai n, rubah pergeseran kanan/kiri >>/<<
*/
#include <mega8535.h>
#include <delay.h>

unsigned char val,n; //variabel global

void main(void)
{
n=2;
DDRD=0XFF; //portD sebagai output
val=1<<7; //bit 7 diset 1, dan disimpan dalam val
PORTD=~val; //PortD invers val
delay_ms(200);
while(1)
{
delay_ms(200);
val>>=n; //geser nilai val sebanyak n kekanan
PORTD=~val;
if(val==0)
{
val=1<<7;
}
};
}

Program 5.
/*Program untuk membaca input port dan
dikeluarkan pada port yang lain
variasikan port masukan dan port keluaran
sesuai modul simulasi yg digunakan
*/
#include <mega8535.h>
#include <delay.h>

unsigned int D1[5]={129,66,36,24,255}; //definisi var D1 sbg array

void main(void)
{
unsigned char n,a;
DDRD=0XFF;
PORTD=0XFF;
DDRB=0X00;
PORTB=0XFF;
#asm ("nop")
while(1)
{
if(PINB.0==0)
{
for (a=0;a<3;a++)
{
for (n=0;n<6;n++)
{
PORTD=~D1[n];
delay_ms(500);
};
};
}
if(PINB.1==0)
{
PORTD=0;
delay_ms(500);
PORTD=255;
delay_ms(500);
PORTD=0;
delay_ms(500);
}
PORTD=255;
};
}

IV. PEMBAHASAN
Praktikum ini bertujuan untuk memahami input dan output dari mikrokontroler AVR AT
Mega 8535. Ada lima percobaan yang menggunakan led sebagai indikator keluaran.

PROGRAM I
Pada percobaan pertama praktikan membuat sebuah kondisi untuk penunjukkan
indikator lampu dengan menggunakan satu port pada modul yang terhubung dengan LED
yaitu PORT D.

Pada praktikum kali ini digunakan modul dengan PIN berjenis common anoda yang artinya
LED hanya akan menyala apabila diberi masukan logika bernilai 0 (active low). Program
dimulai dengan inisialisasi PORT D sebagai output melalui program DDRD=0xFF,
kemudian dilanjutkan dengan memberikan nilai awal pada PORT D melalui program
PORTD=0xFF yang artinya LED pada kondisi tidak menyala. Program while(1)
digunakan sebagai pengulangan (loop) pada program secara terus-menerus/tanpa henti.
Berikutnya, praktikan memberikan nilai tertentu pada masing-masing LED melalui
perintah PORT.D=logika masukan (0/1) sehingga dari program di atas didapatkan hasil
seperti berikut.

PROGRAM II

Pada percobaan ini praktikan menggunakan 2 port pada modul yaitu PORT A sebagai
input dan PORT D sebagai output dimana PORT A terhubung dengan switch dan PORT
D terhubung dengan LED. Adapun program yang digunakan adalah sebagai berikut.

Pada program di atas, digunakan PORT D dan PORT A yang masing-masing fungsinya
dideklarasikan oleh program DDRA=0X00 (PORT A sebagai input) dan DDRD=0XFF
(PORT D sebagai output). PORT A digunakan untuk mengambil nilai dari switch (pullup)
menggunakan program PORTA=0XFF dan disalin sebagai keluaran pada port D
menggunakan program PORTD=A. Jadi, apabila switch bernilai 1 atau mati maka LED
akan menyala dan sebaliknya jika switch bernilai 0 atau hidup maka LED akan mati
sehingga didapatkan hasil seperti berikut.
PROGRAM III
Percobaan ketiga membuat running led, yaitu menghidupkan indikator lampu satu persatu
secara berurutan. Dimulai dari pin D0 hingga pin D7, seperti yang ditunjukkan pada
program running led di bawah ini

No Nilai port D Biner Hasil Invers A

1 A=1 0000 0001 1111 1110

2 A=2 0000 0010 1111 1101


3 A=4 0000 0100 1111 1011

4 A=8 0000 1000 1111 0111

5 A = 16 0001 0000 1110 1111

6 A = 32 0010 0000 1101 1111

7 A = 64 0100 0000 1011 1111

8 A = 128 1000 0000 0111 1111

Nilai output pada port D senilai dengan A, dimana nilai A memiliki nilai awal 1 dan
setelah delay nilai menjadi A = A*2 sehingga di dapatkam hasil seperti tabel diatas.
Nilai D ini kemudian di inverskan untuk selanjutnya merupakan keluaran dari port D
dimana lampu menyala jika nilainya nol (common anoda). Proses akan terus
berjalan sampai nilai A = 128, jika A lebih dari 128 maka akan terjadi looping dan
kembali pada kondisi A = 1.
PROGRAM IV
Program ke 4 hampir mirip dengan program ke 3 hanya saja running LED akan melompat
setiap 2 nilai. Adapun program yang digunakan seperti berikut.

Pada percobaan ini digunakan PORT D yang di set sebagai output dengan nilai val
awal senilai : 1000 0000 atau bit 7 diberi nilai 1 kemudian diinvers menjadi 0111 1111.
Nilai val ini harus diinverskan karena pada praktikum kali ini menggunakan
common anoda. Setelah itu praktikan mengatur nilai dan arah pergeseran n (pada
praktikum ini nilai n=2 dan bergeser ke kanan) dengan waktu delay di set pada 200 ms.
Saat nilai val pada bit ke 7 menjadi 0 maka secara otomatis nilai bit ke 7 akan menjadi 1
lagi menggunakan program val=1<<7 setelah program if (val=0). Sehingga didapatkan
hasil sebagai berikut.

No Digeser sebanyak n = 2 Port D = invers Val

1 0010 0000 1101 1111

2 0000 1000 1111 0111

3 0000 0010 1111 1101

4 1000 0000 0111 1111


PROGRAM V
Program yang terakhir adalah membuat running LED yang berjalan dari kanan dan kiri
kemudian bertemu dititik tengah. Dan membuat flip flop untuk menyalakan dan
mematikan secara serempak dengan membaca input port dan dikeluarkan pada port yang
lain. Port yang digunakan adalah port D sebagai output dan port B sebagai input dengan
dua kondisi yang berbeda (pin B0 digunakan untuk menyalakan running LED dan pin B1
digunakan untuk menyalakan flip flop).

Port D digunakan sebagai output dan Port B digunakan sebagai input dengan dua
kondisi yang berbeda. Pada Pin B0 digunakan untuk menyalakan running led dan Pin B1
digunakan untuk menyalakan flip-flop.

PIN B0

Pada running led dilakukan pengulangan sebanyak a = 3 dimulai dari nol. Pemanggilan
program dilakukan sesuai dengan n seperti yang tertera pada tabel dibawah ini:
No Nilai n Desimal yang di Biner Biner yang telah di
panggil invers

1 n=0 129 1000 0001 0111 1110

2 n=1 66 0100 0010 1011 1101

3 n= 2 36 0010 0100 1101 1011

4 n= 3 24 0001 1000 1110 0111

5 n= 4 255 1111 1111 0000 0000

Pemanggilan berdasarkan n, jika n = 0 maka desimal yang dipanggil adalah 129 atau
1000 0001 biner, karena menggunakan common anoda maka nilai biner tersebut
harus diinverskan menjadi 0111 1110. Nilai ini setelah di delay selama 500ms akan
memanggil n selanjutnya sampai n = 4.

PIN B1
no Desimal Biner
1 255 1111 1111
2 0 0000 0000
3 255 1111 1111
4 0 0000 0000

Pada flip flop sebanyak 2 kali pengulangan. Flip flop ini menyala secara serentak dan
mati secara serentak juga.Ketika pin B1 ditekan maka program akan berjalan dan port
D bernialai 0000 0000 maka LED akan menyala dan di delay selama 500 ms. Jika mati
port D akan bernilai 1111 1111.
V. KESIMPULAN
1. Program yang dibuat dan dimasukan ke dalam modul sesuai dengan simulasi yang
telah dilakukan.
2. Terdapat empat buah PORT pada mikrokontroler AVR AT Mega 8535 yaitu PORT A,
PORT B, PORT C, dan PORT D
3. Untuk mendeklarasikan PORT sebagai INPUT atau OUTPUT dapat dilakukan dengan
perintah DDR
4. Praktikan dapat memahami Input output mikrokontroler AVR AT Mega 8535

VI. DAFTAR PUSTAKA


Muhtadan. 2017. Modul 1 : Praktikum pengenalan PIO (Paralel Input Output).
Yogyakarta : STTN - BATAN

Anda mungkin juga menyukai