Home > Mikrokontroler, Tutorial > Access I/O AVR using WinAVR GCC

Access I/O AVR using WinAVR GCC

Mengakses Port Mikrokontroller AVR dengan WinAVR

Semua port AVR mempunyai fungsi baca/tulis ketika digunakan dalam mode general. Arah dari masing-masing port pin dapat dirubah-rubah baik sebagai ouput maupun input. Setiap pin mempunyai kapasitas untuk mendrive dan membenamkan sumber untuk setiap portnya (jumlah 8 pin) kurang lebih 100mA. Driver pin cukup kuat untuk menyalakan led secara langsung, tetapi hal itu tidak direkomendasikan. Semua port pin mempunyai pull-up resistor yang dapat dipilih dan semua pin mempunyai diode proteksi antara VCC dan GND.

Setiap port terdiri dari tiga register yaitu DDRx, PORTx, dan PINx (dimana x menunjukkan nomor port). Register DDRx digunakan untuk memilih arah dari port pin. DDRx nol berarti port tersebut dikonfigurasi sebagai input, DDRx satu berarti port tersebut dikonfigurasi sebagai output. Jika DDRx diisi nol dan PORTx diisi satu maka port tersebut dikonfigurasi sebagai input dengan resistor pull-up internal. Cara lainnya jika PORTx diisi nol, maka port tersebut dikonfigurasikan sebagai input tetapi pinnya dalam kondisi tri-state sehingga mesti ditambahkan resistor pull-up eksternal.

Jika PORTx diset satu dan DDRx diset satu, maka port pin tersebut dikonfigurasi sebagai output dalam kondisi high, dan jika PORTx diset nol maka port pin dalam kondisi low.

Sekarang pertanyaannya bagaimana kita dapat mengontrol port pin AVR menggunakan WinAVR GCC? Ketika menggunakan WinAVR GCC hal pertama yang mesti kita butuhkan adalah menyiapkan library dimana register PORT tersebut dideklarasikan. Library yang mendefinisikan port register terdapat pada library io.h yang terdapat di folder avr di lokasi WINAVR diinstall. Cara penulisannya sebagai berikut:

#include <avr/io.h>

Untuk mengsetting semua pin of DDRD sebagai output,dengan cara yang mudah kita cukup menuliskan

DDRD = 0xFF; // Set port D pin as outputs

Sekarang kita dapat menuliskan jumlah output ke port D

PORTD = 0x0F; //port pins will be set to 00001111

Jika kita mempunyai 8 bit variabel i, kita dapat memindahkan data dari variabel tersebut ke port register seperti berikut ini:

Uint8_t i = 0x54;

PORTD = i;

Untuk membaca port D pin,adalah sebagai berikut:

DDRD = 0; //set semua port D pins sebagai input

i = PIND; //baca semua pin bits dari port D dan simpan ke variabel i

Terkadang kita menggunakan sebagian port pin sebagai input atau output untuk fungsi yang berbeda. Terkadang kita menggunakan pin 0, 2, 4, 6 sebagai input dan pin 1, 3, 5, 7 sebagai ouput. Kita dapat menuliskan programnya sebagai berikut:

DDRD = 0 ;// reset semua bit ke nol

DDRD |=(1<<1)|(1<<3)|(1<<5)|(1<<7); //menggunakan operasi bit shift “<<” dan logika or untuk menjadikan bit 1, 3, 5, 7 menjadi 1

Kemudian kita akan memberikan nilai keluaran ke pin 1, 3, 5, 7

PORTD |= (1<<1)|(1<<3)|(1<<5)|(1<<7); // set 1

atau

PORTD &= ~((1<<1)|(1<<3)|(1<<5)|(1<<7)); // set 0

Untuk mengset beberapa pin sebagai input dapat dilakukan sebagai berikut:

DDRD &=~((1<<1)|(1<<3)); //pin 1, 3 sebagai input

i = PIND; // baca semua data dari PIND

Kita dapat membaca bit 1 dan 3 menggunakan pengecekan tiap bit. Untuk melakukan prosedur diatas, tentu saja membutuhkan fungsi yang terdapat di library sfr_defs.h seperti bit_is_set() atau bit_is_clear().

Berikut ini contoh dari masalah tersebut:

#include "avr\io.h"
#include "avr\iom8.h"
int main(void) {
  DDRD&=~_BV(0);//set PORTD pin0 to zero as input
  PORTD|=_BV(0);//Enable pull up
  PORTD|=_BV(1);//led OFF
  DDRD|=_BV(1);//set PORTD pin1 to one as output
  while(1) {
   if (bit_is_clear(PIND, 0))//if button is pressed
               {
                       PORTD&=~_BV(1);//led ON
                       loop_until_bit_is_set(PIND, 0);//LED ON while Button is pressd
                       PORTD|=_BV(1);//led OFF
               }
        }
}
Program dijalankan di AVR Studio 4.12 SP 4..

Jabat Erat – Dayat Kurniawan

Categories: Mikrokontroler, Tutorial
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: