Welcome

Welcome to My Blog

Saturday, 14 January 2017

MENAMPILKAN KARAKTER PADA LED MATRIX DENGAN MENGGUNAKAN ATMEGA 8535



LED matrix merupakan sekumpulan LED yang dipasang secara kolom dan baris. Berikut gambar rangkaian LED matrix secara umum:

Rangkaian LED matrix

Berdasarkan gambar rangkaian diatas maka LED akan menyala apabila baris (R1-R8) diberi Vcc dan Kolom (C1-C8) diberi Ground. Untuk dapat menampilkan karakter yang diinginkan maka kolom atau baris harus diberi logic secara bergantian. Karena jika tidak maka LED matrix tidak dapat menampilkan karakter tertentu. Sebagai contoh untuk menampilkan angka 0 maka pada LED matrix akan seperti gambar berikut:

Angka 0 pada LED matrix

Kita misalkan kolom adalah anoda dan baris adalah katoda pada LED. Pertama-tama, kolom A0 diberi logic 1, dan baris B0-B7 diberi logic 1, sehingga semua LED pada kolom A0 mati. Selanjutnya kolom A1, sama seperti kolom A0. Lalu saat giliran kolom A2 diberi logic 1, maka baris B0-B7 diberikan logic sebagai berikut berurutan dari B0-B7, 00111110. Lalu A3 diberi logic 1, maka baris B0-B7 diberi logic, 01000001, dan seterusnya hingga A7.

Wiring untuk LED Matriks yang digunakan adalah menggunakan dua port pada ATMega8535. Berikut wiringnya :

Wiring LED Matriks pada Proteus

Untuk dapat lebih mudah membuat pola pada LED Matriks, berikut merupakan file Microsoft Excel untuk menentukan code array yang akan diinputkan pada program nantinya :
Pertama buka file yang di download dari link di atas, jika tampil tulisan “enable editing” maka klik label tersebut. Pada kotak-kotak, kamu dapat membuat pola yang kamu inginkan. Di sebelah kanan merupakan code hex untuk diinput pada array program.
Berikut adalah program LED Matrix :
/*LED MATRIKS 8x8*/

#include <mega8535.h>
#include <delay.h>
#include <matrix.h>

// Declare your global variables here
int i;
//2 Dimensional Array, x[Rows][Columns]
unsigned int data_0[2][8] = {{0x00, 0x00, 0x7C, 0x82, 0x82, 0x82, 0x7C, 0x00},{0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}}; //array tampilan angka nol
unsigned int data_1[2][8] = {{0x00, 0x00, 0x80, 0x84, 0xFE, 0x80, 0x80, 0x00},{0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}};//array tampilan angka 1
unsigned int data_2[2][8] = {{0x00, 0x00, 0xF2, 0x92, 0x92, 0x92, 0x9E, 0x00},{0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}};//array tampilan angka 2
unsigned int data_3[2][8] = {{0x00, 0x00, 0x92, 0x92, 0x92, 0x92, 0x6C, 0x00},{0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}};//array tampilan angka 3
unsigned int data_4[2][8] = {{0x00, 0x00, 0x20, 0x30, 0x28, 0x24, 0xFE, 0x00},{0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}};//array tampilan angka 4

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTA=0x00;
DDRA=0xFF;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

while (1)
      {   
      //PORTA Columns, Vcc
      //PORTC Rows, Gnd
      // Place your code here           
      display(data_0, 1000, 0);//memanggil header display(array, delay, inf)   
      display(data_1, 1000, 0);
      display(data_2, 1000, 0);
      display(data_3, 1000, 0);
      display(data_4, 1000, 0);
      }
}

Pada program diatas unsigned int data merupakan array 2d yang dibuat untuk menampilkan pola tertentu pada LED Matriks. Pada while loop dipanggil sebuah fungsi dari header yaitu display. Fungsi ini berisikan parameter array yang dipakai, delay, dan infinity delay (seterusnya memanggil fungsi). Parameter pertama kita masukkan array yang kita tentukan, parameter kedua kita masukkan delay untuk berpindah ke line selanjutnya (tidak berpengaruh ketika parameter ketiga bernilai 1), parameter ketiga untuk selamnya memanggil fungsi tersebut.
Program diatas menggunakan header buatan yaitu matrix.h, berikut adalah headernya :

void display(unsigned int data[][8], float delay, int inf){
    int j = 0, i;
   
    while(1){   
        j++;
        if(j == delay/8 && !inf){
            j = 0;
            break;
        }
       
        for(i = 0; i < 8; i++){
            PORTA = data[1][i];//scanning port
            PORTC = ~data[0][i];//nilai array yang diinputkan
            delay_ms(1);
        }   
    }      
   
}

No comments:

Post a Comment