Anda di halaman 1dari 7

Percobaan I

I/O DASAR

Eglin Noverinda Situmeang (14S16043)


Tanggal Percobaan : 23/02/2019
[ELS3203] [Sistem Komputer]
[Lab Dasar Teknik Elektro] – Teknik Elektro
Institut Teknologi Del

B, ditulis secara general sebagai PORTxn. I/O Registers dan


Abstrak— Pada praktikum I/O melakukan beberapa lokasi bit secara fisik terdaftar di ”Register Description for
percoban untuk mengenal input dan output pada port , I/O-Ports” di halaman 66.
menggunakan implementasi bahasa pemograman C yang
terlihat dari perubahan pada LED yang terpasang. Percobaan Tiga lokasi alamat memori I/O dialokasikan untuk tiap
yang yang dilakukan adalah penggunaan Port A sebagai port, satu untuk tiap Data Register – PORTx, Data Direction
input , pengaturan delay dan penggunaan port D sebagai
Register – DDRx, dan Port Input Pins – PINx. I/O Port Input
Output. Percobaan menggunakan Sismin ATMega8535 dan
Pins adalah read only, sedangkan Data Register dan Data
pengaturand dengan menggunakan pemograman bahasa C
Direction Register adalah read/write. Sebagai tambahan, bit
pada software CV AVR. Hasil yang dihasilkan pada LED
seseuai spesifikasi pengaturan. Pull-up Disable – PUD pada SFIOR menonaktifkan fungsi
pull-up untuk semua pin di semua port saat diaktifkan.
Key Word : Input, Outoput , Delay

I. Pendahuluan

Pada praktikum ini praktikan melakukan beberapa sub


percobaan. Percobaan pertama berkaitan dengan
penggunaan port A sebagai output yang akan dihubungkan
ke LED sebagai representasi biner, LED akan menyala
ketika memiliki nilai 1 dan akan mati ketika memiliki nilai 0
yang akan diseuaikan dengan bilangan biner yang susdah di
set dalam code. Dalam penggunaan delay pada LED akan
mengatur cepat lambatnya lampu LED akan menyala atau
mati. Praktikan akan mulai menggunakan sebuah port
sebagai input, Port D yang dihubungkan dengan
toggle/switch yang berfungsi untuk merepresentasikan biner
dan port A akan digunakan sebagai output yang terhubung
dengan LED berfungsi untuk mengamati keluaran program
yang sudah diatur dalam code program.

B. Konfigurasi Pin Port


II. LANDASAN TEORETIS

A. Skematik I/O

Semua register dan referensi bit pada bagian ini ditulis


dalam bentuk umum. Huruf ”x” merepresentasikan nomor
untuk port dan huruf ”n” merepresentasikan nomor bit nya.
Bagaimanapun, ketika menggunakan register atau bit yang
ditetapkan di program, maka bentuk tepatnya harus
digunakan. Sebagai contoh, PORTB3 untuk nomor 3 di Port
C. PUD Pada SFIOR
III. Hasil dan Analisis

A. Tugas 1.A.1 Output Led Display

Tugas 1.A.1 menggunakan port A sebagai output dengan


mengatur DDRX (register 8 bit yang menyimooan informasi
untuk pin portx). Menggunakan port A sebagai output maka
DDRX akan berubah menjadi DDRA yang perlu diisi
Rekomendasi untuk inisialisasi pada pin input Jika ada dengan bilangan bitnya (OxFF). Nilai representasi pada port
pin yang tidak terpakai, direkomendasikan agar tiap pin ini A akan memperngaruhi LED maka adanya pengaturan nilai
terdefinisikan. Walaupun kebanyakan input digital bit pada port A seperti pada Flowchart dibawah
dinonaktifkan dalam mode deep sleep seperti yang
dideskripsikan diatas, input yang mengambang harus
dihindari untuk mengurangi konsumsi arus pada semua
mode lain di mana input digital diaktifkan (Reset, Active
mode, and Idle mode).
DDRA = 0xFF
Metode paling sederhana untuk mendefinisikan suatu pin
yang tidak digunakan adalah untuk mengaktifkan pull-up
internal pada kasus ini, pull-up akan dinonaktifkan saat
reset. Jika konsumsi daya rendah ketika reset itu penting,
maka disarankan untuk menggunakan pull-up atau pull-
down eksternal. Menghubungkan pinpin yang tidak
digunakan ke Vcc atau GND langsung tidak disarankan
karena dapat mengakibatkan kelebihan arus jika pin secara
tidak sengaja dikonfigurasikan sebagai output.

PORTA= 0b01010101
D. Deskripsi Register (Untuk Port A)
port A menggunakan while (1) atau while looping dengan
menggunakan delay_ms berfungsi sebagai penunda eksekusi
suatu program. Sama seperti sebelumnya DRRA bernilai
0xFF (mengatur nilai bit dalam port A) dengan port A
sebagai output, program akan masuk pada looping dengan
Pada port A terdapat nilai bit 0b01010101 menandakan
while loop. Program while loop pada port A awal benilai
bahwa LED ke 0, 2,4, 6 bernilai 1 akan menyebabkan LED
0b00110011 menghasilkan output dengan menyalanya LED
menyala sedangkan pada 1,3,5,7 bernilai 0 menyebabkan
ke 0,1,4,5 setelah LED program akan mengaalami delay
LED akan tetap mati. Software CV AVR akan dihubungkan
sebesar 500 ms , setelah mengalami delay program aktif
dengan ATMega 8535 akan menghasilkan output seperti
kembali pada port A yang kedua dengan nilai bit
gambar dibawah ini
0b11001100 dan menghasilkan output dengan menyalakan
LED ke 2,3,6,7 kemudian program mengalami delay
LED 7 6 5 4 3 2 1 0
sebesar 500ms. Setelah melakukan program pada percobaan
ke 2 maka program akan kembali menjalan seperti
sebelumnya yang membuat LED padapapan ATMega 8535
B. Tugas 1.A.2 Output Led Display (sesuai nomor akan menyala secara bergantian .
kelompok)

Flow Chart pada percobaan 1.A.2 sebagai berikut

DDRA = 0xFF

Flowchart program dapat dilihat sebagai berikut

PORTA = (1<<PORTA5)

DDRA = 0xFF

Pada percobaan 1.A.2 sama dengan percobaan 1.A.1 dengan


Port A sebagai output dengan registernya adalah DDRA
yang akan diatur dengan memasukan nilai bit (0xFF) pada
port A. Pada percobaan ini hanya mengganti input pada port
A sesuai dengan nomor kelompok maka port A diisi menjadi PORTA = 0b00110011
PORTA = (1<<PORTA5) atau 0b00000100 maka LED
yang menyala ke 5 hasil output yang ditampilkan pada
ATMega 8535 sebagai berikut Delay_ms(500)

PORTA = 0b11001100

LED 7 6 5 4 3 2 1 0
Delay_ms(500)

C. Tugas 1.B.1 (Delay pada AVR GCC)


Hasil Output pada ATMega 8535
Pada percobaan ini memiliki code sedikit berbeda dengan
percobaan pertama perbedaannya memiliki 2 inputan yaitu LED 7 6 5 4 3 2 1 0
LED 7 6 5 4 3 2 1 0 Tugas 1.B.3
LED 7 6 5 4 3 2 1 0
LED 7 6 5 4 3 2 1 0

Pada percobaan ini mengatur nilai register DDR bernilai 1


agar port A dapat digunakan sebagai output. port A
D. Tugas 1.B.2 (Delay pada AVR GCC) dipengaruhi oleh nilai i = 0xFE atau 0b11111110. Kemudian
masuk ke dalam while looping dan terlihat bahwa nilai
Flowchart pada 1.B.2 dapat dilihat sebagai berikut biner port A akan sama dengan variabel i. Kemudian
variabel i akan diset dengan operasi.
Flowchart program 1.B.2 menyerupai dengan dengan tugas
1.B.1 hanya pada port A memiliki nilai bit yang berbeda i=(i<<1)|(i>>7)
pada percobaan ini menggunakan nilai bit sesuai dengan 3
digit nim terakhir anggota kelompok. Untuk prinsip kerja
masih sama dengan tugas 1.B.1 untuk nilai bit 0b00110110 untuk (i<<1) menggeser nilai 0b11111110 menggeser bit
nim 054 dan 0b00101011 nim 043. Maka output yang bernilai nol dari satu posisi ke kekiri posisi bit tersebut.
dihasilkan pada ATMega 8535 Misal tadinya i bernilai 0b11111110 maka setelah
dilakukan operasi ini nilai bit bernilai 0b11111101
LED 7 6 5 4 3 2 1 0
dengan menjumlahkan (i>>7) dalam bentuk bitnya
LED 7 6 5 4 3 2 1 0
0b.00000001 pada bilangan bit 0xFE. Jika operasi ini men
LED 7 6 5 4 3 2 1 0
LED 7 6 5 4 3 2 1 0 galami overflow, ma ka nilai bit port A kembali ke nilai
awal bernilai 0b11111110. Proses ini akan dilakukan
selama looping yang tak hingga karena syarat loop selalu
Flowchart pada 1.B.2 dapat dilihat sebagai berikut bernilai satu. Jadi, program ini bertujuan untuk
menunjukkan nyala-mati LED yang memutar dari kiri ke
kanan.
Flowchart pada 1.B.3 dapat dilihat sebagai berikut

DDRA = 0xFF

DDRA = 0xFF

i = 0xFE
PORTA = 0b00110110

Delay_ms(500)

PORTA = 0b00101011

Delay_ms(5000)
Delay_ms(500)

i = (i<<1)|(i>>7)
Tugas 1.C.1

Tugas 1.B.4

DDRA = 0xFF

i = 0xFE DDRA = 0xFF

DDRD = 0x00

SFIOR = 0 << PUD

Delay_ms(5000)

i = (i<<1)|(i>>7)

Delay_ms(5000) i = PIND

i = (i>>1)|(i<<7)

Program ini lebih sulit daripada tugas 1.B.3 karena


nyala mata lampu tidak memutar satu arah saja namun
bolak-balik. Prinsip kerja pada percobaan ini lampu PORT A akan digunakan sebagai output oleh
yang mati ialah lampu ke-0 dan menerus kekiri hingga karena itu register DDRA akan di set 0xFF.
ke-7 setelah itu tidak kembali ke -0 namun lampu mati Sementara, port D akan digunakan sebagai input
ialah lampu ke-6 terus ke kanan hingga kembali ke sehingga register DDRD akan di set 0x00.
lampu ke-0. Oleh karena itu pada loop besar program Langkah berikutnya adalah men gaktifkan resistor
terdapat dua sub loop di mana satu untuk mengatur pull up. Resistor pull up berfun gsi untuk
nyala-mati ke kiri dan nyala-mati ke kanan. Untuk memaksa nilai pin selalu ‘1’ atau HIGH ketika
yang kekiri, loop ini akan berlangsung hingga kondisi tidak ada input yang masuk. Hal ini berkaitan
lampu ke 7 saja mati pada saat tidak memenuhi syarat dengan kondisi melayang yang telah dijelaskan
0b011111111 maka dari itu jika syarat ini tidak pada jawaban pertanyaan sebelumnya. Cara
terpenuhi maka program masuk ke loop kedua. Untuk mengakti fkan resistor pull up adalah dengan
loop pertama pengesetan nilai i sama seperti tugas memberikan instruksi SFIOR = 0<<PUD. PUD
1.B.3 yakni i = (i<<1)|(i>>7) yang berguna agar adalah pull up disable. Keti ka nilai PUD
mengatur nyala mati lampu ke arah kiri . Sedangkan dijadikan nol, maka resistor pull up menjadi aktif.
untuk l oop kedua, looping hanya dilakukan jika kondisi Pin input sangat tidak dianjurkan untuk
lampu tidak bernilai 0b11111110 dengan kata lain jika dihubungkan secara langsung ke sumber
bernilai tersebut maka program akan keluar dari loop. tegangan atau ke ground untuk menghindari
adanya arus berlebihan mengalir melalui pin ters
ebut. Bila ada arus yang melebihi kapasitas pin
mengalir, maka pin akan rusak.
IV. KESIMPULAN V. REFERENSI
1. AVR GCC memiliki syntax delay untuk 1. Hutabarat, Mervin T., Waskita Adijarto, dan Harry
Septanto, Praktikum Sistem Mikroprosesor,
membantu pemrogra man yang membutuhkan
Sekolah Teknik Elektro dan Informatika Institut
fungsi waktu. Teknologi Bandung, Bandung, 2013

2. Pengesetan fuse dilakukan dengan AVRdude


dengan mengeset frekuensi clock sesuai
dengan clock eksternal
Lampiran

#include int
main (void)
PORTA = i; //Inisialisasi nilai
{
PORT A
DDRA = 0XFF ; //inisialisasi PORTA sebagai OUTPUT
while (1)
PORTA = (1 << PA6) | (1 << PA4) | (1 << PA2) | (1 << PA0); // nilai
{ while (i != 0b01111111) //gerakan ke kiri
OUTPUT
{ PORTA = i;
return 0; }
delay_ms(120); i = (i<>7); }
while (i != 0b11111110) //gerakan ke kanan
{ PORTA = i;
delay_ms(120);
#include<avr/io.h>
i = (i>>1) | (i<<7)
int main (void)
}
{ DDRA = 0XFF ; //inisialisasi PORTA sebagai OUTPUT return 0;
PORTA = 0b00001011; // nilai OUTPUT
}
return 0; }
}

#include<avr/io.h> #include<avr/io.h>
#define F_CPU 7372800UL
int main (void)
int main (void)
{ unsigned char i;
{ DDRA = 0XFF; DDRA = 0xFF;//inisialisasi PORTA sebagai output
PORTA = 0XFF;
DDRD = 0x00;//inisialisasi PORTD sebagai input
while (1)
SFIOR = 0 << PUD; // aktivasi resistor pull-up internal
{ PORTA = 0b00110011; PORTA = 0xFF;
delay_ms(500);
while (1)
PORTA = 0b11001100;
{ i=PIND;
delay_ms(500); } PORTA = i; }
return 0; }
return 0; }

#include<avr/io.h>
#define F_CPU 8000000UL
int main (void)
{ DDRA = 0XFF;
PORTA = 0XFF;
while (1)
{ PORTA = 0b00101110; //representasi biner menunjukkan angka 046
delay_ms(500);
PORTA = 0b00110011; //representasi biner menunjukkan angka 051
delay_ms(500); }
return 0; }

#include<avr/io.h>
#define F_CPU 8000000UL
#include int main (void)
{ unsigned char i=0xFE;
DDRA = 0xFF;
PORTA = i;
while (1)
{ PORTA = i;
delay_ms(120);
i = (i<>7); }
return 0; }

#include<avr/io.h>
#define F_CPU 80000000UL
int main (void)
{ unsigned char i=0xFE; //inisialisasi nyala LED
DDRA = 0xFF; //PORT A output

Anda mungkin juga menyukai