Bu çalışmamızda Çin’den ucuza aldığım 4-Bit 7 parçalı LED ekran hakkında biraz konuşacağım. Bu Ekranın en güzel tarafı bağlantı kablolarının azlığı. Mutfak saati projemizi hatırlıyorum da 2 adet 0.28 inç LED ekran ile hazırladığım projenin devre kartını hazırlamak ve bir kalem kutusunun içine sığdırabilmek için ne kadar uğraşmıştım. (https://egitimsart.org/arduino-ile-mutfak-saati/). Orada Arduino ile birlikte bu displayı kullanabilmek için 74HC595 entegrelerini kullanmıştım. İki entegre, iki display kablo bağlantılarını düşünün. Belki o projeyi de yenilerim, kim bilir!

Yaklaşık 2.5×4.0 cm2 büyüklüğündeki kartın üzerinde 4 basamaklı ve arada iki noktası bulunan bir LED ekran (sanırım her bir LED 0.28 inç) ve arkada bu ekranı kontrol eden TM1637 sürücüsü bulunuyor. Bu entegre yüzünden bu kartın adı da TM1637 olarak kalmış. Okuduğum bilgilere göre fırınlarda gösterge paneli olarak kullanılmış.

board

Seri iletişim kullanıyor; 4 tane bağlantısı var En alttaki ‘GND’ ve ‘VCC’, arduinoya direkt olarak Gnd ve +5 volt hattına bağlanıyor. Sırasıyla diğer giriş ‘DIO’; veri girişi için, ‘CLK’ da saat girişi için kullanılıyor. I2C olmadığından bunu Arduino’nun  herhangi digital bacağına bağlayabiliyoruz. Ekranda onaltılık (Hexadecimal) sayı sistemi görüntülenebiliyor (Bu sayı sisteminde 16 tane karakter var: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E ve F). Ayrıca incelediğim örneklerde her bir segment, ortadaki iki nokta da dahil olarak kontrol edilebiliyor, kendi çapında bu ekran üzerinde değişik hareket gösterileri de yapılıyor. Bu arkadaşı da kullanabilmek için kütüphanesini eklemek gerekiyor. Ben en basit olanını (öyle rast geldi) seçtim. Zip dosya olarak indirip Arduino IDE’ye kaydettim ve örnek programı (TM1637 Test) çalıştırıp, onu üzerinden inceleme yaptım. Genelde eklenen kodlar anlaşılıyor.

İlk başta  Arduino seri haberleşme ve bu displayin kütüphaneleri programa çağrılıyor. Data ve Clock bağlantılarının arduino’nun hangi girişlerine bağlandığı tanımlanıyor.

Daha önceki displatlerde olduğu gibi bir nesne oluşturulup ismine ‘display’ deniyor. Bu aletle ilgili tüm komutların başına bu ‘display’ ekleniyor.

Setup kısmı tamamen boş.

uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };  :’data’ isimli bir dizi ile tüm segmentler ON yapılıyor.

uint8_t blank[] = { 0x00, 0x00, 0x00, 0x00 }; Tüm segmentlerin OFF olduğu ‘blank’ dizisi.

display.setBrightness(0x0f);  : parlaklık ayarı; en yüksekte.

setSegments(data);  : Ekrande tüm segmentler (data ayarıyla) görünüyor

data[0] = display.encodeDigit(0);           : Burada soldan itibaren ;
data[1] = display.encodeDigit(1);             basamaklara sırasıyla
data[2] = display.encodeDigit(2);            0, 1, 2, 3 sayıları atanıyor.
data[3] = display.encodeDigit(3);
0123w

23w
display.setSegments (yazdırılacak olan veri, Basamak Sayısı, Nereye yazılacak);
display.setSegments(data dizisinin 2 ve 3. elemanı, 2 basamaklı olarak, 2 numaralı bitten itibaren);

_14_w
display.showNumberDec(Yazdırılacak Sayı, önü 0 ile doldurulsun(TRUE)/boş kalsın(FALSE), kaç basamaklı yazdırılsın, Nereye yazılsın);
display.showNumberDec(14 sayısı, önü 0 ile doldurulmadan, 2 basamaklı olarak, 1 numaralı bitten itibaren);

d1__w.jpg

display.showNumberHexEx(0x’yazdırılacak hexadecimal sayı’,pozitif(veya 0) ya da negatif sayı, nü 0 ile doldurulsun(TRUE)/boş kalsın(FALSE), kaç basamaklı yazdırılsın);
display.showNumberHexEx(d1 sayısı, önü 0 ile doldurulacak şekilde, soldan iki basamaklı yazılsın )

Yukarıda ‘TRUE’ dan önceki parametre 0 veya pozitif birtam sayı olabiliyor, değeri değişmiyor. Negatif bir tamsayı yapıldığında ise ortadaki iki nokta da yanıyor. Açıkçası başka ne işe yarıyor bilmiyorum! Bir de unutmadan; buraya hiçbir parametre verilmezse sağa yanaşık yazıyor.

Ayrıca basamak parametresi yazılacak olan sayıdan küçükse sağdan başlamak üzere sayılar yazdırılıyor, basamak sınırı dışında kalan soldaki sayılar yazdırılmıyor.

display.setBrightness(k); komutu bir döngü içerisindeki k’nın artan/azalan değeri ile parlaklığı artırıp azaltıyor.

display.setBrightness(7, false); komutu ekranın parlaklığını kapatıyor.

display.setBrightness(7, true); komutu tekrar parlak hale getiriyor. parantezin içindeki sayı 7 iken en parlak, 0 iken en silik (görünebilecek şekilde) oluyor.

Adsız

display.setSegments(SEG_DONE); komutu ile başta belirlenen “done” yazısı ekrana çıkıyor. Yani SEG_DONE dizisi yazdırılıyor bu dizi oluşturulurken de 7 segment baraları kullanılmış. Yani “d” yazabilmek için B, C, D, E, G segmentleri; SEG_B, SEG_C, … şeklinde ve aralarında |(ve) kullanılarak oluşturulmuş.

 

while(1); Tüm döngüyü durduran komut. Derleyici bu komutu görünce programı olduğu şeklilde durduruyor. Yani “done” yazısı, Arduino’nun güç bağlantısı kesilmedikçe ya da reset’lenmedikçe ekranda kalıyor.

Bu displayi en yakın zamanda bir projede kullanmayı düşünüyorum.

Hoşça kalın!…

 

Arduino Kütüphanesi:

(https://www.arduinolibraries.info /libraries/tm1637)