74HC595 Shift Register ve Arduino
74HC595'in iki yerleşik kaydı vardır. Birincisi bir kaydıran yazmaç ve ikincisi bir depolama yazmacıdır. Veriler seri olarak kaydıran yazmacıya azar azar aktarılır. Ancak depolama yazmacına yalnızca veri mandalı pimi yüksek aktif olduğunda aktarır.
74HC595 Pinout Diyagramı
595 serisi vardiya yazmaçlarını ararsanız, piyasada birçok çeşidi ve modeli mevcuttur. Ama hepsi aynı şekilde çalışır. Aynı pin konfigürasyonuna, elektriksel özelliklere, pinout diyagramına ve çalışma prensibine sahiptirler. Ancak bu eğitim, daha çok texas enstrümanları tarafından SN74HC595N'ye odaklanacaktır.
Şimdi, pinout diyagramına bakın. Eğim işareti ~, bu pinlerin aktif düşük sinyallerde veya negatif mantıkta çalıştığını gösterir. Negatif mantığın ayrıntılarını daha sonra bu eğitimde inceleyeceğiz.
Çıkış pinleriyle ilgilidir, çünkü 8 bitlik bir kaydıran yazmaçtır. SN74HC595N, Q0-Q7'den sekiz çıkış pinine sahiptir.
Pin Yapılandırma Ayrıntıları
Bu bölümde, tüm pinlerin Çalışmaları ve işlevsellikleri ile birlikte Pin Açıklamasını görüyoruz .
Pin # 01, 02, 03, 04, 05, 06, 07, 15: Çıkış pinleri
Bu sekiz pin, kaydırma yazmacının çıkış pinleridir. Bu pinleri, depolama kayıt verilerini görüntülemek istediğimiz herhangi bir çevre birimine bağlamalıyız. Yaygın olarak kullanılan bileşenler LED, yedi segmentli ekranlar vb. Gibidir .
Pin # 08: GND
Bu topraklama pimidir ve devrenin toprağına bağlıdır.
Pin # 09: Q7 '
Bir kaydıran yazmacın sekizinci aşamasından çıkan tersine çevrilmemiş bir seri veri çıkışıdır. Basamaklı amaçlar için de kullanılır. Örneğin, 16 bitlik kaydıran yazmacıya ihtiyacımız varsa. İki adet 74HC595 IC'yi zincirleme bağlayabiliriz. Bunu yapmak için ~ Q7 pinini 2. 595 IC'nin Seri giriş DS pinine bağlayın. Ayrıca, her iki entegre devreye aynı saat sinyalini sağlar. Bu şekilde, iki 74HC595 tek bir 16-bit kaydıran yazmaç olarak çalışacaktır. Ayrıca, daha fazla veri genişliği elde etmek için istediğiniz kadar IC'yi bağlamak için bu işleme devam edebilirsiniz.
Pin # 10: ~ MR
Yalnızca kaydıran yazmacı sıfırlamak için kullanılan asenkron, aktif bir düşük ana sıfırlama Girişidir. 8 bitlik mandal bu girişten etkilenmez. Pim 10'da düşük bir sinyalin uygulanması, yalnızca kaydırma yazmacı kısmını sıfırlayacaktır.
Pin # 11: SH_CP
Bu, 74hc595 kaydırma yazmacının saat giriş pinidir. Bu pime uygulanan saat sinyalinin her pozitif geçişinde seri giriş pininden 8 bitlik kaydırma yazmacına bir veri kaydırılır.
Pin # 12: ST_CP
Bu, bir depolama yazmacının aktif yüksek saat giriş pinidir. Verileri çıkış pinlerine güncellemek için bu pin üzerindeki bir sinyalin pozitif geçişi kullanılır.
Pin # 13: ~ OE
Çıkışı Etkinleştirme pini aktif düşüktür. Bu pin düşük olduğunda, depolama yazmacındaki veriler çıktıda görünür. Yüksek sinyaller uygulanırken, çıkışlar yüksek empedans durumuna zorlanarak kapatılır. Ancak, seri çıkış hiç etkilenmez. Normal işlemler için düşük tutulur.
İğne # 14: DS
Bu, giriş verilerinin sağlandığı seri veri giriş pinidir.
Pin # 16: Vcc
Bu pimde pozitif bir güç kaynağı sağlanır.
74HC595 Özellikler
- 8 bitlik seri giriş ve 8 bitlik seri veya 3 durumlu paralel çıkışlara sahip bir kaydırma yazmacıdır.
- Bu IC'nin çalışma voltajı 2V ile 6V arasındadır.
- Çıkış voltajı bu IC'nin çalışma voltajına eşittir.
- CMOS mantığına dayanır ve bu nedenle 80uA gibi çok düşük bir güç tüketir.
- Çıkış kaynağı / havuz akımı 35mA'dır.
- Yüksek gürültü bağışıklığı özelliğine sahiptir.
- Daha fazla çıktı elde etmek için daha fazla IC ile pin 9 üzerinden kolayca kademelendirilebilir.
- Maksimum saat frekansı 25Mhz @ 4.5V'dir.
- Schmitt tetikleme eylemi tüm girişlerde sağlanır.
Alternatif Vardiya Kayıtları
- CD4035
- CD4015
- CD4014
- 74LS166
74HC595 nerede kullanılır?
Gömülü bir mühendisin , çok az genel amaçlı I / O pinine sahip bir mikro denetleyicinin yardımıyla yüzlerce seri veya paralel bağlı ışık yayan diyotu nasıl kontrol ettiğini hiç merak ettiniz mi? Ek olarak, 8'den fazla servo motoru kontrol etmek istiyorsunuz ve bir mikrodenetleyicinin yalnızca 2-3 GPIO pinine sahipsiniz. Bu sorunu nasıl çözeceksiniz? Bir mikrodenetleyicinin minimum GPIO pinleri ile 8 × 8, 16 × 16, 32 × 32 gibi farklı boyutlardaki bir LED Matrix'i nasıl kontrol edeceksiniz ? Basit cevap bir 74HC595 kaydıran yazmaçtır.
Uygulamaların çoğunda, LED'leri veya yedi segment, 16 segment, LED flaşör vb. Gibi diğer cihazları arabirimlendirmek için daha fazla çıkışa ihtiyacınız vardır. Bu IC'nin kullanımı çok kullanışlıdır. Çıkış pinlerini artırmak için, bu IC'yi Arduino Uno , PIC Microcontroller, Atmel, vb. Gibi farklı mikrodenetleyicilerle arabirim haline getirebilirsiniz. Bu IC'yi birden fazla çıkışın kontrol edilmesini gerektiren projeler tasarlarken kullanabilirsiniz.
74HC595 Shift Register Çalışma Prensibi
Daha önce belirtildiği gibi, dahili olarak 74HC595 kaydırma yazmacı, kaydırma yazmacı ve depolama yazmacı gibi iki kayıttan oluşur. Her ikisi de 8 bit genişliğindedir. İlki, saatin her pozitif kenarında veri girişini kabul etmekten sorumludur ve veri almaya devam eder. Ancak kaydıran yazmacıdan gelen veriler, yalnızca giriş pinini mandallamak için aktif bir yüksek sinyal uyguladığımızda depolama yazmacına aktarılır.
74HC595 Shift Register nasıl kullanılır ?
- Bir veri pini, depolama direnci saat pini ve kaydırma yazmacı saat pini içeren sekiz çıkış ve 3 giriş pini vardır. Pin8'i toprağa ve pin16'yı + 5V voltaj beslemesine bağlayın.
- Çıkış kullanılır pimi (• OE) topraklanması gerekmektedir kaydırma yazmacının çıkış pini sağlamaktır. Ana sıfırlama pimi, düşük bir sinyal ile uygulanırsa bir kaydırma yazmacının belleğini temizleyecektir. Bu yüzden yüksek tutulmalıdır.
- Pim 11'de pozitif kenar geçişi meydana geldiğinde, kaydırma yazmacı veri hattına uygulanan girişleri kabul edecektir.
- Depolama yazmacının çıkışları, D-mandalı / depolama direncinin giriş pinlerine bağlanır.
- Bu girişler, pim 12'de pozitif kenar geçişi meydana geldiğinde mandal çıkışında güncellenir.
En önemlisi, birden fazla IC'yi birlikte kademelendirmeniz gerekiyorsa, pin 9 başka bir kaydırma yazmacı IC'nin veri pinine bağlanır.
Proteus Simülasyonu
Bu video, 74HC595 Kaydırma yazmacının bir simülasyonudur. farklı seri girişler uygulayacağız ve çıktıyı çubuk grafikte kontrol edeceğiz. Öncelikle 11110000 seri girişini uygulayalım ve çıktıyı görelim. Kilitleme sinyalini 8 saniye sonra etkinleştiriyoruz çünkü her saniyede bir 74hc595'e seri veri gönderiyoruz. Bu nedenle, seri olarak kaydırmak için toplam 8 bitlik veri 8 × 1 = 8 saniye gerektirdi.Bu nedenle, 8 bit aktarıldığında 8 saniye sonra çıktı yazmacına veri yükleyebiliriz . Şimdi farklı girdi verilerini uygulayalım.
Proteus simülasyonunun videosundan da gördüğünüz gibi 8 bitlik verinin transferinden sonra mandal sinyali uyguladığımız anda seri veri girişine göre çıktı alıyoruz.
74HC595 Shift Register Arayüzü Arduino ile
Bu örnekte, 74HC595 kaydıran yazmaç IC'nin Arduino ile nasıl arayüzleneceğini göreceğiz.
Bu örnekte, bir 74HC595 kaydıran yazmaç ve Arduino ile 8 LED'i kontrol edeceğiz. 74HC595'i Arduino ile arayüzlemek için üç dijital pin kullanacağız. Üç pinin tamamı dijital çıkış pini olarak kullanılacaktır. Bu üç pim saat, veri ve mandal pimleridir.
Bağlantı şeması
Daha önce bahsettiğimiz gibi, kaydırma yazmacı, saat sinyalinin her pozitif kenar geçişinde bir bitlik veriyi seri olarak alır ve kaydırma yazmacı bu verileri tutar. Kaydırma yazmacı verilerini çıkış yazmacına veya çıkış pinlerine (Q0-Q7) göndermek için, pozitif bir kenar darbesi sağlayarak mandal pinini etkinleştirmeliyiz. Bu nedenle, Arduino'nun bir pini bir mandal sinyali sağlayacaktır.
Şimdi bu tabloya göre Arduino ile 74HC595 kaydıran yazmaç bağlantılarını yapın. Etkinleştirme pimini (~ OE) bu IC'yi etkinleştiren toprağa bağlarız. Çünkü aktif-düşük bir pintir. Bu pini bir Arduino dijital pini ile de kontrol edebiliriz. Ancak sadece Arduino Pinini kurtarmak için, doğrudan toprağa bağlayarak kablolu bir sinyal sağlamak daha iyidir.
Arduino | 74HC595 |
---|---|
D11 | Çıkış Kayıt Saati (Pin12) |
D9 | Vardiya Kayıt Saati (Pin10) |
D12 | Veri girişi (Pin14) |
GND | Çıkışı Etkinleştir (Pin13) |
+ 5V | Vardiya Kaydı Temizle (Pin10) |
+ 5V | Güç (Pin16) |
GND | Zemin (Pin8) |
LED bağlantıları
Akım sınırlayıcı dirençler üzerinden LED'li sekiz çıkış pini bağlayın. Bu devre bir miktar gecikmeyle tüm bu LED'leri sırayla açacaktır.
Arduino Kodu
Bu kod, bir 74HC595 seri kaydırma yazmacı ile LED'leri kontrol etmek içindir.
#define LATCH_pin 11 // (11) ST_CP [RCK] on 74HC595
#define CLCOK_pin 9 // (9) SH_CP [SCK] on 74HC595
#define DATA_pin 12 // (12) DS [S1] on 74HC595
void clock_signal(void){
digitalWrite(CLCOK_pin, HIGH);
delayMicroseconds(500);
digitalWrite(CLCOK_pin, LOW);
delayMicroseconds(500);
}
void latch_enable(void)
{
digitalWrite(LATCH_pin, HIGH);
delayMicroseconds(500);
digitalWrite(LATCH_pin, LOW);
}
void send_data(unsigned int data_out)
{
int i;
unsigned hold;
for (i=0 ; i<8 ; i++)
{
if ((data_out >> i) & (0x01))
digitalWrite(DATA_pin,HIGH);
else
digitalWrite(DATA_pin,LOW);
clock_signal();
}
latch_enable(); // Data finally submitted
}
void setup()
{
pinMode(LATCH_pin , OUTPUT);
pinMode(DATA_pin , OUTPUT);
pinMode(CLCOK_pin , OUTPUT);
digitalWrite(LATCH_pin, LOW); // (11) ST_CP [RCK] on 74HC595
digitalWrite(CLCOK_pin, LOW); // (9) SH_CP [SCK] on 74HC595
digitalWrite(DATA_pin, LOW); // (12) DS [S1] on 74HC595
Serial.begin(9600);
}
void loop()
{
send_data(0b00000000);
delay(1000);
send_data(0b10000000);
delay(1000);
send_data(0b01000000);
delay(1000);
send_data(0b00100000);
delay(1000);
send_data(0b00010000);
delay(1000);
send_data(0b00001000);
delay(1000);
send_data(0b00000100);
delay(1000);
send_data(0b00000010);
delay(1000);
send_data(0b00000001);
delay(1000);
}
Kod nasıl çalışır?
Arduino Dijital Pinlerini Yapılandırın
Öncelikle veri, saat ve mandal pinleri olarak kullanacağımız Arduino mikrodenetleyicisinin GPIO pinlerini tanımlamamız gerekiyor. Bu nedenle, pinleri tanımlamak için #define direktifini kullandık. Arduino'nun D12, D11 ve D9 pinlerini sırasıyla DATA_pin, LATCH_pin ve CLCOK_pin olarak kullandık.
#define LATCH_pin 11 // (11) ST_CP [RCK] on 74HC595
#define CLCOK_pin 9 // (9) SH_CP [SCK] on 74HC595
#define DATA_pin 12 // (12) DS [S1] on 74HC595
74HC494 Saat Sinyali İşlevi
İlk olarak, 74HC595 kaydırma yazmacının ST_CP pinine bir saat sinyali sağlayan bir fonksiyon açıklıyoruz. Bu clock_signal () işlevi, 1ms'lik bir zaman periyodu veya 1KHz'lik bir frekansa sahip bir saat sinyali üretir. Çünkü açık kalma süresi 500 mikrosaniye ve kapalı kalma süresi de 500 mikrosaniyedir. Saat sinyalinin açma ve kapama zamanı arasına bir gecikme eklemek için Arduino IDE derleyicisinin bir delayMicroseconds () işlevini kullandık.
void clock_signal(void){
digitalWrite(CLCOK_pin, HIGH);
delayMicroseconds(500);
digitalWrite(CLCOK_pin, LOW);
delayMicroseconds(500);
}
Unutmayın, bunu Arduino'nun PWM'sini kullanarak ve ayrıca SPI iletişimi yoluyla da başarabiliriz. Ancak basitlik adına, bir saat sinyali oluşturmak için bir gecikme yöntemi kullanıyoruz.
74HC595'e Mandal Sinyali Sağlama
Daha önce gördüğümüz gibi, seri veri giriş pini 8 bitlik verileri seri olarak 74HC595'in dahili kaydırma yazmacına aktarır. Ancak bu veriler, mandal pinine (SH_CP) pozitif bir kenar sinyali uygulamadığımız sürece çıkış pinlerine yansımaz. Bu latch_enable () rutini, bir mandal etkinleştirme sinyali sağlar. Çıkış pinlerine (Q0-Q7) veri göndermek istediğimizde, bu fonksiyonu kodun içinde çağıracağız.
void latch_enable(void)
{
digitalWrite(LATCH_pin, HIGH);
delayMicroseconds(500);
digitalWrite(LATCH_pin, LOW);
}
Verileri Seri Olarak Gönderme
Artık saat sinyali ve mandal etkinleştirme işlevlerini tanımladığımızı biliyoruz. Şimdi geriye kalan en önemli şey, 8 bitlik veriyi seri olarak 74HC595 IC'nin DS_pinine aktaracak bir fonksiyon tanımlamaktır. Bu amaçla, bir send_data (unsigned int data_out) fonksiyonu bildiriyoruz.
void send_data(unsigned int data_out)
{
int i;
unsigned hold;
for (i=0 ; i<8 ; i++)
{
if ((data_out >> i) & (0x01))
digitalWrite(DATA_pin,HIGH);
else
digitalWrite(DATA_pin,LOW);
clock_signal();
}
latch_enable(); // Data finally submitted
}
Bu işlevi send_data (2) gibi bir girdi argümanı olarak 8 bitlik verilerle çağırıyoruz. Ayrıca bu send_data (0b00000010) gibi send_data (2) yazabiliriz. bu ifade ile verileri "send_data (0b00000010)" ikili formatında işleve geçiririz.
Send_data () rutini içinde, 8 bitlik veriyi bit bit seri olarak göndermemiz gerekir. Çünkü bu işlev data_out değişkeniyle 8 bitlik verileri kabul eder. Bu 8 bitlik veriyi seri olarak göndermek için, sol kaydırma operatörünü ve mantıksal AND geçidini kullanıyoruz. Veriler 8 bit genişliğinde olduğu için "For" döngüsü 8 kez yürütülür. Ayrıca, 1 bitlik Data_pin gönderdikten sonra clock_signal () işlevini de çağırıyoruz. Çünkü veri geçişi yalnızca saatin pozitif kenarında gerçekleşir. Tüm 8 biti kaydıran yazmacıya aktardıktan sonra, latch_enable işlev çağrısı verileri çıkış pinlerine taşır.
Seri veri iletimi, veri aktarımını ilk önce en önemli bit ile başlatır ve sonunda LSB aktarımları başlar.
Kurulum
Setup () kodunun içinde dijital çıkış pinleri olarak D12, D11 ve D9 dijital pinlerini başlatıyoruz. pinMode () işlevi, pic mikro denetleyici pinlerini bir çıkış veya giriş olarak yapılandırmak için kullanılır.
pinMode(LATCH_pin , OUTPUT);
pinMode(DATA_pin , OUTPUT);
pinMode(CLCOK_pin , OUTPUT);
digitalWrite(LATCH_pin, LOW); // (11) ST_CP [RCK] on 74HC595
digitalWrite(CLCOK_pin, LOW); // (9) SH_CP [SCK] on 74HC595
digitalWrite(DATA_pin, LOW); // (12) DS [S1] on 74HC595
Sonunda, gösteri amacıyla, sekiz LED'i sırayla yakmak için veri gönderiyoruz. Q0-Q7'den başlayarak. Bu satırlardan da görebileceğiniz gibi, başlangıçta MSB'yi bir ve diğer tüm bitleri sıfır olarak gönderiyoruz. Ancak Q0 pininde görünecek ve pinlerin geri kalanı sıfır olacaktır. Benzer şekilde, diğer pinlerde 1000 ms'lik bir gecikmeyle mantık yüksek görünür.
send_data(0b00000000);
delay(1000);
send_data(0b10000000);
delay(1000);
send_data(0b01000000);
delay(1000);
send_data(0b00100000);
delay(1000);
send_data(0b00010000);
delay(1000);
send_data(0b00001000);
delay(1000);
send_data(0b00000100);
delay(1000);
send_data(0b00000010);
delay(1000);
send_data(0b00000001);
delay(1000);
Demo
SN74HC595 Uygulamaları
Bu IC çok sayıda uygulamaya sahiptir ve bilgisayar çevre birimleri, Aletler, vb. Gibi çok çeşitli ürünlerde kullanılmaktadır. Aşağıda birkaç uygulama listelenmiştir:
- Verileri uzun süre tutma
- Seriden Paralel Veriye Dönüştürme
- Genel Amaçlı Mantık
- LED'leri kontrol etme