Skip to content Skip to sidebar Skip to footer

Pemograman tombol (switch) ATmega 16 menggunakan bahasa C




Pemograman tombol (switch) ATmega 16 menggunakan bahasa C  - Pada aplikasi mikrokontroller, Tombol sering digunakan sebagi input untuk menjalankan fungsi program lain. Misal tombol a ditekan untuk menyalakan buzzer atau memutar motor DC. Tombol memiliki banyak jenis, namun yang paling sering digunakan pada aplikasi mikrokontroller ATmega 16 adalah push button switch. Partnya pun banyak ditemui dipasaran daengan harga yang sangat murah


Skematik Program

Skematik Switch 

Pada skematik program diatas tombol yang digunakan dihubungkan langsung ke ground, tanpa resistor pull up. Mengapa ? kerena pada dasarnya setiap pinout dari IC ATmega 16 sudah dilengkapi internal Pull up resistor didalamnya. Maka, tinggal diatur dalam program untuk mengaktifkan pull upnya. Saklar push button terhubung pada PORTD, nantinya akan digunakan untung menyalakan LED pada PORTB.

Program tombol terdapat beberapa cara, semua akan dibahas dibawah. Software yang digunakan adalah AVR studio 5. Bisa juga menggunakan Codevision AVR dengan menggunakan sedikit modifikasi pada �penulisan� program, namun logikanya tetap sama.
Tombol yang digunakan adalah push button (push button switch). Prinsipnya sederhana yaitu jika saklar ditekan maka saklar akan terhubung dan jika dilepas maka akan terputus kembali.

Listing program adalah seperti berikut :

Cara 1

#include <avr/io.h>         // header standard AVR
#define F_CPU 12000000UL   //  set clock 12mhz
#include <util/delay.h>   //   delay

void led (void)
{
       while (1)
       {
              PORTB=0x00;          //led nyala
              _delay_ms(1000);    // delay 1S
              PORTB=0xff;        //  LED mati
              _delay_ms(1000);
       }
}
void main (void)
{      DDRB=0xf0;; // set portd.0 - portt.3 = input
       PORTD=0xff; // mengaktifkan Pull up resistor internal
       DDRB=0xff;// set portb = output
       char kondisi;
      
       while (1)
       {
     if (PORTD==0b11111110) kondisi=1; //jika portd.0=0 (sw1 ditekan)                                             // maka kondisi =1
     if ((PORTD==0b11111111) &&(kondisi==1))kondisi=0; led(); 
      // jika saklar dilepas dan kondisi=1,kondisi=0 dan jalankan led()
                    
       }
      
}

CARA 2 (menggunakan lock)

#include <avr/io.h>         // header standard AVR
#define F_CPU 12000000UL   //  set clock 12mhz
#include <util/delay.h>   //   delay

void lock() // sub program LOck
{
       while(PIND==0b11111110){ } // sw 1 ditekan
       while(PIND==0b11111101){ } // sw 2 ditekan
       while(PIND==0b11111011){ } // sw 3 ditekan
       while(PIND==0b11110111){ } // sw 4 ditekan
};

void main (void)
{      DDRD=0xf0;; // set portd.0 - portt.3 = input
       PORTD=0xff; // mengaktifkan Pull up resistor internal
       DDRB=0xff;// set portb = output
       char kondisi;
      
       while (1)
           {
           if(PIND==0b11111110){lock();kondisi=1;}; //jika sw 1 ditekan,                                                  
                          
               while (kondisi==1)
                    
                    {
                     PORTB=0x00;          //led nyala
                     _delay_ms(1000);    // delay 1s
                     PORTB=0xff;        //  LED mati
                     _delay_ms(1000);
                     }
      
}

Cara 3 (bit_is_clear)

#include <avr/io.h>         // header standard AVR
#define F_CPU 12000000UL   //  set clock 12mhz
#include <util/delay.h>   //   delay

void led (void)
{
       while (1)
       {
              PORTB=0x00;          //led nyala
              _delay_ms(1000);    // delay 1S
              PORTB=0xff;        //  LED mati
              _delay_ms(1000);
       }
}


void main (void)
{      DDRD=0xf0;; // set portd.0 - portt.3 = input
       PORTD=0xff; // mengaktifkan Pull up resistor internal
       DDRB=0xff;// set portb = output
       char kondisi;
       while (1)
       {
    if (bit_is_clear(PIND,0)){while (bit_is_clear(PIND,0)) kondisi=0;              led(); } 
       }

}

Ketiga program diatas hanya menggunakan 1 switch sedangkan pada skema ada 4 switch. Tugas anda adalah menjalankan 3 switch lainnya secara bervariasi. Tujuannya adalah mengembangkan logika program sehingga otak semakin terasah dan terbiasa untuk �pusing�. Tetap semangat dan berusaha jangan menyerah.