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.
