Belajar AVR-LED interfice v Belajar

Category:
Minggu ini kita akan melanjutkan pembejalaran kita tentang pemrograman mikrokontroler AVR. Pada minggu ini kita akan banyak bermain-main dengan LED, antara lain membuat LED berjalan, LED dimming, dll. Tujuan dari pembuatan aplikasi di atas adalah agar kita dapat mengenal beberapa perperial dasar pada mikrokontroler AVR.
1. LED dimming
LED dimming merupakan LED yang dapat diatur tingkat kecerahannya melalui program. Untuk dapat mengatur tingkat kecerahan LED ini kita dapat menggunakan fasilitas PWM (pulse width modulation). Pada mikrokontroler AVR, PWM dapat kita buat dengan memanfaatkan periperial timer.
Pertama, buatlah sebuah project dengan menggunakan code wizard. Setting chip dan frekuensi seperti biasa. Untuk menggunakan fasilitas PWM, kita perlu melakukan pengaturan pada bagian timer. Timer yang kita gunakan kali ini adalah Timer1. Masuk ke tab Timer 1, kemudian pilih Clock Source => “System Clock”, sedangkan Clock Value => “62,500KHz”. Untuk mengaktifkan mode PWM kita harus memilih pada bagian mode, kali ini kita gunakan yang mode “Ph. correct PWM top=0x00FF”. Berarti nilai PWM yang dapat kita berikan adalah sebesar 0-255. Selanjutnya kita harus memilih keluaran PWM pada bagian Out. A dan Out. B. Pilih yang Non. Inv. (Non Inverting). Output keluaran PWM nantinya akan berada pada pin OC1A(PORTB.1) dan OC1B(PORTB.2).
Setelah semua settingan Timer1 sudah kita atur, seperti biasa anda harus menggenerate project dari code wizard tadi. Jika ada pertanyaan apakah ingin men-setting PORTB.1 dan PORTB.2 menjadi output, pilih saja YES.
Untuk memberikan besarnya nilai PWM pada pin OC1A dan OC1B anda dapat langsung memberikan nilai pada register yang bersangkutan. Contohnya seperti berikut
OCR1A = 100;
OCR1B = 255;
OCR1A = 100, berarti kita memberikan nilai 100 pada register OCR1A, sehingga besarnya duty cycle PWM pada pin OC1A (PORTB.1) menjadi = 100/255 * 100% = 39%.
Tambahkan potongan baris program berikut pada blok while(1) dan jangan lupa sertakan library delay.h pada header file. Kemudian lakukan kompilasi program dan download file HEX nya ke mikrokontroler.
int i;   
for (i=255; i>200; i-=5) {    
   OCR1A = i;
   OCR1B = i;  
   delay_ms(500);
}
Untuk menguji coba programnya, Anda dapat menghubungkan kedua pin PWM tersebut (PORTB.1 dan PORTB.2) dengan sebuah LED. Pada minimum sistem yang saya gunakan, pada PORTB sudah terhubung dengan enam buah LED yang terhubung secara aktif low. Perhatikan nyala LED pada PORTB.1 dan PORTB.2, LED akan menyala mulai dari redup dan perlahan-lahan menjadi terang.
2. Running LED
Running LED atau disebut juga LED berjalan merupakan kumpulan dari beberapa LED, namun LED tersebut menyala satu-persatu. Jika kumpulan LED tersebut dijajarkan, maka nyala dari cahaya LED akan terlihat seperti berlari/berjalan. Untuk membuat aplikasi running LED ini sangat mudah, kita dapat memanfaatkan perintah pergeseran bit yang terdapat pada bahasa C. Kali ini saya gunakan 6 buah LED yang terhubung ke PORTB secara aktif low. Nantinya saya akan membuat LED tersebut nyala secara bergantian dari PORTB.0 ke PORTB.1, dst kemudian kembali lagi ke PORTB.4 ke PORTB.3, dst. Nyala LED tersebut akan bergantian secara terus menerus.
Buatlah sebuah project baru dengan konfigurasi PORTB sebagai output semua. Selanjutnya tambahkan baris program berikut pada blok while(1).
 int i;         
 unsigned char dataLed; 
 dataLed = 0b000001;  
 PORTB = ~dataLed;   
 delay_ms(500);
 for (i=0; i<5; i++) {
    dataLed = dataLed<<1;  
    PORTB = ~dataLed;
    delay_ms(500); 
}  
for (i=0; i<4; i++) {
    dataLed = dataLed>>1;  
    PORTB = ~dataLed;
    delay_ms(500); 
Perintah dataLed = dataLed<<1 diatas merupakan perintah untuk melakukan pergeseran bit (shift). Jika dataLed = 0b000001, kemudian dilakukan perintah shift tersebut maka dataLed akan bernilai 0b000010. Namun karena LED yang kita gunakan terhubung secara aktif low, maka kita harus membalik nilai biner dari dataLed, agar bit yang bernilai 0 menjadi 1 dan bit yang bernilai 1 menjadi 0 kemudian nilainya ditulis pada PORTB. Untuk melakukan hal tersebut digunakan perintah PORTB = ~dataLed.
Untuk menguji coba program, masukkan file hex hasil kompilasi tersebut ke mikrokontroler anda, perhatikan apa yang terjadi. LED akan menyala satu persatu secara bergantian secara terus menerus.
3. LED dimming dengan kontrol potensiometer
Aplikasi kali ini merupakan pengembangan dari aplikasi pertama. Perbedaannya kali ini redup/terangnya nyala LED di kontrol oleh potensiometer/trimpot yang terhubung ke ADC mikrokontroler. Sehingga jika kita memutar trimpot, maka nyala LED juga akan berubah.
Buatlan project baru dengan konfigurasi code wizard sama dengan aplikasi yang pertama. Namun kali ini kita menambahkan konfigurasi ADC pada code wizard. Pilih tab ADC kemudian aktifkan ADC enabled dan pilih mode 8 bits (Use 8 bits). Untuk tegangan referensi kita gunakan AVCC (5Volt).
Setelah pengaturan code wizard selesai, anda dapat meng-genarate program. Selanjutnya dapat menambahkan baris program berikut pada blok while(1).
OCR1A = read_adc(0);
delay_ms(10);
Potongan program diatas merupakan pemberian nilai pada register OCR1A, dimana nilai tersebut berasal dari hasil nilai pembacaan ADC (potensiometer atau trimpot) dengan resolusi 8 bit. Untuk menguji coba programnya, Anda dapat menghubungkan trimpot/potensiometer pada pin ADC0 (PORTC.0) disertai dengan LED yang terhubung pada pin OC1A (PORTB.1) secara aktif low seperti gambar di bawah ini
Sekian pembahasan pemrograman LED interfacing pada tutorial kali ini. Jika ada kesulitan silahkan berikan pertanyaan atau komentar pada bagian komentar di bawah ini. Anda dapat mendownload ketiga source code program diatas pada link di bawah ini.

0 Responses to "Belajar AVR-LED interfice v Belajar"

Posting Komentar

Next Prev home