8×8 Led Matrix Şekil Çizdirme

0
5305
8x8 Led Matrix Şekil Çizdirme
8x8 Led Matrix Şekil Çizdirme

8×8 Led Matrix Şekil Çizdirme

Led kabinlerin matrix yapıda (üst üste ve yan yana) dizilmesiyle led ekran oluşturulur. Bir led ekranın toplam alanı, boyutları ve en/boy oranı bu aşamada belirlenir. Led ekranı oluşturan temel birimler Kabin, metal taşıyıcı konstrüksiyon (kabinleri bir arada tutar), güç/sinyal kabloları, kontrol bilgisayarı (veya özel görüntü aktarıcılar) ve güç dağıtım panosudur. 8*8 LED matrix display modülleri piyasada yaygın olarak kullanılır ve Arduino ile bağlantısı çok kolaydır.

Kullanılan Malzemeler

  • Bir adet Arduino Uno kartı,
  • Bir adet MAX7219 entegreli 8*8 LED Display modülü,
  • Bir adet 5 volt güç kaynağı.

Tasarım

LED matrisler seri ve paralel olarak iki şekilde mikrodenetleyici tarafından sürülebilir. Biz bu uygulamada led matrisi seri bir şekilde süreceğiz. Bunun için 3 adet veri kablosuna ihtiyacımız var. Seri bir şekilde sürülmüş led’ler satır-satır veya sütun-sütun okuma yapar.

Projemizde MAX7219 seri arayüze sahip 8-digit led display sürücü entegresini Arduino ile birleştirip kalp desenini görüntü çıktısı olarak almaya çalışacağız. MAX7219 seri giriş/çıkışlı ortak katot bağlantılı sürücü ile 64 adet led kontrol edilebilir. Proje geliştiriciler için kolaylık olsun diye piyasada MAX7219 entegresi ile led display’in birlikte monte edildiği hazır modüller bulunmaktadır.

8x8 Led Matrix Şekil Çizdirme
8×8 Led Matrix Şekil Çizdirme

Modülün çalışma gerilimi DC 4.7V – 5.3V arasındadır ve çalışma akımı 320mA, maksimum çalışma akımı ise 2A’dir. Modülün 5 adet ucu vardır. Bunlar; VCC, GND, DIN, CS, CLK‘dir. Aşağıdaki sıralamada Arduino ile modül arasındaki bağlantıları görebilirsiniz.

  • 8×8 LED Matrix DIN, Arduino pin 8,
  • 8×8 LED Matrix X, Arduino pin 9,
  • 8×8 LED Matrix CLK, Arduino pin 10,
  • 8×8 LED Matrix VCC, Harici güç kaynağı 5 volt pozitif (VCC),
  • 8×8 LED Matrix GND, Harici güç kaynağı negatif (GND).

Kodlama

Programda sayaç için kullanmak üzere iki adet değişken tanımlıyoruz; i, j. Modül ve Arduino bağlantıları için gerekli olan CLK, CS ve DIN bağlantıların, tanımladıktan sonra kalp desenini çizmek için 8 sütun 19 satırlı dispi dizini belirtiyoruz. Hareketli bir desen oluşsun diye Write_Max7219_byte fonksiyonunu kullanarak led’leri birer birer kaydırarak yakıyoruz. CLCK sistemin seri bağlantılı saati, CS çip seçme pini, DIN veri giriş ucudur. Eğer CS ucuna lojik-0 yani LOW verisi yazılırsa veri kaydırması yapılır. CS low olduğu takdirde saat tetiklenir ve CLK pini aktif hale gelir. CLK ucunun aktif edilmesiyle DIN pininden veri girişi gerçekleşir. Gerçekleştirilen döngülerle display led’leri deseni oluşturacak şekilde kaydırılır ve yakılıp söndürülür.

unsigned char i; // değişken 1

unsigned char j;  // değişken 2

 

int Max7219_pinCLK = 10; // CLK PİNİ

int Max7219_pinCS = 9; // CS PİNİ

int Max7219_pinDIN = 8; // DIN PİNİ

 

unsigned char disp1[19][8]={

  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // KALP DESENİ

  0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 

  0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 

  0x00, 0x00, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 

  0x00, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 

  0x40, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 

  0x60, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 

  0x60, 0x90, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 

  0x60, 0x90, 0x88, 0x40, 0x40, 0x00, 0x00, 0x00, 

  0x60, 0x90, 0x88, 0x44, 0x40, 0x00, 0x00, 0x00, 

  0x60, 0x90, 0x88, 0x44, 0x44, 0x00, 0x00, 0x00, 

  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x00, 0x00, 

  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x00, 

  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x20, 

  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x60, 

  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x90, 0x60, 

  0x60, 0x90, 0x88, 0x44, 0x44, 0x88, 0x90, 0x60, // KALP DESENİ

 

};

 

void Write_Max7219_byte(unsigned char DATA) 

{   

  unsigned char i;

  digitalWrite(Max7219_pinCS,LOW);  

  for(i=8;i>=1;i--)

  {    

    digitalWrite(Max7219_pinCLK,LOW);

    digitalWrite(Max7219_pinDIN,DATA&0x80);

    DATA = DATA<<1;

    digitalWrite(Max7219_pinCLK,HIGH);

  }                                 

}

 

void Write_Max7219(unsigned char address,unsigned char dat)

{

  digitalWrite(Max7219_pinCS,LOW);

  Write_Max7219_byte(address);          

  Write_Max7219_byte(dat);               

  digitalWrite(Max7219_pinCS,HIGH);

}

 

void Init_MAX7219(void)

{

  Write_Max7219(0x09, 0x00);      

  Write_Max7219(0x0a, 0x03);      

  Write_Max7219(0x0b, 0x07);       

  Write_Max7219(0x0c, 0x01);      

  Write_Max7219(0x0f, 0x00);      

}

 

void setup()

{

 

  pinMode(Max7219_pinCLK,OUTPUT);

  pinMode(Max7219_pinCS,OUTPUT);

  pinMode(Max7219_pinDIN,OUTPUT);

  delay(50);

  Init_MAX7219();

}

 

void loop()

{ 

  for(j=0;j<19;j++)

  {

    for(i=1;i<9;i++)

      Write_Max7219(i,disp1[j][i-1]);

    delay(500);

  }   

}

 

CEVAP VER

Please enter your comment!
Please enter your name here