Rangkaian Tombol Aktif-Low dan Contoh Program AVR-GCC dan Arduino


telinks_1keycircuit

Jika Rangkaian LED Aktif-Low dan LED Aktif-High merupakan rangkaian sederhana dalam eksperimen mikrokontroler yang mewakili rangkaian output, maka rangkaian tombol aktif-low di samping adalah rangkaian sederhana yang mewakili rangkaian input dengan dua-kondisi yakni kondisi logika high dan kondisi logika low.

Rangkaian terdiri dari sebuah resistor yang diseri dengan sebuah tombol normally-opened (NO). Resistor berfungsi sebagai beban yang mencegah terjadinya hubung-singkat ketika tombol ditekan. Nilai resistor yang umum digunakan dalam level tegangan TTL adalah 10K ohm.

Prinsip kerja rangkaian sangat sederhana. Ketika tombol tidak ditekan, maka output berlogika 1 (HIGH). Dan ketika tombol ditekan, maka output berlogika 0 (LOW). Dengan rangkaian sederhana ini, kita dapat memberikan input berupa perubahan logika ke mikrokontroler dari logika 1 ke logika 0 sebagai sinyal bahwa tombol ditekan. Program mikrokontroler bertugas mendeteksi perubahan logika tersebut dan menjalankan aksi sesuai fungsi tombol tersebut. Pada bagian akhir tulisan ini akan diberikan contoh program sederhana pendeteksian penekanan tombol dengan aksi sederhana yakni menyalakan LED ketika tombol ditekan.

Bouncing Pada Tombol

Sesaat ketika tombol ditekan, ada kondisi dimana kontak tombol belum stabil dan oleh karenanya menghasilkan output logika yang belum stabil pula. Untuk mengatasi hal itu, maka perlu diberikan delay sesaat setelah terdeteksi perubahan logika dari HIGH ke LOW, dan melakukan pengecekan lagi terhadap tombol. Jika setelah delay tombol masih LOW, maka dapat dikatakan tombol telah ditekan secara stabil.

Berikut adalah pseudo-code untuk pendeteksian penekanan tombol aktif-low.

Jika (TOMBOL=LOW)
{
  Delay_50_ms
  Selama (TOMBOL=LOW)
  {
    Lakukan_Aksi
  }
}
Resistor Pull-Up Internal Pada Mikrokontroler

telinks_1keycircuit2Port I/O pada mikrokontroler memiliki resistor pull-up yang dapat diaktifkan sehingga dapat digunakan untuk menggantikan resistor pull-up R1 pada rangkaian di atas. Dengan demikian rangkaian tombol aktif-low di atas dapat disederhanakan seperti gambar rangkaian di samping.

Pada mikrokontroler AVR, jika bit DDRx diset 1 (pin yg bersangkutan berfungsi sebagai output) dan bit PORTx diset 1 (pin yang bersangkutan berlogika 1), maka resistor pull-up internal pada pin tersebut akan aktif.

Contoh Program Pendeteksian Tombol Aktif-Low (AVR-GCC)

Pada contoh program ini, rangkaian tombol aktif-low terhubung ke PORTB.0 (PB0), dan rangkaian LED aktif-high terhubung ke PORTB.1 (PB1).

#define F_CPU 1000000UL

#include 
#include 

#define ON 1
#define OFF 0

//macro LED ON/OFF untuk LED Aktif-High
#define LED_AH(x) ((x)==(ON) ? (PORTB|=_BV(PB1)) : (PORTB&=~_BV(PB1)))

int main(void)
{
  PORTB = 0b00000001; //LED=OFF, Resistor Pull-up internal PB0 aktif
  DDRB  = 0b00000010; //PB1=OUTPUT, PB0=INPUT

  while(1)
  {
    if (bit_is_clear(PINB, PB0))      //jika PB0 = LOW (tombol ditekan)
    {
      _delay_ms(50);                  //debouncing delay

      while (bit_is_clear(PINB, PB0)) //selama tombol ditekan
      {
        LED_AH(ON);                   //LED = ON
        //...
      }

      LED_AH(OFF); //LED = OFF
    }
  }
}
Contoh Program Pendeteksian Tombol Aktif-Low (Arduino)

Pada contoh program ini, rangkaian tombol aktif-low terhubung ke pin-11, dan rangkaian LED aktif-high terhubung ke pin-13.

int TOMBOL;

void setup()
{
  pinMode(13, OUTPUT);
  pinMode(11, INPUT);
  digitalWrite(11, HIGH); //aktifkan resistor pull-up internal
}

void loop()
{
  TOMBOL = digitalRead(11);
  if (TOMBOL==LOW)
  {
    delay(50);
    while(TOMBOL==LOW)
    {
      digitalWrite(13, HIGH);
      TOMBOL = digitalRead(11);
    }
    digitalWrite(13, LOW);
  }
}

Contoh-contoh program di atas dapat ditulis dengan lebih efisien jika tujuannya hanya menyalakan LED ketika tombol ditekan. Kedua contoh program di atas dapat langsung digunakan dan dikembangkan sesuai dengan aplikasi yang Anda buat. Program ditulis dengan lebih detail agar algoritma pendeteksian penekanan tombol aktif-low dapat lebih mudah dipahami.

Catatan: Nilai delay tidak harus 50ms. Nilai tersebut dapat diganti dengan 10ms, 20ms, 100ms, silakan bereksperimen sendiri.

Teknik pendeteksian penekanan tombol yang dibahas pada tulisan ini sangat boleh jadi bukanlah teknik yang terbaik, jadi tetaplah membaca dan bereksperimen.

Selamat belajar!

Smile

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s