8×8 Dot Matrix Board Kullanımı

Evet, bir başka proje ile karşınızdayız. Bu sefer 8×8 Dot Matrix Board ekipmanını Unomuza nasıl bağlarız ve nasıl çalıştırırız bunu göreceğiz arkadaşlar.

Öncelikle ben bu çalışma sırasında komplex bir devre olmadığı için breadboard kullanmadım ama siz arzu ederseniz tabi ki kullanabilirsiniz.

İhtiyacınız olan şeyler:
1 Adet Arduino Uno
1 Adet 8×8 Dot Matrix Board
5 Adet Dişi – Erkek Jumber Kablo (Elinizde yoksa 5 Adet Erkek – Erkek ile 5 Adet Dişi-Dişi kabloyu birbirlerine bağlayarak elde edebilirsiniz)
Birazcık binary sayı sistemi bilgisi

8x8 Dot Matrix Devresi

Şimdi devremizi hazırlamak için matriks kartımızdaki VCC çıkışını 5V çıkışına, GND çıkışını kartımızdaki herhangi bir GND çıkışına, DIN çıkışını 13 nolu pine, CS çıkışını 12 nolu pine ve CLK çıkışını 11 nolu pine bağlıyoruz. Devremiz hazırsa usb bağlantısı ile Unomuzu programlamaya geçebiliriz. Biraz ön bilgi verecek olursam 8×8 dot matrix board binary sayı sistemi ile çalışmakta arkadaşlar, ancak biz kodlarken on altılı sayı sistemine göre kodluyoruz. Ledin yanması için 1 sönük kalması içinse karta 0 yollamalıyız. 64 adet led bulunan kartta her satır için on altılı sayı sisteminde tek bir komut yani toplamda 8 adet komut yolluyoruz. Örneğin:

Basit bir gülen yüz çizelim
0 1 1 1 1 1 1 0
1 0 0 0 0 0 0 1
1 0 1 0 0 1 0 1
1 0 0 0 0 0 0 1
1 0 1 0 0 1 0 1
1 0 0 1 1 0 0 1
1 0 0 0 0 0 0 1
0 1 1 1 1 1 1 0

Evet şimdi her satırı ayrı ayrı on altılı sayı sistemine çevireceğimizi söylemiştim. şeklimizin on altılı sayı siteminde karşılığı şu oluyor:
(On altılı sayı sisteminde dokuza kadar sayılar aynıdır ve dokuzdan sonra 10 A, 11 B, 12 C, 13 D, 14 E ve 15 F ile sembolize edilir.)
0x7E
0x81
0xA5
0x81
0xA5
0x99
0x81
0x7E

İşte 8×8 dot matrix boardumuza {0x7E,0x81,0xA5,0x81,0xA5,0x99,0x81,0x7E} komutunu verdiğimizde çizdiğimiz gülen yüz karşımıza çıkacak. Şimdi ekranda tek bir görüntüden fazlasını göstermek istediğimiz için bunu iki boyutlu bir dizi olarak tanımlıyoruz ve birinci boyutuna göstereceğimiz ekran sayısını ikinci boyutuna ise 8 (çünkü kartımızda 8 sütun led var ve biz her komutumuzda zaten 1 satırı kodlamış oluyoruz) yazıyoruz. Örneğin benim yaptığım “:) SENİ SEVİYORUM ♥ ♥ ♥ ” çalışması için 22 karaktere ihtiyacım var. (Boşlukları ve en sonda hepsinin söneceğini de hesaba katıyoruz).


Kod Kısmı:

unsigned char i;
unsigned char j;
int Max7219_pinCLK = 11;
int Max7219_pinCS = 12;
int Max7219_pinDIN = 13;

unsigned char disp1[22][8]={ //Eğer 22 den farklı sayıda ekran olan bir şey yapacaksanız 22 yi değişmeniz gerekir
{0x7E,0x81,0xA5,0x81,0xA5,0x99,0x81,0x7E},//Gülen Yüz
{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,},//KARANLIK
{0x0,0x1E,0x20,0x20,0x3E,0x2,0x2,0x3C},//S
{0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x7C},//E
{0x0,0x42,0x62,0x52,0x4A,0x46,0x42,0x0},//N
{0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x7C},//I
{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,},//KARANLIK
{0x0,0x1E,0x20,0x20,0x3E,0x2,0x2,0x3C},//S
{0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x7C},//E
{0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18},//V
{0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x7C},//I
{0x41,0x22,0x14,0x8,0x8,0x8,0x8,0x8},//Y
{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//O
{0x3C,0x22,0x22,0x22,0x3C,0x24,0x22,0x21},//R
{0x42,0x42,0x42,0x42,0x42,0x42,0x22,0x1C},//U
{0x81,0xC3,0xA5,0x99,0x81,0x81,0x81,0x81},//M
{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,},//KARANLIK
{0x0,0x66,0xFF,0xFF,0x7E,0x3C,0x18,0x0},//Kalp
{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,},//KARANLIK
{0x0,0x66,0xFF,0xFF,0x7E,0x3C,0x18,0x0},//Kalp
{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,},//KARANLIK
{0x0,0x66,0xFF,0xFF,0x7E,0x3C,0x18,0x0},//Kalp
};

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<22;j++)
{
 for(i=1;i<9;i++)
 Write_Max7219(i,disp1[j][i-1]);
delay(500);
}
}

İşte sonuç:

About Author

Sertan Deniz Saygılı

Sakarya Üniversitesi Bilgisayar Mühendisliği Öğrencisi - Arduino Bağımlısı

7 Comments

  1. Nurhak Reply

    Sertan Bey, Bu kadar genç yaşta bu gömülü sistem projeleri cidden çok etkileyici.

  2. xtal Reply

    tebrikler kardeşim güzel çalışma

  3. umit Reply

    Merhabalar;

    Eğer elimizde 8×8 Dot Matrix Board yoksa ama sadece 8*8 dot matrix varsa nasıl yaparız?

    • Sertan Deniz Saygılı Reply

      Onun örneğini de ekleyeceğim en kısa sürede ancak yoğunluktan dolayı ekleyemiyorum. Lütfen takipte kalın paylaşmaya çalışacağım…

  4. Soner Reply

    01111110=0x7F olması gerekmiyor mu?

    • Sertan Deniz Saygılı Reply

      Hayır. İkili sayı sistemindeki bir sayıyı on altılı sayı sistemine çevirirken sağdan başlayarak dörderli gruplara ayırabilir ve rahatlıkla çevirebilirsiniz.

      01111110 için bunu yapacak olursak:
      1110 ve 0111 gruplarını elde ederiz ve bunların on altılı sayı sistemindeki karşılıkları E ve 7. Dolayısıyla 0x7E oluyor. On altılı sayı sisteminde F’in ikili sayı sistemindeki karşılığı 1111 olur.

Leave a Reply