Bu yazımızda MAX7219 entegresine değineceğiz. Bazen sinyallerimizi görsele dökmek isteriz. Örneğin bir sıcaklık bilgisini bir ekranda görmek isteriz. Bunun için en ucuz ve basit yöntemlerden biri 7-segmentli display kullanımıdır. Tek tek satılabilirler ve bir çok farklı renk ve boyutta imal edilmişlerdir.

8-digit olarak üretilmiş 7-segmentli display modulu olan MAX7219′ un Arduino tarafından nasıl kullanılabileceğini göreceğiz.

MAX7219 Modul Bağlantı Şeması

MAX 7219 / MAX7221 entegreleri 7 segmentli display ekranları, seri giriş / çıkış ortak katot olarak sürmeye yarayan sürücüye sahiptir. 8 haneye kadar, çubuk grafik gösterimleri veya 64 ayrı LED. Çip üzerinde bulunan bir BCD kod-B kod çözücü, multipleks tarama devresi, segment ve basamaklı sürücüler ve her rakamı depolayan 8×8 statik RAM’ i vardır.

Tüm LED’ler için segment akımını ayarlamak için sadece bir harici direnç gereklidir. MAX7221, SPI, QSPI ve MICROWIRE ile uyumludur. Sadece 5 pin ile Arduino’ nuza olayca bağlayabilirsiniz. Tüm rakamlar, tüm ekranı yeniden yazmadan adresleyebilir ve güncelleyebilirsiniz. MAX 7219 / MAX7221 ayrıca kullanıcının her bir rakam için kod-B kod çözme veya kod çözme işlemlerini seçmesine izin verir.

Bu modül 150μA düşük güçte kapanma modu, analog ve dijital parlaklık kontrolü, kullanıcının 1’den 8’e kadar görüntülemesine izin veren bir scanlimit register içerir.
tüm LED’leri zorlayan rakamlar ve bir test modu var.

Max7219 modulünün Arduino ile bağlantısı

Arduino MAX7219 Modul Bağlantı Şeması

Arduino Modul Bağlantı Şeması

MAX7219 Arduino kodu

Kodunuzu yazmadan önce MAX 7219′ un Arduino kütüphanesini eklemeyi unutmayın. Aşağıdaki linkten indirebilirsiniz. Bu kütüphane sayesinde modülünüz ile kolayca habereşebileceksiniz. Fakat farklı segmentlere veri gödermek için kendi algoritmanızı kurmanız gerekmektedir.

LEDcontrol.h

/*
www.kaizen40.com

bu program max7219 entegresini kullanarak 8 adet 7-segmentli displayi sürer
*/

#include "LedControl.h"
// Arduino Pin 10 to DIN, 11 to LOAD/CS, 12 to Clk, no.of devices is 1
LedControl lc = LedControl(10,12,11,1);

//---------------------------- DEĞİŞKENLER -------------------------------//
signed long cevrim = 0;

char ekran[8] = {};                                                       // 8 display
int index = 0;

//--------------------------- EKRANI AYARLA ------------------------------//
void ekran_ayarla()
{   
  index = 0;
  for (int i = 0; i < String(cevrim).length(); i++)
  {
    char inChar = (char)String(cevrim)[i];                                // tek bir byte oku
    switch(index)
    {
      case 0:                 // 1.karakter okunduğunda
        ekran[7] = ' ';       // değer yoksa display boş gözüksün
        ekran[6] = ' ';       // değer yoksa display boş gözüksün
        ekran[5] = ' ';       // değer yoksa display boş gözüksün
        ekran[4] = ' ';       // değer yoksa display boş gözüksün
        ekran[3] = ' ';       // değer yoksa display boş gözüksün
        ekran[2] = ' ';       // değer yoksa display boş gözüksün
        ekran[1] = ' ';       // değer yoksa display boş gözüksün
        ekran[0] = inChar;
        break;
        
      case 1:                 // 2.karakter okunduğunda
        ekran[7] = ' ';       // değer yoksa display boş gözüksün
        ekran[6] = ' ';       // değer yoksa display boş gözüksün
        ekran[5] = ' ';       // değer yoksa display boş gözüksün
        ekran[4] = ' ';       // değer yoksa display boş gözüksün
        ekran[3] = ' ';       // değer yoksa display boş gözüksün
        ekran[2] = ' ';       // değer yoksa display boş gözüksün
        ekran[1] = ekran[0];  // 1.okunan katakteri 2.displaye kaydır
        ekran[0] = inChar;
        break;
        
      case 2:                 // 3.karakter okunduğunda
        ekran[7] = ' ';       // değer yoksa display boş gözüksün
        ekran[6] = ' ';       // değer yoksa display boş gözüksün
        ekran[5] = ' ';       // değer yoksa display boş gözüksün
        ekran[4] = ' ';       // değer yoksa display boş gözüksün
        ekran[3] = ' ';       // değer yoksa display boş gözüksün
        ekran[2] = ekran[1];  // 1.okunan katakteri 3.displaye kaydır
        ekran[1] = ekran[0];  // 2.okunan katakteri 2.displaye kaydır
        ekran[0] = inChar;
        break;
        
      case 3:                 // 4.karakter okunduğunda
        ekran[7] = ' ';       // değer yoksa display boş gözüksün
        ekran[6] = ' ';       // değer yoksa display boş gözüksün
        ekran[5] = ' ';       // değer yoksa display boş gözüksün
        ekran[4] = ' ';       // değer yoksa display boş gözüksün
        ekran[3] = ekran[2];  // 1.okunan katakteri 4.displaye kaydır
        ekran[2] = ekran[1];  // 2.okunan katakteri 3.displaye kaydır
        ekran[1] = ekran[0];  // 3.okunan katakteri 2.displaye kaydır
        ekran[0] = inChar;
        break;
        
      case 4:                 // 5.karakter okunduğunda
        ekran[7] = ' ';       // değer yoksa display boş gözüksün
        ekran[6] = ' ';       // değer yoksa display boş gözüksün
        ekran[5] = ' ';       // değer yoksa display boş gözüksün
        ekran[4] = ekran[3];  // 1.okunan katakteri 4.displaye kaydır
        ekran[3] = ekran[2];  // 2.okunan katakteri 3.displaye kaydır
        ekran[2] = ekran[1];  // 3.okunan katakteri 2.displaye kaydır
        ekran[1] = ekran[0];  // 4.okunan katakteri 1.displaye kaydır
        ekran[0] = inChar;
        break;
        
      case 5:                 // 6.karakter okunduğunda
        ekran[7] = ' ';       // değer yoksa display boş gözüksün
        ekran[6] = ' ';       // değer yoksa display boş gözüksün
        ekran[5] = ekran[4];  // 1.okunan katakteri 5.displaye kaydır
        ekran[4] = ekran[3];  // 2.okunan katakteri 4.displaye kaydır
        ekran[3] = ekran[2];  // 3.okunan katakteri 3.displaye kaydır
        ekran[2] = ekran[1];  // 4.okunan katakteri 2.displaye kaydır
        ekran[1] = ekran[0];  // 5.okunan katakteri 1.displaye kaydır
        ekran[0] = inChar;
        break;
        
      case 6:                 // 7.karakter okunduğunda
        ekran[7] = ' ';       // değer yoksa display boş gözüksün
        ekran[6] = ekran[5];  // 1.okunan katakteri 6.displaye kaydır
        ekran[5] = ekran[4];  // 2.okunan katakteri 5.displaye kaydır
        ekran[4] = ekran[3];  // 3.okunan katakteri 4.displaye kaydır
        ekran[3] = ekran[2];  // 4.okunan katakteri 3.displaye kaydır
        ekran[2] = ekran[1];  // 5.okunan katakteri 2.displaye kaydır
        ekran[1] = ekran[0];  // 6.okunan katakteri 1.displaye kaydır
        ekran[0] = inChar;
        break;
        
      case 7:                 // 8.karakter okunduğunda
        ekran[7] = ekran[6];  // 1.okunan katakteri 7.displaye kaydır
        ekran[6] = ekran[5];  // 2.okunan katakteri 6.displaye kaydır
        ekran[5] = ekran[4];  // 3.okunan katakteri 5.displaye kaydır
        ekran[4] = ekran[3];  // 4.okunan katakteri 4.displaye kaydır
        ekran[3] = ekran[2];  // 5.okunan katakteri 3.displaye kaydır
        ekran[2] = ekran[1];  // 6.okunan katakteri 2.displaye kaydır
        ekran[1] = ekran[0];  // 7.okunan katakteri 1.displaye kaydır
        ekran[0] = inChar;
        break;
    }
    index++;
  }
}

//--------------------------- KONFİGURASYON ------------------------------//
void setup()
{
  // Initialize the MAX7219 device
  lc.shutdown(0,false);                                                   // display i aktif et
  lc.setIntensity(0,8);                                                   // parlaklık ayarı (0 is min, 15 is max)
  lc.clearDisplay(0);                                                     // bufferı sil

  ekran_ayarla();

  for (int i = 0; i < String(cevrim).length(); i++)                       // çevrim uzunluğu kadar döngü yap
  {
    lc.setDigit(0,i,(String(ekran[i])).toInt(),false);                    // (grup no, digit no, data, point) eğer true ise point yanar
  }
}

//---------------------------- ANA PROGRAM -------------------------------//
void loop()
{
  cevrim++;
  ekran_ayarla();
  lc.clearDisplay(0);                                                     // digitlerin bufferını temizle
  delay(1000);
}

Max 7219 modüllerinden birden fazlasını birbirlerine bağlayarak birden fazlasını aynı kod üzerinden kontrol edebilirsiniz. Bunun nasıl yapıldığı ile ilerleyen zamanlarda vaktimiz olursa uygualama yapabiliriz. Ama dilerseniz yukarıdaki kodları incelerseniz zaten multi modul kullanımının nasıl olduğunu anlayabilirsiniz.

Arduino Multi MaX7219 Bağlantısı

Arduino Multi Modul Bağlantısı

Bu modülün LED Matrix modelleride vardır. Aynı şekilde onlarıda birbirlerine bağlayarak kayan yazı yapabilirsiniz.

Arduino Matrix MAX7219 Bağlantısı

Arduino MatrixModul Bağlantısı


2 yorum

Selim · 3 Ekim 2020 12:17 tarihinde

Merhabalar;

Pin bağlantılarını istediğimiz gibi yapabilir miyiz?
LedControl lc = LedControl(2,3,4,1); gibi.
Birde 1 numaralı pine hangi jumper gelecek?

    Remzi Şahinoğlu · 8 Kasım 2020 12:57 tarihinde

    merhaba, yapabilirsiniz. 1 nolu pin değil device numarasıdır. Yani bu modulden birden fazla kullanıyorsanız hangi modul olduğunu belirtiyorsunuz.

Bir yanıt yazın

Avatar placeholder

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.