AVR saat ini lagi naik daun, ketimbang microcontroller Atmel 89Series, hal ini di sebabkan karena banyaknya fasilitas dan fitur yang ada pada microcontroller yang satu ini. Misalnya kebutuhan akan ADC, PWM, SRAM dan EEPROM, semua sudah tersedia pada AVR. Jadi tidak butuh lagi tambahan ADC, EEPROM Eksternal, sehingga kegunaan AVR lebih praktis dan efisien. di samping itu juga AVR mempunyai performance yang cukup bagus, karena AVR ini di design menggunakan teknology RISC (Reduced Instruction Set Computer). Artinya Technology kombinasi antara hardware (perangkat keras) dengan software(perangkat lunak pada microcontroller yang bertujuan untuk mempercepat proses eksekusi suatu instruksi yang di jalankan oleh CPU dalam microcontroller. Rata-rata eksekusi instruks hanya membutuhkan 1 clock oscilator saja. Jenis AVR ada 3 macam, yaitu TinyAVR, AVR (Classic AVR) dan megaAVR. Port-port pada AVR bisa di gunakan sesuai dengan kebutuhan. Misalnya port C bisa di gunakan untuk ADC (Analog to Digital Converter). bisa juga di gunakan untuk digital input output. Kapan digunakan sebagai ADC dan kapan bisa di gunakan sebagai digital input output. hal ini tergantung inisialisasi register pada AVR. Untuk posting kali ini hanya akan membahas atau sharing mengenai penggunaan port AVR sebagai digital input output.
Akses Port AVR menggunakan bahasa C
Pada artikel kami sebelumnya sudah di bahas mengenai penggunaan bahasa C untuk microcontroller. Silahkan anda baca jika mau, jika tidak lanjutkan baca bagian selanjutnya. Untuk mengakses port AVR ada 3 register yang perlu di inisialisasi, yaitu :
- Register DDRx
- Register PORTx
- Register PINx
1. Register DDRx
DDRx (x adalah port AVR yang di gunakan, misalnya DDRD, berarti yang di gunakan adalah port D). Register ini berfungsi untuk meengatur arah Pin/Port AVR. Nilai register ini sebesar 8 bit. Tiap bit mewakili tiap-tiap pin port AVR. Jika kaki / pin AVR di gunakan sebagai input, maka register ini di set "0". Apabila pin port AVR di gunakan sebagai output, maka register ini di set "1".
Contoh Port D bit 0 akan di gunakan sebagai input, sedangkan bit 1 ~ bit 7 di gunakan sebagai output, maka register DDRD di isi dengan nilai 1111 1110 (bit 1 ~ bit 7 di isi dengan 1 sedangkan bit 0 di isi dengan 0) . Dalam pemograman menggunakan bahasa C di tulis dengan sintax sebagai berikut.
DDRD = 0xFE ; atau DDRX = 0b11111110;
2. Register PORTx
PORTx (x adalah port AVR yang di gunakan, misalnya PORTD, berarti yang di gunakan adalah port D). Jika port di gunakan sebagai input, maka register ini sebagai penentu apakah port di pull up atau di floating. Pull up berarti kaki / pin port yang di buat sebagai inputan di pasang resistor sekitar 10K Ohm dan di hubungkan ke VCC, Jika di buat floating / ngambang, berarti kaki port yang di gunakan sebagai input di biar begitu saja. Selanjutnya apabila kaki / pin port di gunakan sebagai output, maka register PORTx ini menentukan kondisi port apakah high (1) atau low (0).
contoh
1. Seluruh pin Port D di jadikan sebagai input dan pin port di buat pull up. Maka pemogramannya sebagai berikut.
DDRD=0x00; //Semua Pin Port D di gunakan sebagai input
PORTD=0xff; //Semua Pin Port D di pull up
2. Seluruh pin Port D di jadikan sebagai input dan pin port di buat floating. maka pemogramannya sebagai berikut.
DDRD=0x00; //Semua Pin Port D di gunakan sebagai input
PORTD=0x00; ///Semua Pin Port D di floating / ngambang
3. Seluruh pin Port D di jadikan sebagai input. Port D bit 0 ~ bit 3 di buat pull up dan bit 4 ~ bit 7 di buat floating, maka pemogramannya sebagai berikut.
DDRD=0x00; //Semua Pin Port D di gunakan sebagai input
PORTD=0x0F; // Port D bit 0 ~ bit 3 di pull up, sedangkan bit 4 ~ bit 7 di buat floating
4. Semua pin port D di buat sebagai output dan data yang akan di kirimkan dalam bentuk biner adalah 10101010. Maka pemogramannya adalah sebagai berikut.
DDRD=0xff; // Seluruh pin Port D di gunakan sebagai output
PORTD=0xAA; //data yang di kirim ke pin Port D dalam biner adalah 10101010. artinya bit 0,2,4,6 di buat low, sedangkan bit 1,3,5,7 di buat high.
3. Register PINx
PINx (x adalah port AVR yang di gunakan, misalnya PIND, berarti yang di gunakan adalah port D).
Register ini berfungsi untuk membaca input dari pin port AVR. pembacaan kondisi inputan yang masuk ke pin-pin AVR hanya boleh di baca menggunakan register PINx, tidak boleh menggunakan register PORTx.
Contoh.
Membaca kondisi inputan yang terhubung ke PORT D dan hasilnya di kirim / di copy ke Port A, maka programnya adalah :
PORTA = PIND; // membaca kondisi inputan yang terhubung ke Port D dan hasilnya di kirim ke Port A.
TIDAK BOLEH DI TULIS
PORTA=PORTD ;
Contoh lengkap
Program berikut ini membaca kondisi inputan yang terhubung ke Port D dan hasilnya di kirim ke Port A. Artinya kondisi Port A sama dengan kondisi Port D.
#include<mega8535>
void main()
{
DDRD=0x00; //Seluruh Port D di gunakan sebagai input
PORTD=0xff; //Seluruh pin Port D di pull up
DDRA=0xff; //Seluruh pin Port A di gunakan sebagai output
while(1) //infinite loop(program akan looping terus)
{
PORTA=PIND; // nilai pada port D di kirim / copy ke Port A.
}
}
Selamat di coba, semoga bermanfaat. tunggu artikel berikutnya tentang pemograman AVR.
Similar articles














Comments
RSS feed for comments to this post