
Pemrograman I/O
Pendahuluan
Pemrograman I/O pada mikrokontroler merupakan dasar dari prinsip pengontrolan berbasis mikrokontroler, dimana orientasi dari penerapan mikrokntroler ialah untuk mengendalikan suatu sistem berdasarkan input yang diterima , lalu diproses oleh mikrokontroler, dan dilakukan aksi pada bagian output sesuai program yang telah ditentukan sebelumnya. Setiap praktikum dan pengerjaan tugas akhir, berdurasi maksimal 3 jam.
Tujuan Praktikum
1. Praktikan dapat menjelaskan port-port yang tersedia pada mikrokontroler AVR ATmega16 dan menjelaskan juga prinsip I/O pada mikrokontroler AVR secara umum.
2. Praktikan dapat memprogram mikrokontroler AVR ATmega16 sebagai input dan output, serta mengendalikan perangkat output menggunakan bahasa C.
3. Praktikan mengusulkan suatu rancangan sistem minimum mikrokontroler untuk orientasi control.
Konsep I/O
Pada Mikrokontroler AVR ATmega16
Gambar Berikut
ini merupakan susunan kaki standar 40
pin DIP mikrokontroler AVR ATmega16.

Gambar 2.1
Mikrokontroler ATmega16
Terlihat pada gambar di atas, terdapat 4
buah port yaitu PA, PB, PC dan PD yang semuanya dapat diprogram sebagai input
ataupun output. Pin I/O pada mikrokontroler AVR dapat dikonfigurasi
sebagai input atau output, dengan cara mengubah isi I/O register Data Direction Register.
Misalnya, jika
ingin port B dikonfigurasikan sebagai output, maka Data Direction Register port
B(DDRB) harus diset sebagai 0xFFH ( sama dengan 255). Jika sebagai input maka
0x00H (sama dengan 0).
Contoh ;
DDRB=255; //Port B dikonfigurasi sebagai output, yaitu
PB0 -PB7
DDRD=0x00;
// Port D dikonfigurasi sebagai input
VOH ( output high voltage) ialah tegangan
pada pin I/O mikrokontroler ketika ia mengeluarkan logia “1” dengan besar sekitar
4.2V dan arus sebesar 20mA(IOH . Setiap pin I/O mikrokontroler AVR
memiliki internal pull up. Mialnya Port B dikonfiguasi sebagai input dan
internal pull-upnya diaktifkan maka DDRB==00H dan PORTB=00H
Contoh ;
DDRB=0; // Port B dikonfigurasi sebagai input
PORTB=0; //internal pull-up aktif
Untuk mendeteksi input
pada salah satu port, dapat digunakan fungsi PINx, sedangkan mendeteksi per pin
pada suatu port dapat digunakan fungsi Pinx.bit
Contoh:
PORTB=PINC; //Semua data di Port C dikirim ke Port B
PORTB.0=PINC.0 ; //Data di Port C.0 dikirim ke Port B.0
Keluaran dari suatu port
mikrokontroler hanya dapat mengemudikan perangkat output dengan arus yang
kecil, oleh karena itu biasanya dipergunakan penguat lagi berupa transistor
atau IC penguat agar port tersebut tidak terbebani, berikut contoh mengemudikan
relay dengan tambahan 1 buah transistor :

Gambar
2.1 Mikrokontroler ATmega16
Transistor 2N3904
mempunyai BDC sebesar 100, maka untuk menghitung
nilai resistor basis agar transistor mampu mengalirkan arus yang memadai
sekitar 140 mA ke relay tersebut,
menggunakan rumus
I Bsaturasi =ICsat /BDC = 140mA /100 = 1.4 mA
Jadi, untuk memastikan transistor saturasi, diperlukan setidaknya arus
overdriver 4-10 x dari IBsat, sehingga
IB
= 5 x I Bsat
Diperoleh
IB =7 mA
Maka RB=
VOH- VBE /IB = (4.2-0.7) volt/ 7 mA= 500 Ω
Umumnya
resistor yang mudah diperoleh ialah 470 ohm, jadi kita gunakan nilai 470 ohm
tersebut sebagai RB, mudah bukan.
Pada gambar diatas, jika PA.0 berlogika “1” maka kaki basis transistor
mendapat tegangan sebesar VOH sehingga transistor akan
bekerja/mengalirkan arus (saturasi) dan mengaktifkan relay, begitu juga
sebaliknya.
Penerapan pada Program
Percobaan 1. Penerapan Output dan fungsi delay
Langkah-langkahnya;
1. Siapkan Smart AVR ATmega 16 ver. 2, dan hubungkan dengan kabel AVR ISP Programmer ke PC
2. Buat program di bawah ini :
Outportb.c:
// Percobaan 1.1, percobaan
Output dan delay pada Port B
// LED terhubung di Port B
#include <mega16.h>//menyertakan library file
mega16
#include <delay.h> //menggunakan delay
//jadi librarynya harus digunakan
void main(void) {
//Program Utama
DDRB=255; //Port B dikonfigurasi sebagai output
//yaitu PB0 -PB7
PORTB=255; //Semua Port B mengeluarkan
//logika 1 sehingga semua LED
mati
// Program akan
berulang terus
while (1) {
PORTB.0=0; //LED PB0 menyala
PORTB.2=0; //LED PB2 menyala
delay_ms(500); //Delay 0.5 detik
PORTB.0=1; //LED PB0 mati
PORTB.2=1; //LED PB2 mati
delay_ms(1000); //Delay 1 detik
}; //akhir looping
} //Akhir program utama
3. Kompilasi dan jalankan, maka pada alat akan tampil lampu LED yang berkedip secara bergantian sesuai dengan delay yang telah ditentukan. Beri komentar mengapa diperoleh hasil tersebut.
Percobaan 2. Penerapan Input
Output
Langkah-langkahnya;
1. Siapkan SmartAVR ATmega16 ver. 2, dan hubungkan dengan kabel AVR ISP Programmer ke PC
2. Buat program di bawah ini :
InputPortCkePortB.c:
// Percobaan
1.2, percobaan Input di Port C dan Output
pada Port B
// Saklar di Port
C, LED terhubung di Port B
#include
<mega16.h> //Menyertakan library file ATmega16
#include
<delay.h> //menggunakan delay, jadi
librarynya harus digunakan
void main(void)
{ //Program Utama
DDRB=255;
//Port B dikonfigurasi sebagai
output, yaitu PB0 -PB7
PORTB=255; //Semua Port B mengeluarkan
//logika
1 sehingga semua LED mati
PORTC
=0; //Matikan internal pull up
karena sudah ada
//eksternal
pull up pada rangkaian input
#asm
("nop") //persiapan
// Program akan berulang terus
while (1) {
PORTB=PINC ; //Semua push button yang ditekan di Port C
//datanya dikirim ke Port B
}; //akhir looping
} //Akhir
program utama
3. Amati apa yang terjadi jika beberapa atau semua push button di Port C ditekan.
Percobaan 3. Penerapan Invert
Data
Langkah-langkahnya;
1. Siapkan Smart AVR ATmega 16 ver. 2, dan hubungkan dengan kabel AVR ISP Programmer ke PC
2. Buat program di bawah ini:
DeteksiInputPortCkePortB.c:
// Percobaan
1.3, percobaan deteksi Input di Port C
per pin dan Output pada Port B
// Saklar di Port
C, LED terhubung di Port B
#include
<mega16.h> //Menyertakan
library file mega16
#include
<delay.h> //menggunakan
delay, adi librarynya harus digunakan
void main(void)
{ //Program Utama
DDRB=255; //Port B dikonfigurasi sebagai output, yaitu
PB0 -PB7
PORTB=255;
//Semua Port B mengeluarkan
logika 1 sehingga semua LED mati
DDRC=0;
//Port C
dikonfigurasi sebagai input
PORTC
=0; //Matikan internal
pull up karena sudah ada
//eksternal pul up
pada rangkaian input
#asm ("nop") //persiapan
// Program akan
berulang terus
while (1) {
PORTB.1=PINC.0 ; //membaca data
di PC0
//datanya dikirim ke PB1
PortB.2= ~PINC.2 //Logika
PB2 kebalikan dari PC2
}; //akhir looping
} //Akhir program
utama
3.
Amati apa yang tampil di port B jika push
button di PC.0 ditekan, dan
Tugas Pendahuluan
1.
Berikan contoh kode C untuk membuat port mikrokontroler
AVR ATmega16 berlaku sebagai I/O, jika:
a. Port B sebagai
input yang terhubung ke 8 buah saklar, internal pull up mati, eksternal pull-up aktif.
b. Port D sebagai
output yang terhubung ke relay yang diaktifkan melalui sebuah transistor
Tugas Akhir Praktikum
1. Rancang sistem
minimum dan program lengkap untuk dapat
mengendalikan 2 buah relay 5V di Port B, dengan menggunakan kombinasi 2 buah
push button di Port C. Tiap relay akan
aktif selama 1 menit. Relay dikendalikan oleh 1 buah transistor 2N3904
|
Tanggal |
NILAI : |
Nama &
Paraf Asisten : |
|
|
|
TP |
TA |
|
|
|
|
||
|
Sub Total |
|
||
Miliki isi lengkap
tutorial ini di buku ‘
Panduan Praktikum Mikrokontroler AVR’
Terbitan Elex Media Komputindo , 2008
Pesan ke
desy@elexmedia.co.id