8x8dotmatrix

Arduino ile 8×8 Dot Matrix Bord Nasıl Kullanılır?

Arduinomuz ile piyasada çokça bulunan 8×8 yada 5×7 dot matrix modülünü kullanırken bilmeniz gereken bir kaç şeyden bahsedeyim. 8×8 Dot matrix modülünde 16 adet çıkış vardır tabiki bu çıkışları arduinomuza bağlayarakkullanırsak çok yazık ederiz.

 

Bundan dolayı piyasada bulabileceğiniz maxim7219 entegresi ile bu çıkışların sayısını düşürmeniz mümkündür bağlantı şeması aşağıdadır.

8x8dotmatrixMaxim

Bu şema ile arduinomuza bağlayacağınız noktaların sayısı 3 pine indirilir. Eğer 8×8 dot matrix modülünü direk bağlamak isterseniz tabiki bu da mümkün bağlantı şeması aşağıdaki gibi olacaktır.

8x8dotmatrix4

8×8 Dot Matrix te pınlerın bağlantı şeması için alttaki resme bakınız.

8x8dotmatrix5

Arduino ile bağlantısı şu şekildedir.

 

8x8dotmatrix3

Bu şekilde bağladığımız 8×8 dot matrix mdülünü ne şekilde kullanabilirsiniz sorusuna gelince her hangi bir karakter oluşturarak dot matrikte gösterebilir ,  kayan yazı yazdırabilirsiniz.

Örnek Program aşağıdadır. Program çalışıyor.

#include <FrequencyTimer2.h>
 
byte col = 0;
byte leds[8][8];
 
// pin[xx] on led matrix connected to nn on Arduino (-1 is dummy to make array start at pos 1)
int pins[17]= {-1, 5, 4, 3, 2, 14, 15, 16, 17, 13, 12, 11, 10, 9, 8, 7, 6};
 
// col[xx] of leds = pin yy on led matrix
int cols[8] = {pins[13], pins[3], pins[4], pins[10], pins[06], pins[11], pins[15], pins[16]};
 
// row[xx] of leds = pin yy on led matrix
int rows[8] = {pins[9], pins[14], pins[8], pins[12], pins[1], pins[7], pins[2], pins[5]};
 
#define DELAY 0
#define SIZE 8
extern byte leds[SIZE][SIZE];
byte world[SIZE][SIZE][2];
long density = 50;
 
void setup() {
setupLeds();
randomSeed(analogRead(5));
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
if (random(100) < density) {
world[i][j][0] = 1;
}
else {
world[i][j][0] = 0;
}
world[i][j][1] = 0;
}
}
}
 
void loop() {
// Display current generation
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
leds[i][j] = world[i][j][0];
}
}
delay(DELAY);
 
// Birth and death cycle
for (int x = 0; x < SIZE; x++) {
for (int y = 0; y < SIZE; y++) {
// Default is for cell to stay the same
world[x][y][1] = world[x][y][0];
int count = neighbours(x, y);
if (count == 3 && world[x][y][0] == 0) {
// A new cell is born
world[x][y][1] = 1;
}
if ((count < 2 || count > 3) && world[x][y][0] == 1) {
// Cell dies
world[x][y][1] = 0;
}
}
}
 
// Copy next generation into place
for (int x = 0; x < SIZE; x++) {
for (int y = 0; y < SIZE; y++) {
world[x][y][0] = world[x][y][1];
}
}
}
 
int neighbours(int x, int y) {
return world[(x + 1) % SIZE][y][0] +
world[x][(y + 1) % SIZE][0] +
world[(x + SIZE - 1) % SIZE][y][0] +
world[x][(y + SIZE - 1) % SIZE][0] +
world[(x + 1) % SIZE][(y + 1) % SIZE][0] +
world[(x + SIZE - 1) % SIZE][(y + 1) % SIZE][0] +
world[(x + SIZE - 1) % SIZE][(y + SIZE - 1) % SIZE][0] +
world[(x + 1) % SIZE][(y + SIZE - 1) % SIZE][0];
}
 
void setupLeds() {
// sets the pins as output
for (int i = 1; i <= 16; i++) {
pinMode(pins[i], OUTPUT);
}
 
// set up cols and rows
for (int i = 1; i <= 8; i++) {
digitalWrite(cols[i - 1], LOW);
}
 
for (int i = 1; i <= 8; i++) {
digitalWrite(rows[i - 1], LOW);
}
 
clearLeds();
 
// Turn off toggling of pin 11 and 3
FrequencyTimer2::disable();
// Set refresh rate (interrupt timeout period)
FrequencyTimer2::setPeriod(2000);
// Set interrupt routine to be called
FrequencyTimer2::setOnOverflow(display);
 
}
 
void clearLeds() {
// Clear display array
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
leds[i][j] = 0;
}
}
}
 
// Interrupt routine
void display() {
digitalWrite(cols[col], LOW); // Turn whole previous column off
col++;
if (col == 8) {
col = 0;
}
for (int row = 0; row < 8; row++) {
if (leds[col][7 - row] == 1) {
digitalWrite(rows[row], LOW); // Turn on this led
}
else {
digitalWrite(rows[row], HIGH); // Turn off this led
}
}
digitalWrite(cols[col], HIGH); // Turn whole column on at once (for equal lighting times)
}

Boş zamanlarda arduino ile uğraşan kendi halinde bir Öğretmen.

  
  1. Oğuzhan 30 Haziran 2017 20:10

    Merhaba kod ve şema için öncelikle teşekkürler. Bir sorum olacak cevaplarsanız sevinirim.Verdiğiniz bilgilere göre her şeyi eksiksiz yaptım. Sıkıntım şu:HELLO yazısı kayarak geçiyor fakat en alt satırda soldan 3. nokta faal değil karakterler o noktaya geldiği zaman hep sönük ve her boşluk ta sönük olan noktanın olduğu sütun soluk olarak diklemesine uzun olarak yanıyor. çözüm için beni aydınlatırsanız sevinirim. Dot matrix bağlantısı için bir kaç şema ve kod denemiştim, kayan yazı yapamamıştım. Fakat tüm ledler yanıyordu. Acaba bu demenlerde herhangi bir zarar vermiş olabilir miyim.

    Cevapla
    • Arduinocu 5 Temmuz 2017 13:49

      Dot matriksiniz bozuk yada Arduinonuzun o sirayi kontrol eden cikis pinini degistirerek deneyin

      Cevapla
  2. önder akgün 25 Ekim 2016 12:22

    iyi günler. 400 adet ledi ayrı ayrı yakmak için ardunıo uno ile birlikte kaç adet maxım7219 kullanmam gerekli acaba?

    Cevapla
  3. ÜMİT 4 Mart 2016 16:30

    Cevabınız için teşekkür ederim.Projeyi dört gözle bekliyorum.

    İyi Çalışmalar

    Cevapla
  4. ÜMİT 3 Mart 2016 17:08

    Benim bahsetmek istediğim de zaten o. İkisinde de aynı gönderiyi görmek istemiyorum. Entegresiz bağlayarak kayan yazı yapmak. Bu mümkün mü?

    Cevapla
    • Arduinocu 3 Mart 2016 17:48

      İkisi koordineli çalışmasını isterseniz o zaman 8×8 değil 16×8 lik olacaktır. herhangi bir entegre kullanılmadan bunun arduino UNO ile gerçekleştirilmesi mümkün değil ama Megada gerçekleştirilebilir. ama programlamada çok zorlanırsınız .
      Benim tavsiyem 74hc595 veya 74hc164 gibi shift register entegreleri yada Maxim 7219 entegrelerini kullanmanız . o zaman işiniz çok kolay olur .
      Yakın zamanda 2 adet 8×8 dot matrix ile yazı yazdırma ile ilgili proje paylaşacağım .

      Saygılar

      Cevapla
  5. ÜMİT 26 Şubat 2016 20:54

    Ayrıca kod wiring.h hatası veriyor.Nerde hata yapmış olabilirim,kodu tamamen kopyalayıp bile denedim.

    Cevapla
    • Mehmet Selim 28 Şubat 2016 03:53

      Eğer kütüphaneleri yüklediyseniz bu hatayı görmezsiniz.

      Cevapla
  6. ÜMİT 26 Şubat 2016 11:03

    Çift dot matrix kullanarak demeyi unutmuşum.Çift dot matrix kullandığımda arduino pinleri çakışmalı mı bağlayacağız yani?Şimdiden teşekkürler.

    Cevapla
    • Mehmet Selim 28 Şubat 2016 03:52

      Eğer entegresiz direk arduinoya bağlamak istiyorsanız Dot Matrix i paralel bağlamalısınız ama önemli olan nokta ne gönderirseniz ikisinde de aynı görüntüyüalırsınız.

      Cevapla
  7. ÜMİT 26 Şubat 2016 11:00

    Merhaba,

    Bu projeyi maxim7219 entegresi olmadan yapabilir miyiz?Yani o modülü kullanmasak da direk dot matrix ile arduino ile.Yardımlarınız için teşekkürler.

    Cevapla
    • Mehmet Selim 28 Şubat 2016 03:50

      Yapabilirsiniz. Projede gösterilen ikinci resimde gördüğünüz gibi bağlantıları yapmanız halinde kullanabilirsiniz.

      Cevapla

Bir Cevap Yazın

Time limit is exhausted. Please reload CAPTCHA.