MAX7219 7-Segmentli Display Nasıl Kullanılır
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | /* 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.

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?
merhaba, yapabilirsiniz. 1 nolu pin değil device numarasıdır. Yani bu modulden birden fazla kullanıyorsanız hangi modul olduğunu belirtiyorsunuz.