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 baku :

 

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 jika Port C.2 ditekan

 

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