Penggunaan General-purpose input/output (GPIO)



General-purpose input/output (GPIO) adalah pin generik pada sirkuit terpadu (chip) yang perilakunya (termasuk apakah pin itu input atau output) dapat dikontrol (diprogram) oleh pengguna saat berjalan.

Pin GPIO tidak ditetapkan untuk tujuan khusus dan secara default tidak digunakan. Ide dibalik GPIO adalah untuk memenuhi sistem integrator dalam memperluas dan membangun sistem lengkap yang membutuhkan pin tambahan dari chip berupa sinyal kontrol ataupun data. Adanya konektor (pin) yang tersedia dari chip dapat menghemat kerumitan saat mengatur sirkuit tambahan.

Pada hakekatnya hampir semua SBC (single-board computer) menyediakan GPIO untuk ekspansi disambungkan ke modul atau komponen lainnya. Papan sirkuit embedded seperti Arduino, BeagleBone, Raspberry Pi dan lainnya, acapkali memanfaatkan GPIO untuk membaca data atau sinyal dari berbagai sensor lingkungan seperti IR , video, suhu, orientasi 3 dimensi, percepatan dan sebagainya, disamping untuk menulis atau mengirim data melalui output ke motor DC (melalui modul PWM), audio, display LCD, atau lampu LED.

AVR Mikrokontroler I/O Port
               Mikrokontroller Atmega 128 merupakan mikrokontroller keluarga AVR yang mempunyai kapasitas flash memori 128KB. Port AVR Atmega 128 yang mengubah bit pada 6 terhadap bit 8 port I/O pada satu pada bit 5 port I/O, dan setiap port beroperasi sebagai tujuan umum sinyal I/O (GPIO) dan sinyal yang memiliki fungsi spesial. Sinyal dari GPIO yang tersedia dapat membaca, melihat, keadaan keluaran, pengaturan sistem, kontrol sinyal dan komunikasi serial antara sirkuit periperal pada AVR Mikrikontroler Atmega128. Fungsi spesial tergantung pada status periperal dan komponen sistemnya. Jika port I/O berfungsi sebagai I/O digital umum, maka telah memiliki fungsi read-modify-write dan bisa dikendalikan pada pin port dalam unit bit.
Secara umum, AVR dapat terbagi menjadi 4 kelas, yaitu keluarga ATtiny, keluarga AT90Sxx, keluarga AT-Mega, dan AT86RFxx. Pada dasarnya yang membedakan masing-masing kelas adalah memori, peripheral, dan fungsinya. Dari segi arsitektur dan instruksi yang digunakan, bisa dikatakan hampir sama. Semua jenis AVR dilengkapi dengan flash memori sebagai memori program. Kapasitas dari flash memori ini berbeda antara chip yang satu dengan chip yang lain. Tergantung dari jenis IC yang digunakan. Untuk flash memori yang paling kecil adalah 1 kbytes (ATtiny11, ATtiny12, dan ATtiny15) dan paling besar adalah 128 kbytes (AT-Mega128).

Register
Register merupakan alat penyimpanan kecil yang mempunyai kecepatan akses cukup tinggi, yang digunakan untuk menyimpan data dan instruksi yang sedang diproses, sementara data dan instruksi lainnya yang menunggu giliran untuk diproses masih disimpan di dalam memori utama. Setiap register dapat menyimpan satu bilangan hingga mencapai jumlah maksimum tertentu tergantung pada ukurannya. Register-register dapat dibaca dan ditulis dengan kecepatan tinggi karena berada pada CPU.


Lanjut pada program, perhatikan program berikut:
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
/* Replace with your application code */
int x, length=0xFF;
DDRD = 0xFF;
while (1)
{
for (x = 0; x < length; x++)
{
PORTD = x;
_delay_ms(100);
}

}
program diatas ialah untuk menampilkan led yang merepresentasikan pergeseran nilai logika. Kondisi media tidak menyala, dan kemudian sambungkan PORTD ke LED modul yang terdapat pada perangkat . 
Kode Program yang dituliskan sebenenarnya ialah untuk menampilkan led yang mempresentasikan pergeseran nilai logika. Dimana length adalah jumlah panjang atau banyak LED yang akan menyala, length yang dideklarasikan ialah 0xFF artinya LED0 akan menyala sampai LED7. Kemudian, DDRD berfungsi untuk penguat atau penerang LED dengan 0xFF yang berarti LED akan diperterang sampai LED7. Sedangkan delay_ms ini merupakan kecepatan pergeseran LED, disini ditetapkan pergeseran sebesar 100ms.

Program selanjutnya ditujukan untuk memanfaatkan nilai input dari sebuah tombol sebagai nilai parameter untuk menyalakan sebuah LED.  sambungan pada sebelumnya tetap tersambung antara PORTD yaitu LED0-LED7 dan LED namun,  kali ini membutuhkan modul Switch. Modul switch pada PIN BT0-BT7 dihubungkan dengan PORTE pada ATMEGA128 MCU Module. Kode program dapat dilihat pada listing program percobaan berikut:
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
/* Replace with your application code */
DDRE = 0x00; 
PORTE = 0xFF; /* Pull-Up Internal
DDRD = 0xFF;
while (1)
{
PORTD = PINE;
_delay_ms(100);
}
return 0;

}


Pertama-tama ialah menginisialisasi port. Inisialisasi Port berfungsi untuk memilih fungsi port sebagai input atau sebagai output. Pada konfigurasi port sebagai output dapat dipilih pada saat awal setelah reset kondisi port berlogika 1 atau 0, sedangkan pada konfigurasi port sebagi input terdapat dua pilihan yaitu kondisi pin input toggle state atau pull-up, maka sebaiknya dipilih pull up untuk memberi default pada input selalu berlogika 1. Setiap port berjumlah 8 bit, konfigurasi dari port dapat diatur sesuai dengan kebutuhan. Pengaturan konfigurasi dapat dilakukan perbit, jadi dalam satu port dapat difungsikan sebagi input dan output dengan nilai default-nya berbeda – beda. Dalam percobaan ini PORTE dijadikan sebagail pull-up internal dan dimanfaatkan nilai inputan pada modul switch PIN BT0-BT7  untuk mengatur nyala LED. Sementara itu, PORTD dijadikan sebagai port output untuk menampilkan inputan dari modul switch PINE BT0-BT7 yang dihubungkan pada LED. Output dari program ini ialah nyala LED sedangkan waktu delay yang ditetapkan masih 100ms.

0 comments:

Post a Comment

http://www.resepkuekeringku.com/2014/11/resep-donat-empuk-ala-dunkin-donut.html http://www.resepkuekeringku.com/2015/03/resep-kue-cubit-coklat-enak-dan-sederhana.html http://www.resepkuekeringku.com/2014/10/resep-donat-kentang-empuk-lembut-dan-enak.html http://www.resepkuekeringku.com/2014/07/resep-es-krim-goreng-coklat-kriuk-mudah-dan-sederhana-dengan-saus-strawberry.html http://www.resepkuekeringku.com/2014/06/resep-kue-es-krim-goreng-enak-dan-mudah.html http://www.resepkuekeringku.com/2014/09/resep-bolu-karamel-panggang-sarang-semut-lembut.html