LED Berjalan
Led Berjalan dengan codevision Avr. Untuk memulai belajar program codevision AVR, biasanya di mulai dengan memprogram push button, buat program blink, membaca ADC, menampilkan di LCD dan juga memprogram LED berjalan. Hal ini di lakukan untuk mengasah logaritma cara berpikir kita dalam memprogram. Sebenarnya tulisan ini muncul karena ada yang WhatsApp, bagaimana cara memprogram led berjalan dengan codevisionAVR. Jadi teringat waktu pertama kali belajar mikrokontroller, dengan memprogram LED berjalan.
Pada program LED berjalan ini, kita akan mengontrol nya melalui push button, push button di hubungkan ke PINB.0, PINB.1 dan PINB.2. Sementara LED dihubungkan ke PORTD, jadi ada 8 LED yang akan kita control di sini. Untuk Lebih jelas nya, mari lihat pembahasan selanjut nya di bawah ini,
Rangkaian Led Berjalan

Pada rangkaian di atas, sangat jelas kita lihat kemana akan di hubungkan PUSH BUTTON sebagai input ke mikrokontroller dan LED di hubungkan ke PORTD. Ketika salah satu Push button di tekan, maka logika 0 akan di input kan ke inputan PIN nya. ketika Push button ini tidak ditekan maka PIN dalam kondisi HIGH, atau logika 1. Bagaiamana kah cara memprogram nya? yuk kita lihat pembahasan selanjut nya di bawah ini.
Program Led Berjalan dengan codeVisionAVR
Sebenarnya ada banyak cara memprogram LED ini, ada cara klasik dengan memprogram LED satu satu dengan delay waktu tertentu, tapi ada juga dengan function dan fungsi geser pada Bahasa C. Untuk mengasah logika berpikir kita, berikut adalah Program Keseleruhananya, mari kita lihat bersama-sama.
#include <mega16.h> #include <delay.h> #define SW_KIRI PINB.0 // SW_GESER = PINB.0 , GANTI VARIABLE #define SW_KANAN PINB.1 // SW_OFF = PINB.1 , GANTI VARIABLE #define SW_OFF PINB.2 // Declare your global variables here void geser_kiri(int tunda); void geser_kanan(int tunda); int hold_kiri=0; int hold_kanan=0; void main(void) { PORTD = 0X00; //kondisi awal, led padam DDRD = 0XFF; //set sebagai output PORTB = 0XFF; // set sebagai pull up DDRB = 0X00; // set portb sebagai input while (1) { // Place your code here if ( SW_KIRI == 0){ // JIKA DITEKAN PINB.0 hold_kiri = 1; // RUBAH NILAI hold_key = 1 while ( hold_kiri == 1){ geser_kiri(10); if(SW_OFF == 0){ hold_kiri = 0; PORTD=0X00; } if ( SW_KANAN == 0){ hold_kanan = 1; break; } } } if (SW_KANAN == 0){ hold_kanan = 1; // RUBAH NILAI hold_key = 1 while ( hold_kanan == 1){ geser_kanan(10); if(SW_OFF == 0){ hold_kanan = 0; PORTD=0X00; } if ( SW_KIRI == 0){ hold_kiri = 1; break; } } } } } void geser_kiri(int tunda){ int i; int led = 0x01; for ( i = 0; i < 8; i++){ PORTD = led; delay_ms(tunda); led <<=1; if ( SW_OFF == 0){ hold_kiri = 0;PORTD=0X00; break; } } } void geser_kanan(int tunda){ int i; int led = 0x80; for ( i = 0; i < 8; i++){ PORTD = led; delay_ms(tunda); led >>=1; if ( SW_OFF == 0){ hold_kanan = 0;PORTD=0X00; break; } } }
Pada Program di atas, tombol PINB.0 akan menggeser ke kiri, kemudian PINB.1 akan menggeser ke kanan, dan terakhir adalah PINB.2 untuk mematikan LED. Mungkin teman-teman penasaran, apa sih tujuan hold_kiri dan hold_kanan pada program di atas? Karena Tombol yang diguanakan mengguanakan tombol reset, maka perlu hold, agar kita cukup sekali tekan saja, led tetap berjalan.
Untuk video pengujian nya bisa teman teman lihat pada video di bawah ini,
Jika ingin respon perubahan LED lebih cepat, sebenarnya kita gunakan interupsi external pada mikrokontroller, mungkin lain waktu kita bahas.
Semoga Tulisan dapat memmbantu,
Thanks