Akses Input/Output Mikrokontroller AVR dengan WINAVR GCC

Akses Input/Output Mikrokontroller AVR dengan WINAVR GCC

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 = 0×0F; //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 = 0×54;

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

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 program akses input/ouput yang dijalankan menggunakan AVRStudio 4.13 dengan WinAVR:

#include “avr/io.h”
#include “util/delay.h”
int main ()
{
uint8_t i;
PORTC     = 255;
DDRD      = 255;
while (1)
{
do
{
i    =PINC;
i    = i&0×01;
}
while (i!=0×01);
_delay_ms(1);
do
{
i    =PINC;
i    = i&0×01;
}
while (i!=0×01);
PORTD = 0×0f;
do
{
i    =PINC;
i    = i&0×01;
}
while (i==0×01);
_delay_ms(1);
do
{
i    =PINC;
i    = i&0×01;
}
while (i==0×01);
PORTD    = 0;
}
}

Dayat kurniawa (d_at02@yahoo.com)

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: