DISUSUN OLEH :
NAMA : ENRICO W. F
NIM : 021500430
PRODI : ELEKTRONIKA INSTRUMENTASI
JURUSAN : TEKNOFISIKA NUKLIR
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.
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.
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.
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>
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>
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
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.
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
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