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.
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ı
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.
/* 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.
Bu modülün LED Matrix modelleride vardır. Aynı şekilde onlarıda birbirlerine bağlayarak kayan yazı yapabilirsiniz.
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.