74HC595 Multiplexing

74HC595 Multiplexing yazısına geçmeden önce kullanacağımız entegre hakkında biraz bilgi edinelim: 74HC595, çip içinde bir kaydırma yazmacı ile birlikte D tipi bir mandaldan oluşan 16 pinli bir entegre’dir. Seri giriş verilerini alır ve ardından bu verileri paralel pinler aracılığıyla gönderir. Entegreyi biraz daha detaylı incelediğimizde paralel çıkışlara ek olarak seri çıkış da sağladığını görmekteyiz. Kaydırmalı yazmaç ve D mandalı için bağımsız saat girişlerine sahiptir. Bu entegre, CMOS uygulamalarında kullanılmak üzere tasarlanmış HC mantık cihazları ailesine aittir.

74HC595’in iki adet dahili register’i bulunmaktadır. Birincisi shift register’dir ve ikincisi bir storage register’dir. Veriler, seri olarak shift register’e parça parça aktarılır ancak yalnızca data latch pini aktif yüksek olduğunda storage register’ine aktarılır.

74HC595, Arduino’nuzdaki dijital çıkış pinlerinin sayısını artırmanın kolay ve ucuz bir yoludur. Bu içerikte, multiplexing(çoklama) adı verilen bir teknik kullanarak bir 74HC595 ile 16 adede kadar LED’i nasıl süreceğinizi göstereceğiz. Sonunda, 16 LED’in tümü, Arduino’nun mevcut dijital pinlerinden sadece üçünü gerektirecektir. Ayrıca buradan 74HC595 veri sayfasına bakabilirsiniz.

74HC595 Pinout Şeması

595 serisi shift register’lere bakarsanız piyasada birçok çeşidi ve modelinin mevcut olduğunu kolayca anlayabilirsiniz. Ama hepsi aynı şekilde çalışmaktadır. Aynı pin konfigürasyonuna, aynı elektriksel özelliklere, pin şemasına ve çalışma prensibine sahiptirler. Yine de biz bu yazımızda 74HC595’e odaklanacağız.

74HC595 Multiplexing 74hc595 multiplexing,arduino multiplexing,arduino ile multiplexing
74HC595

Pin Yapılandırması

Bu bölümde, tüm pinlerin Pin Açıklamaları ile birlikte çalışma ve işlevselliklerini görüyoruz.

1, 2, 3, 4, 5, 6, 7, 15 –> Çıkış pinleri
Bu sekiz pin, shift register’in çıkış pinleridir. Bu pinleri, storage register verilerini görüntülemek istediğimiz herhangi bir çevre birimine bağlamalıyız. Günümüzde yaygın olarak kullaılmakta olan alanlara örnek vermem gerekirse:

  • LED
  • Yedi Segmentli Ekranlar

Vb. diyebiliriz.

SH_CP Pini

Bu, bir 74hc595 shift register’in saat giriş pinidir. Bu pine uygulanan saat sinyalinin her pozitif geçişinde, seri giriş pininden 8 bitlik shift register’ine bir veri kaydırılır.

ST_CP Pini

Bu, bir storage register’inin aktif yüksek, saat giriş pinidir. Bu pindeki bir sinyalin pozitif geçişi, verileri çıkış pinlerine güncellemek için kullanılır.

OE Pini

Çıkış(Output) Etkinleştirme pini etkin düşüktür. Bu pin düşük olduğunda, depolama kaydındaki veriler çıkışta görünmektedir. Yüksek sinyaller uygulandığında, çıkışlar yüksek empedans uygulanması ile kapatılır.

DS Pini

Bu pin, giriş verilerinin sağlandığı seri veri giriş pinidir.

Alternatif Shift Register’ler

  • CD4035
  • CD4015
  • CD4014
  • 74LS166

74HC595 Shift Register Çalışma Prensibi

Daha önce bahsedildiği gibi dahili olarak 74HC595 shift register ve storage register gibi iki register’den oluşur. Her ikisi de 8 bit genişliğindedir. İlki, saatin her pozitif ucunda veri girişini kabul etmekten sorumludur ve veri almaya devam eder. Ancak shift register’den gelen veriler, yalnızca mandal giriş pinine aktif bir yüksek sinyal uyguladığımızda depolama kaydına aktarılmaktadır.

74HC595 Multiplexing 74hc595 multiplexing,arduino multiplexing,arduino ile multiplexing

Multiplexing Nedir?

Multiplexing, bir matris/dizide birbirine bağlanmış birçok bileşeni kontrol etmek için çok verimli bir tekniktir. Bu örnekte, yalnızca bir dizi LED’in çoğullanmasından bahsedeceğiz, ancak aynı temel ilkeler diğer çoğullanmış bileşenler (sensörler, düğmeler, vb.) için de geçerlidir.

Çoklanmış bir LED dizisinde, herhangi bir zamanda yalnızca bir sıra LED yanar. Bu, LED matrisinde görüntüleyebileceğimiz şekil türlerini sınırlayacak gibi görünüyor, ancak aslında öyle değil. Bunun nedeni, arduino’nun (veya diziye veri gönderen her neyse) her satırda o kadar hızlı geçiş yapmasıdır (saniyede yüzlerce veya binlerce kez), ardışık her satırın yanıp sönmesini algılamamamızdır.

74HC595 Multiplexing 74hc595 multiplexing,arduino multiplexing,arduino ile multiplexing
Şekil 1
74HC595 Multiplexing 74hc595 multiplexing,arduino multiplexing,arduino ile multiplexing
Şekil 2

Peki bir seferde bir satıra nasıl veri göndeririz? Bir sıraya beş volt (kırmızı) bağlayıp diğer üç sıraya toprak (mavi) bağlayıp her bir sırayı teker teker çevirirsek, şekil 1 gibi bir şey olur. Şimdi sıralardan biri + 5, sütunlardan birini toprağa bağlarız. Şekil 2’de görüldüğü gibi bu durum +5 sıra ile GND kolonunun birleşim noktasındaki LED’in yanmasına neden olacaktır. Bu şekilde, matristeki 16 LED’in her birini yalnızca sekiz kablo (dördü satırlara ve dördü sütunlara) kullanarak ayrı ayrı ele alabiliriz.

Şimdi aşağıdaki resme bakın. Sol üst köşedeki LED’i (konum 1,1) çok hızlı bir şekilde açtığımızı, ardından LED’i (2,2), sonra (3,3) ve (4,4)’te açtığımızı ve bu dördü arasında geçiş yaptığımızı hayal edin. LED’ler çok hızlı (saniyede yüzlerce kez). Bu LED’lerin dördünün de aynı anda yandığı görülecektir.

74HC595 Multiplexing 74hc595 multiplexing,arduino multiplexing,arduino ile multiplexing

74HC595 Nasıl Çalışır?

74HC595, 8 pinli bir kaydırma yazmacıdır yani shift register’dir. Kaydırma yazmaçları, aynı anda birçok girişi veya çıkışı kontrol etmek için mantık kapılarını kullanan entegrelerdi. Bunlar, Arduinodaki dijital pinler gibi, doğası gereği dijitaldirler- bu, yalnızca 0V ve 5V (düşük veya yüksek) okuyabilecekleri veya yazabilecekleri anlamına gelir, sensörlerden veya potansiyometrelerden analog verileri okumak için kullanılmamalıdırlar (bunun yerine bir mux kullanmalısız). 74HC595, Qa-Qh (veya Q0-Q7) olarak etiketlenmiş 8 çıkışa sahiptir, bu pinlerden veri okuyamaz, sadece çıkış olarak kullanılabilirler (girişleri olan bir kaydırma yazmacı arıyorsanız 74HC165’e bakın).

74HC595 Multiplexing 74hc595 multiplexing,arduino multiplexing,arduino ile multiplexing

74HC595, Arduino ile (veya seçtiğiniz mikro denetleyicinize) üç bağlantıyla kontrol edilir; bunlara veri(data) pini, mandal(latch) pini ve saat pini(clock) denir. Yukarıdaki akış şemasına bakın (şekil 1):

-ilk olarak çıkışları devre dışı bırakmak için mandal pini toprağa ayarlanır, bu şekilde 74HC595’e yeni veriler gönderirken çıkış pimleri değişmez
-Bir sonraki yeni veri, saat pimine darbe vurarak ve her yeni veri baytını veri piminden bit bit göndererek seri olarak 74HC595’e gönderilir. Arduino, kütüphanelerinde sizin için bununla ilgilenen shiftOut adlı kullanışlı bir fonksiyona sahiptir.
-son olarak, mandal pinini yükseğe ayarlayın. Bu, yeni verilerinizi tüm çıkış pinlerine bir kerede gönderir (paralel çıkış).

Bu içerikte size bir 74HC595 ile 4×4 LED matrisini nasıl kontrol edeceğinizi göstereceğiz. Bir önceki adımda, 4×4 LED matrisini sadece 8 pin (sıralar için dördü ve sütunlar için dördü) kullanarak kontrol etmenin mümkün olduğunu gösterdik. Sonraki adımlarda size 4×4 LED matrisini 74HC595’in 8 çıkış pinine nasıl bağlayacağınızı ve her şeyi Arduino ile nasıl süreceğinizi göstereceğiz.

74HC595 zincirleme bağlayarak çıktılarınızı daha da genişletmek mümkündür, ancak bu, bu öğreticinin kapsamı dışındadır. Bu yazıyı bitirdikten sonra göz atmanızı öneririz:

Atmega8 ile 74HC595 zincirleme bağlamak.

Devre Şeması

74HC595 Multiplexing 74hc595 multiplexing,arduino multiplexing,arduino ile multiplexing
Devre Şeması

Yukarıdaki resim, LED matrisi ve 74HC595 devresinin şemasını göstermektedir.

Arduino74HC595
A0Saat (Clock) Pini (pin 11)
A1Mandal (Latch) Pini (pin 12)
A2Veri (Data) Pini (pin 14)
Arduino 74HC595 Bağlantıları

Bununla birlikte, bu entegre yalnızca 0 veya 5V çıkış verir ve pin başına 70mA’ya kadar çıkış verebilir. Bu, LED’lere zarar vermemek için akım sınırlayıcı dirençler kullanmamız gerektiği anlamına gelir. Şematikte LED matrisinin katotlarına bağlı dirençleri bulabilirsiniz.

74HC595 Multiplexing 74hc595 multiplexing,arduino multiplexing,arduino ile multiplexing
Dirençler 1, 2, 3, 4 olarak işaretlenmiştir.

Kullandığımız LED’lerin özelliklerinden:
Maksimum ileri akım: 30mA
İleri voltaj: 3.2V

V = IR’den bu maksimum değerleri elde etmek için gereken direnci hesaplayabilirsiniz, ya da sizin için hazırladığımız buradaki Ohm Kanunu hesaplama aracını kullanabilirsiniz.:
direnç = (5V-3.2V) / (0.03A)
= 60Ω

Aslında 60Ω direnç kullanmak iyi bir fikir değil, LED’lere zarar verebilirsiniz. Ayrıca 74HC595’in çıkış pini başına sadece 70mA’ya kadar kaynak yapabileceği gerçeğini de hesaba katmamız gerekiyor. Çoğullama yaptığımız için, herhangi bir zamanda maksimum dört LED yanabilir (tüm sıra bir kerede yanabilir). 60Ω direnç kullanırsak, dört LED’in tümü birlikte ortak anotlarından bir kerede 120mA (30mA 4) akım çekecektir. Bu muhtemelen 74HC595’e hemen zarar vermez, ancak LED’lerin belirgin şekilde kararmasına neden olur. Bunun yerine 120Ω direnç kullanmayı seçtik; bu şekilde dört LED bir seferde sadece maksimum 60mA (15mA4) çekebilir.

Bunlar kullandığımız belirli LED’ler için örnek hesaplamalar, LED’lerinizin özelliklerine göre kendi hesaplamalarınızı yapmanız gerekecek. Ne yapacağınızdan emin değilseniz 220Ω veya daha yüksek dirençler kullanın; çok fazla direnç kullanmak LED’lerin daha az parlak olmasına neden olur, ancak zarar görmezler.

Çıkış pinleri (Qa-Qh), 74HC595’in 1-7 ve 15 numaralı pinlerinde bulunur. Dirençleri bağlantı telleri ile 4-7 pinlerine bağlayın. Erkek başlık pinlerini 1-3 ve 15 pinlerine bağlayın.

Şematikte gösterildiği gibi, pin bağlantıları aşağıdaki gibidir:

ÜST
satır 1 (veya “mavi 1”) QD(3)
satır 2 (veya “mavi 2”) QC(2)
satır 3 (veya “mavi 3”) QB(1)
satır 4 (veya “mavi 4”) QA(15)
ALT

SOL (ekranın önüne bakıyorsanız/LED’lere bakıyorsanız)
sütun 1 (veya “led gnd 4”) QH(7)
sütun 2 (veya “led gnd 3”) QG(6)
sütun 3 (veya “led gnd 2”) QF(5)
sütun 4 (veya “led gnd 1”) QE(4)
SAĞ

Üç 74HC595 veri pinini şemaya göre 0, 1 ve 2’deki arduino analog pinlerine bağlayın. 74HC595’in 8 ve 13 numaralı pinlerini arduino GND’sine ve 74HC595’in 10 ve 16 numaralı pinlerini Arduino 5V’ye bağlayın.

Arduino74HC595
A0Saat (Clock) Pini (pin 11)
A1Mandal (Latch) Pini (pin 12)
A2Veri (Data) Pini (pin 14)
Arduino 74HC595 Bağlantıları

Arduino Kodu

Aşağıdaki kodu arduinoya yükleyin ve LED’lerin doğru şekilde bağlanıp bağlanmadığını test edin. Her bir LED’in birer birer yandığını görmelisiniz, bu döngü sonsuza kadar tekrar etmeye devam edecektir.

//bu kod, 4x4 matrisindeki her bir led'i birer birer yakar

//pin bağlantıları- #define etiketi, kodunuzdaki tüm "latchPin" örneklerini A1 ile değiştirir (vb.)
#define latchPin A1
#define clockPin A0
#define dataPin A2

//döngü değişkenleri
byte i;
byte j;

//depolama değişkeni
byte dataToSend;

void setup() {
  //pinleri çıkış olarak ayarlar
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  
  for (i=0;i<4;i++){
    
    for (j=0;j<4;j++){
      
      //bit manipülasyonu
      dataToSend = (1 << (i+4)) | (15 & ~(1 << j));//preprare byte (series of 8 bits) to send to 74HC595
      //örneğin i =2, j = 3 olduğunda,
      //dataToSend = (1 << 6) | (15 & ~(1 << 3));
      //dataToSend = 01000000 | (15 & ~(00001000));
      //dataToSend = 01000000 | (15 & 11110111);
      //dataToSend = 01000000 | (15 & 11110111);
      //dataToSend = 01000000 | 00000111;
      //dataToSend = 01000111;
      //dataToSend'in ilk dört biti LED matrisinin dört satırına (anot) gider - yalnızca biri yüksek ve geri kalanı toprağa ayarlanır
      //dataToSend'in son dört biti LED matrisinin dört sütununa (katot) gider - yalnızca biri toprağa ayarlanmıştır ve geri kalanı yüksektir
      //bu, her biri bir kez yanarken i = 0 ila 3 ve j = 0 ila üç arasında geçiş yapılması anlamına gelir
      
      // Latch pinini düşük ayarla, böylece LED'ler bit gönderirken değişmez
      digitalWrite(latchPin, LOW);
      // dataToSend bitlerini 74HC595'e kaydırır
      shiftOut(dataPin, clockPin, LSBFIRST, dataToSend);
      //Latch pinini yüksek ayarlar - bu, LED'lerin yanması için çıkışlara veri gönderir
      digitalWrite(latchPin, HIGH);
      
      delay(500);
    }
  }
  
}