I/O DASAR
Abstrak— In the module 1 practicum the microprocessor Kedua, praktikan akan mengamati penggunaan
system will discuss more deeply about the basic input delay pada AVR gcc. Delay bertujuan untuk mengatur
output components on the ATMega 8535 board. Praktikan seberapa cepat lampu LED hidup dan mati. Sama
will study how the ports are used as input or output. Input
seperti percobaan sebelumnya, port A akan
output applications will be made using WinAVR software
in C language. In addition, practicum also aims to digunakan sebagai output. Nilai biner port A akan
understand the setting of Ude related to the use of large and berubah dari kondisi satu ke kondisi dua dalam
types of crystals selang delay yang telah ditentukan. Kemudian
representasi biner bisa dilihat pada nyala dan matinya
Keyword: ATmega 8535, input, output, fuse, WinAVR, delay LED.
Ketiga, praktikan akan mulai
menggunakan sebuah port sebagai input. Port D
PENDAHULUAN akan digunakan sebagai input di mana port D akan
dihubungkan langsung dengan toggle/switch.
Pengaturan input output merupakan dasar yang harus Konfigurasi dari toggle yang nyala atau mati akan
dilakukan terlebih dahulu untuk aplikasi ATMega8535. merepresentasikan biner dari port D. Port A
Pengaturan tersebut salah satunya digunakan dengan akan digunakan lagi sebagai output dan dihubungkan
menggunakan berbagai perintah logika yang sederhana ke LED untuk mengamati keluaran program.
untuk mengetahui apakah hubungan input-output sudah Program akan diatur sedemikian rupa sehingga
benar atau belum dengan mengetahuinya melalui pola untuk konfigurasi input tertentu akan
nyala LED. Pada praktikum ini tujuan yang ingin dicapai menghasilkan konfigurasi output yang sesuai
antara lain : dengan apa yang telah ditentukan.
1. Praktikan memahami datasheet ATmega 8535
2. Praktikan mampu membuat aplikasi input dan
output pada AVR dengan menggunakan bahasa
pemograman C pada winAVR
3. Praktikann memahami pengesetan fuse yang
berkaitan dengan pengunakan besa dan jenis
Kristal.
START
START
DDRA = 0xFF
DDRA = 0xFF
END END
PORTA = 0b00110011
END
Delay_ms(5000)
PORT A = 0b11001100
Delay_ms(5000)
START
DDRA = 0xFF
PORTA = 0b00011011
END
Delay_ms(5000)
PORTA = 0b00011100
Delay_ms(5000)
Hasilnya sesuai dengan kodingan, dimana LED akan Kemudian program diatas dimasukkan kedalam
berkedip dengan selang 500 ms yang mana LED akan ATMega8535, dan setelah dihubungkan dengan board
berkedip-kedip bergantian dari LED0, LED1, LED4, dan ATMega8535, maka hasil output pada LED adalah sebagai
LED5 menyala dan yang lain mati ke LED2, LED3, LED6, berikut:
dan LED7 menyala dan yang lain mati. Kemudian, untuk
perintah while (1) merupakan perintah untuk melakukan
loop tak-hingga kali tanpa syarat tertentu untuk keluar dari
loop tersebut. Sehingga percobaan ini dinyatakan berhasil.
2. TUGAS 1.B.2
Adapun program yang digunakan pada percobaan ini
adalah sebagai berikut:
#include<mega8535.h>
#define F_CPU 1000000UL
#include <delay.h>
void main()
{
DDRA = 0xFF;
PORTA = 0xFF;
while (1)
{
PORTA = 0b00011011;
delay_ms(500);
PORTA = 0b00011100;
delay_ms (500);
}
}
Untuk percobaan selanjutnya, dengan penjelasan yang Pengaksesan sumber clock eksternal ini dilakukan
sama, diperoleh LED berkedip dengan selang 500 ms yang dengan mengetikkan perintah,
mana LED akan berkedip-kedip bergantian dari LED0,
avrdude –c ponyser –p atmega8535 –P com1 –U
LED1, LED3, dan LED4 menyala dan yang lain mati hfuse:w:0xD9:m –U lfuse:w:0xEF:m
kemudian LED2, LED3, LED4 menyala dan yang lain mati.
Nilai LED yang berkedip tersebut merepresentasikan nilai pada command prompt MS Windows sebelum
biner dari tiga digit terakhir NIM kami yaitu 027 10 dan melakukan kodingan dan pendownloadan kodingan
02810. Keluaran ini akan berlangsung terus menerus. Output ke sismin.
yang dikeluarkan sudah sesuai dengan apa yang diminta
pada program, maka percobaan dinyatakan berhasil.
Pada percobaan ini, juga digunakan fasilitas delay
yang terlihat dari library yang digunakan (#include
3. TUGAS 1.B.3 <util/delay.h>). Terlihat dalam body program
Adapun program yang digunakan pada percobaan ini bahwa sebelum program memasuki loop, maka
adalah sebagai berikut: dibuat variabel unsigned char i yang diassign nilai
#include<mega8535.h>
0b11111110 atau 0xFE. Setelah itu, PORTA diset
#define F_CPU 8000000UL sebagai output dengan mengassign nilai 0xFF ke
#include <delay.h> dalam DDRA. Kemudian nilai i ini diassign ke dalam
void main() PORTA yang artinya, LED akan menyala semua
{
unsigned char i = 0xFE; kecuali LED0. Berikutnya, dalam body loop dengan
DDRA = 0xFF; loop tak-hingga, dilakukan pengassignan PORTA
PORTA = i; dengan i sekali lagi yang bertujuan agar nilai PORTA
while(1)
selalu terisi dengan nilai i yang baru. Lalu, digunakan
{
PORTA = i; delay sebesar 120 ms untuk setiap perubahan nyala
delay_ms(120); LED. Terakhir, diset nilai i dengan perintah,
i = (i<<1)| (i>>7);
} i=(i<<1)|(i>>7);
}
Perintah ini merupakan perilaku yang akan LED-LED
nanti tampilkan yang dideskripsikan sebagai berikut.
Pertama, i diassign nilai 0xFE atau 0b11111110,
Flow chart dari program dapat dilihat sebagai berikut. kemudian i ini akan memasuki loop yang diakhir loop
akan diupdate dengan nilai i yang baru yaitu,
START
i = 0b11111110
DDRA = 0xFF
(i<<1) = 0b11111100
(i>>7) = 0b00000001
i = (i<<1) | (i>>7) = 0b11111100 + 0b00000001
i = 0xFE
= 0b11111101
1
dengan simbol | (or) merepresentasikan
penjumlahan dalam domain biner. Nilai i ini akan
PORTA = i selalu diupdate oleh loop yang jika diteruskan maka
nilai bit 0 dalam nilai i seolah-olah akan berjalan ke
END kiri kemudian ketika nilai bit 0 ini mencapai bit ke-7,
Delay_ms(5000) maka otomatis bit 0 ini akan memosisikan diri pada
bit ke-0 yang kemudian akan berjalan ke kiri lagi,
demikian nilai i ini dalam loop sehingga, LED (yang
i = (i<<1)|(i>>7)
mati) akan terlihat seolah-olah berjalan dari kiri ke
kanan kemudian langsung ke paling kiri setelah LED
Percobaan berikutnya (1B3) menggunakan clock yang mati ini mencapai paling kanan (terlihat seperti
8 MHz. Nilai clock ini diperoleh dengan memutar). Kemudian program diatas dimasukkan
menggunakan sumber clock eksternal yaitu kristal. kedalam ATMega8535, dan setelah dihubungkan dengan
board ATMega8535, maka hasil output pada LED adalah {
sebagai berikut: PORTA = i;
delay_ms(120);
i = (i>>1)| (i<<7);
}
}
}
START
DDRA = 0xFF
i = 0xFE
END
i != 0b01111111
PORTA =
i != 0b01111111
Delay_ms(5000)
PORTA =
i = (i<<1)|(i>>7)
Delay_ms(5000)
i = (i>>1)|(i<< 7)
DDRA = 0xFF;
DDRD = 0x00;
SFIOR = 0<< PUD;
PORTA = 0xFF;
while (1)
{
PORTD = 0b01101111; //kolom 1---
delay_us(10);
if(PIND.0==0)
{
PORTA = 0b11111110;
}
1 i = 0xFF
0b011011
11
0b10111
Keluaran ini akan berlangsung terus menerus. Output 111
yang dikeluarkan sudah sesuai dengan apa yang
0b011111
diminta pada program. Sehingga percobaan ini dapat PORTA = 11
dikatakan berhasil. 0b11111110
PORTA =
0b11111101 PORTA =
0b11111011
while (1)
{
Kemudian program diatas dimasukkan kedalam PORTD = 0b1101111; //kolom 1---
ATMega8535, dan setelah dihubungkan dengan board delay_ms(500);
ATMega8535, maka hasil output pada LED adalah sebagai if(PIND.0==0)
{
berikut:
PORTA = 0b11111110;
}
if(PIND.1==0)
{
PORTA = 0b11110111;
}
if(PIND.2==0)
{
PORTA = 0b10111111;
}
if(PIND.3==0)
{
PORTA = 0b11111111;
}
if (PIND.2==0)
{
PORTA = 0b01111111;
}
if(PIND.3==0)
{
PORTA = 0b11111111;
}
#include<mega8535.h>
#include<delay.h>
void main()
{
DDRA = 0xFF;
DDRD = 0x00;
SFIOR = 0<< PUD;
PORTA = 0xFF;
Flow chart dari program dapat dilihat sebagai berikut
1 i = 0xFF
0b011011
11
0b10111
111
PIND
PIND 0b011111
11
PIND
PIND
PIND
PIND
PIND
PIND
PIND
PIND
#include<mega8535.h>
#define F_CPU 8000000UL
TUGAS 1.B.1 #include <delay.h>
void main()
#include<mega8535.h> {
#define F_CPU 1000000UL unsigned char i = 0xFE;
#include <delay.h> DDRA = 0xFF;
void main() PORTA = i;
{ while (1)
DDRA = 0xFF; {
PORTA = 0xFF; while(i != 0b01111111)
while (1) {
{ PORTA = i;
PORTA = 0b00110011; delay_ms(120);
delay_ms(500); i = (i<<1)| (i>>7);
PORTA = 0b11001100; }
delay_ms (500); while (i != 0b11111110)
} {
} PORTA = i;
delay_ms(120);
i = (i>>1)| (i<<7);
TUGAS 1.B.2 }
}
}
#include<mega8535.h>
#define F_CPU 1000000UL
#include <delay.h>
void main()
{
DDRA = 0xFF;
PORTA = 0xFF;
while (1)
{
PORTA = 0b00011011;
delay_ms(500);
PORTA = 0b00011100;
delay_ms (500);
}
}
TUGAS 1.C.1 }
#include<mega8535.h>
#include<delay.h>
void main()
{
DDRA = 0xFF;
DDRD = 0x00;
SFIOR = 0<< PUD;
PORTA = 0xFF;
while (1)
{
PORTD = 0b1101111; //kolom 1---
delay_ms(500);
if(PIND.0==0)
{
PORTA = 0b11111110;
}
if(PIND.1==0)
{
PORTA = 0b11110111;
}
if(PIND.2==0)
{
PORTA = 0b10111111;
}
if(PIND.3==0)
{
PORTA = 0b11111111;