Switch LED Menggunakan Button Berbasis Mikrokontroller AT MEGA 32
1. Teori [kembali]
LED
Light Emitting Diode atau sering disingkat dengan LED adalah komponen elektronika yang dapat memancarkan cahaya monokromatik ketika diberikan tegangan maju. LED merupakan keluarga Dioda yang terbuat dari bahan semikonduktor. Warna-warna Cahaya yang dipancarkan oleh LED tergantung pada jenis bahan semikonduktor yang dipergunakannya. LED juga dapat memancarkan sinar inframerah yang tidak tampak oleh mata seperti yang sering kita jumpai pada Remote Control TV ataupun Remote Control perangkat elektronik lainnya.
LED terdiri dari sebuah chip semikonduktor yang di doping sehingga menciptakan junction P dan N. Yang dimaksud dengan proses doping dalam semikonduktor adalah proses untuk menambahkan ketidakmurnian (impurity) pada semikonduktor yang murni sehingga menghasilkan karakteristik kelistrikan yang diinginkan. Ketika LED dialiri tegangan maju atau bias forward yaitu dari Anoda (P) menuju ke Katoda (K), Kelebihan Elektron pada N-Type material akan berpindah ke wilayah yang kelebihan Hole (lubang) yaitu wilayah yang bermuatan positif (P-Type material). Saat Elektron berjumpa dengan Hole akan melepaskan photon dan memancarkan cahaya monokromatik (satu warna).
Button Switch
Push button switch (saklar tombol tekan) adalah perangkat / saklar sederhana yang berfungsi untuk menghubungkan atau memutuskan aliran arus listrik. Sebagai device penghubung atau pemutus, push button switch hanya memiliki 2 kondisi, yaitu On dan Off (1 dan 0).
AT Mega 32
AVR Atmega32 merupakan sebuah mikrokontroler low power CMOS 8 bit berdasarkan arsitektur AVR RISC. Mikrokontroler ini memiliki karakteristik sebagai berikut.
· Menggunakan arsitektur AVR RISC
- 131 perintah dengan satu clock cycle
- 32 x 8 register umum
· Data dan program memori
- 32 Kb In-System Programmable Flash
- 2 Kb SRAM
- 1 Kb In- System EEPROM
· 8 Channel 10-bit ADC
· Two Wire Interface
· USART Serial Communication
· Master/Slave SPI Serial Interface
· On-Chip Oscillator
· Watch-dog Timer
· 32 Bi-directional I/O
· Tegangan operasi 2,7 – 5,5 V
Arsitektur AVR ini menggabungkan perintah secara efektif dengan 32 register umum. Semua register tersebut langsung terhubung dengan Arithmetic Logic Unit (ALU) yang memungkinkan 2 register terpisah diproses dengan satu perintah tunggal dalam satu clock cycle. Hal ini menghasilkan kode yang efektif dan kecepatan prosesnya 10 kali lebih cepat dari pada mikrokontroler CISC biasa.
Pada postingan kali ini saya akan menampilkan bagaimana switch LED menggunakan button. Pada percobaan kali ini saya menggunakan mikrokontroller AT Mega 32 dan button sebagai switch LED.
Fungsi switch button pada percobaan ini adalah untuk merubah pola ON/OFF pada LED. Untuk rangkaiannya, saya menggunakan 8 LED dan 3 switch button, yang mana ke-3 switch button tersebut dapat menampilkan pola yang berbeda - beda. Untuk rangkaiannya dapat dilihat diatas.
Agar rangkaian diatas tersebut dapat berjalan sesuai dengan yang diinginkan, maka perlu dibuat semacam listing program untuk di-upload ke mikrokontroller yang digunakan. Pada percobaan ini, saya menggunakan CodeVision AVR untuk membuat listing program dan sebagai compiler-nya. Berikut listing program yang digunakan.
[kembali]
#include <mega32.h> //mendeklarasikan penggunaan AT Mega 128
#include <delay.h> //mendeklarasikan fungsi delay
int shift=128; //integer shift
void main(void) //fungsi utama
{
PORTA=0x00;DDRA=0xff; //PORT A sebagai output
PORTD=0x00;DDRD=0xf8; //PORT D sebagai input
while(1) //fungsi while
{
PORTA=0x00; //kondisi awal PORT A dimana semua pin dalam kondisi low
if (PIND.0==1) //fungsi if jika Pin 0 pada PORT D bernilai high
{
PORTA=shift; //perintah PORT A untuk bergeser
shift>>=1; //pergeseran setiap satu langkah
delay_ms(100); //waktu delay yang digunakan setiap pergeseran (100 ms)
if (shift<1) //fungsi if jika shift<1
{
shift=128; //pergerseran kembali ke awal
}
}
if (PIND.1==1) //fungsi if jika Pin 1 pada PORT D bernilai high
{
PORTA=0xff; //semua PORT A bernilai high
delay_ms(200); //waktu delay kondisi high (200 ms)
PORTA=0x00; //semua PORT A bernilai low
delay_ms(200); //waktu delay kondisi low (200 ms)
}
if (PIND.2==1) //fungsi if jika Pin 2 pada PORT D bernilai high
{
PORTA=0xff; //semua PORT A bernilai high (semua LED hidup)
delay_ms(100); //waktu delay kondisi high
PORTA=0x01; //LED 1 hidup
delay_ms(100); //waktu delay LED 1
PORTA=0x02; //LED 2 hidup
delay_ms(100); //waktu delay LED 2
PORTA=0x04; //LED 3 hidup
delay_ms(100); //waktu delay LED 3
PORTA=0x08; //LED 4 hidup
delay_ms(100); //waktu delay LED 4
PORTA=0x10; //LED 5 hidup
delay_ms(100); //waktu delay LED 5
PORTA=0x20; //LED 6 hidup
delay_ms(100); //waktu delay LED 6
PORTA=0x40; //LED 7 hidup
delay_ms(100); //waktu delay LED 7
PORTA=0x80; //LED 8 hidup
delay_ms(100); //waktu delay LED 8
PORTA=0x40; //LED 7 hidup
delay_ms(100); //waktu delay LED 7
PORTA=0x20; //LED 6 hidup
delay_ms(100); //waktu delay LED 6
PORTA=0x10; //LED 5 hidup
delay_ms(100); //waktu delay LED 5
PORTA=0x08; //LED 4 hidup
delay_ms(100); //waktu delay LED 4
PORTA=0x04; //LED 3 hidup
delay_ms(100); //waktu delay LED 3
PORTA=0x02; //LED 2 hidup
delay_ms(100); //waktu delay LED 2
PORTA=0x01; //LED 1 hidup
delay_ms(100); //waktu delay LED 1
PORTA=0x18; //LED 5 dan 4 hidup
delay_ms(100); //waktu delay LED 5 dan 4
PORTA=0x24; //LED 6 dan 3 hidup
delay_ms(100); //waktu delay LED 6 dan 3
PORTA=0x42; //LED 7 dan 2 hidup
delay_ms(100); //waktu delay LED 7 dan 2
PORTA=0x81; //LED 8 dan 1 hidup
delay_ms(100); //waktu delay LED 8 dan 1
}
}
}
#include <delay.h> //mendeklarasikan fungsi delay
int shift=128; //integer shift
void main(void) //fungsi utama
{
PORTA=0x00;DDRA=0xff; //PORT A sebagai output
PORTD=0x00;DDRD=0xf8; //PORT D sebagai input
while(1) //fungsi while
{
PORTA=0x00; //kondisi awal PORT A dimana semua pin dalam kondisi low
if (PIND.0==1) //fungsi if jika Pin 0 pada PORT D bernilai high
{
PORTA=shift; //perintah PORT A untuk bergeser
shift>>=1; //pergeseran setiap satu langkah
delay_ms(100); //waktu delay yang digunakan setiap pergeseran (100 ms)
if (shift<1) //fungsi if jika shift<1
{
shift=128; //pergerseran kembali ke awal
}
}
if (PIND.1==1) //fungsi if jika Pin 1 pada PORT D bernilai high
{
PORTA=0xff; //semua PORT A bernilai high
delay_ms(200); //waktu delay kondisi high (200 ms)
PORTA=0x00; //semua PORT A bernilai low
delay_ms(200); //waktu delay kondisi low (200 ms)
}
if (PIND.2==1) //fungsi if jika Pin 2 pada PORT D bernilai high
{
PORTA=0xff; //semua PORT A bernilai high (semua LED hidup)
delay_ms(100); //waktu delay kondisi high
PORTA=0x01; //LED 1 hidup
delay_ms(100); //waktu delay LED 1
PORTA=0x02; //LED 2 hidup
delay_ms(100); //waktu delay LED 2
PORTA=0x04; //LED 3 hidup
delay_ms(100); //waktu delay LED 3
PORTA=0x08; //LED 4 hidup
delay_ms(100); //waktu delay LED 4
PORTA=0x10; //LED 5 hidup
delay_ms(100); //waktu delay LED 5
PORTA=0x20; //LED 6 hidup
delay_ms(100); //waktu delay LED 6
PORTA=0x40; //LED 7 hidup
delay_ms(100); //waktu delay LED 7
PORTA=0x80; //LED 8 hidup
delay_ms(100); //waktu delay LED 8
PORTA=0x40; //LED 7 hidup
delay_ms(100); //waktu delay LED 7
PORTA=0x20; //LED 6 hidup
delay_ms(100); //waktu delay LED 6
PORTA=0x10; //LED 5 hidup
delay_ms(100); //waktu delay LED 5
PORTA=0x08; //LED 4 hidup
delay_ms(100); //waktu delay LED 4
PORTA=0x04; //LED 3 hidup
delay_ms(100); //waktu delay LED 3
PORTA=0x02; //LED 2 hidup
delay_ms(100); //waktu delay LED 2
PORTA=0x01; //LED 1 hidup
delay_ms(100); //waktu delay LED 1
PORTA=0x18; //LED 5 dan 4 hidup
delay_ms(100); //waktu delay LED 5 dan 4
PORTA=0x24; //LED 6 dan 3 hidup
delay_ms(100); //waktu delay LED 6 dan 3
PORTA=0x42; //LED 7 dan 2 hidup
delay_ms(100); //waktu delay LED 7 dan 2
PORTA=0x81; //LED 8 dan 1 hidup
delay_ms(100); //waktu delay LED 8 dan 1
}
}
}
[kembali]
Jika anda ingin mempelajari lebih lanjut, anda dapat mendownload rangkaian dan listing program melalui link dibawah ini.
http://www.mediafire.com/file/3dmz3q17d2ana28/16-led.rar
Semoga bermanfaat! :)
Tidak ada komentar:
Posting Komentar