Robotik Kodlama

Robotik Kodlama
Ana Sayfa

İLGİNİZİ ÇEKEBİLECEK LİNKLER :

shift register etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
shift register etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

4 Mayıs 2021 Salı

74HC595 Shift Register Nasıl Çalışır ? Arduino ile

 

74HC595 Shift Register Nasıl Çalışır ? Arduino ile 




Hiç kendinizi çok sayıda LED'i kontrol etmek isterken buldunuz mu? Ya da düğmeleri, sensörleri, servoları aynı anda kontrol etmek için daha fazla I / O pinine mi ihtiyacınız vardı? Pekala, Arduino pinlerine birkaç sensör bağlayabilirsiniz, ancak Arduino'nuzdaki pinleriniz hızla tükenmeye başlar.

Bunun çözümü, bir 'Vardiya Kaydı' kullanmaktır. Bir vardiya kaydı, Arduino'nuzdan (veya bu konuda herhangi bir mikrodenetleyiciden) kullanabileceğiniz I / O pinlerinin sayısını artırmanıza izin verir. Ve 74HC595 kaydıran yazmaç ('595' lakaplı) en ünlüsüdür.

595, esasen yalnızca üç giriş pini kullanarak sekiz ayrı çıkış pimini kontrol eder. Ve 8'den fazla ek I / O hattına ihtiyacınız varsa, istediğiniz kadar çok vardiya kaydını kolayca papatya dizimi yapabilir ve tonlarca I / O hattı oluşturabilirsiniz. Tüm bunlar, bit kaydırma olarak bilinen yöntemle gerçekleştirilir. Bit değiştirme hakkında daha fazla bilgi edinmek istiyorsanız, Wikipedia'daki bu kaynak paha biçilmezdir.

Vardiya Kaydı ne zaman kullanılır?

Her mikro denetleyicide sınırlı sayıda I / O pinine (GPIO) sahip olduğundan, kaydırma yazmaçları genellikle mikro denetleyicideki pinleri kaydetmek amacıyla kullanılır.

Projenizin 16 ayrı LED'i kontrol etmesi gerekiyorsa, bu normalde bir Arduino'nun 16 pini gerektirir. 16 I / O pininiz yoksa, kaydıran yazmacı burada işe yarar. Seri bağlanmış iki vardiya yazmaç ile, sadece 3 I / O pini kullanarak 16 LED'i kontrol etme görevini gerçekleştirebiliriz. Ve sadece bu değil; Birbirine zincirlediğiniz daha fazla vardiya kaydı arttıkça daha fazla pin kaydedebilirsiniz.

Bir gerçek dünya örnek kullanımları kayıt değiştirmektedir 'dir Orjinal Nintendo Kontrolörü '. Nintendo Eğlence Sisteminin ana denetleyicisinin tüm düğme basışlarını seri olarak alması gerekiyordu ve bu görevi yerine getirmek için bir basış kaydı kullanıyordu.

Nintendo-Entertainment-System-NES-Controller-FL
Fotoğraf kredisi: Wikipedia

SIPO Vs PISO Kaydırma Kayıtları

Kaydırma kayıtları, SIPO (Serial-In-Parallel-Out) veya PISO (Parallel-In-Serial-Out) olmak üzere iki temel tipte gelir. Popüler SIPO yongası 74HC595 ve PISO yongası 74HC165'tir .

İlk tür olan SIPO, LED'ler gibi çok sayıda çıkışı kontrol etmek için kullanışlıdır. İkinci tip olan PISO, düğmeler gibi çok sayıda girişi toplamak için iyidir; Yukarıda tartışıldığı gibi Orijinal Nintendo Controller'da kullanılan gibi.

74HC595 Shift Register nasıl çalışır?

595, her biri sadece 8 bit veri içeren iki yazmaç (“bellek kapsayıcıları” olarak düşünülebilir) içerir. İlki Shift Register olarak adlandırılır. Kaydırma Kaydı, sessizce girişi kabul ederek, IC devrelerinin derinliklerinde bulunur.

595'e saat darbesi uyguladığımızda iki şey olur:

  • Shift Register'daki bitler bir adım sola hareket eder. Örneğin Bit 7, daha önce bit 6'da olan değeri kabul eder, bit 6, bit 5'in değerini alır vb.
  • Shift Register'daki Bit 0, DATA pinindeki mevcut değeri kabul eder. Darbenin yükselen kenarında, veri pini yüksekse, kaydıran yazmacıya bir 1 itilir. Aksi takdirde, 0'dır.

Mandal pimi etkinleştirildiğinde, Vardiya Kaydının içeriği Depolama / Mandal Kaydı adı verilen ikinci kayda kopyalanır. Depolama Kaydının her biti , IC'nin A – Q H çıkış pinlerinden birine bağlanır , dolayısıyla genel olarak, Depolama Kaydındaki değer değiştiğinde, çıkışlar da değişir.

Bunu aşağıda gösterilen resimle daha iyi anlayabilirsiniz.

74HC595 Shift Register Çalışması
74HC595 Shift Register Çalışması



74HC595 Shift Register Pinout

595, çeşitli marka ve modellerde gelir; burada her yerde bulunan Texas Instruments SN74HC595N hakkında konuşacağız . Farklı bir tane alırsanız, veri sayfasını dikkatlice okuyun ve farklılıkları not edin.

Pinout'a bir göz atalım. İki iğnenin adlarının üzerinde bir çizgi olduğuna dikkat edin; bu onların "negatif mantık" içinde çalıştıkları anlamına gelir. Bunu biraz sonra öğreneceksin.

Pinout 74HC595 Vardiya Kaydı

GND Arduino'nun zeminine bağlanmalıdır.

VCC Arduino'daki 5V pinini bağladığımız 74HC595 shift register için güç kaynağıdır.

SER (Seri Giriş) pin, verileri kaydıran yazmacıya her seferinde biraz beslemek için kullanılır.

SRCLK (Kaydırmalı Kayıt Saati)kaydıran yazmacı için saattir. 595 yükselen kenarda saat tahriklidir. Bu, bitleri kaydıran yazmacıya kaydırmak için saatin YÜKSEK olması gerektiği anlamına gelir. Ve bitler, saatin yükselen kenarında aktarılır.

RCLK (Saati / Mandalı Kaydedin)çok önemli bir pin. YÜKSEK sürüldüğünde, Vardiya Kaydının içeriği Depolama / Mandal Kaydına kopyalanır; sonuçta çıktıda ortaya çıkıyor. Bu nedenle, mandal pimi, sonuçlarımızı çıkışta görme sürecindeki son adım olarak görülebilir, bu durumda bu LED'ler.

SRCLR (Shift Register Clear)pin, bir kerede tüm bitlerini 0 yaparak tüm Shift Register'ı sıfırlamamıza izin verir. Bu bir negatif mantık pinidir, bu yüzden bu sıfırlamayı gerçekleştirmek için; SRCLR pinini DÜŞÜK olarak ayarlamamız gerekir. Sıfırlama gerekmediğinde, bu pin YÜKSEK olmalıdır.

OE (Çıktı Etkinleştir)negatif mantıktır: Üzerindeki voltaj YÜKSEK olduğunda, çıkış pinleri devre dışı bırakılır / yüksek empedans durumuna ayarlanır ve akımın akmasına izin vermez. OE düşük voltaj aldığında, çıkış pinleri normal şekilde çalışır.

QA – QH (Çıkışı Etkinleştir) çıkış pinleridir ve LED'ler, 7 Segmentler vb. gibi bazı çıkış türlerine bağlanmalıdır.

QH 'Pin, ShiftRegister'ın 7. bitini çıkarır. 595'leri papatya zinciri şeklinde zincirleyebilmemiz için orada: Bu QH'yi başka bir 595'in SER pinine bağlarsanız ve her iki IC'ye de aynı saat sinyalini verirseniz, 16 çıkışlı tek bir IC gibi davranacaklardır. Tabii ki, bu teknik iki IC ile sınırlı değildir - eğer hepsi için yeterli güce sahipseniz, istediğiniz kadar çok sayıda IC zincirleme yapabilirsiniz.

2 adet chip için Prensip bağlantı aşağıdaki gibidir.Arduino pin girişleri programlamada çok farklı olabilir.



Kablolama - 74HC595 Shift Register'ın Arduino UNO'ya Bağlanması

Artık 74HC595'in nasıl çalıştığına dair temel bir anlayışa sahip olduğumuza göre, onu Arduino'muza bağlamaya başlayabiliriz!

Kaydırma kaydını devre tahtanıza yerleştirerek başlayın ve IC'nin her iki tarafının devre tahtasının ayrı bir tarafında olmasını sağlayın. U şeklindeki küçük çentik yukarı bakarken, pimler aşağıdaki şekilde görüldüğü gibi yukarıdan aşağıya sol tarafta 1-8 ve sağ tarafta yukarıdan aşağıya 16 - 9 aşağıdadır.

Başlamak için 16 (VCC) ve 10 (SRCLR) pinlerini Arduino'daki 5v pinine ve 8 (GND) ve 13 (OE) pinlerini Arduino'daki Gnd pinine bağlayalım. Bu, IC'yi normal çalışma modunda tutmalıdır.

Daha sonra, kaydıran yazmacını kontrol edeceğimiz üç pini bağlamamız gerekir:

  • Kaydırma yazmacının pin 11'i (SRCLK) Arduino'daki pin 6'ya
  • Kaydırma yazmacının 12 numaralı pini (RCLK) Arduino'daki 5 numaralı pime
  • Kaydırma yazmacının 14 numaralı pini (SER) Arduino'daki pim 4'e

Şimdi, tüm çıkış pinlerini LED'lerimize bağlamalıyız, akımı azaltmak için LED'lerin önüne 220Ω'luk bir direnç yerleştirilmesini ve LED'lerin katotlarının tekrar toprağa dönmesini sağlamalıyız.

LED'leri yerleştirirken sırayla bağlandıklarından emin olun, böylece QA ilk LED'e bağlanır ve QH son LED'e bağlanır, aksi takdirde kodumuz LED'leri doğru sırada yakmayacaktır!

İşiniz bittiğinde, aşağıda gösterilen resme benzer bir şeye sahip olmalısınız.

74HC595 Shift Register ile Arduino Kablolama Fritzing Bağlantıları
Arduino UNO'ya 74HC595 Vardiya Kaydını Kablolama

Arduino Kodu

Şimdi arkasına biraz kod koymaya hazırız! Arduino'nuzu bilgisayarınıza takın ve çizimi deneyin; ve sonra onu biraz ayrıntılı olarak inceleyeceğiz.

int latchPin = 5;	// Latch pin of 74HC595 is connected to Digital pin 5
int clockPin = 6;	// Clock pin of 74HC595 is connected to Digital pin 6
int dataPin = 4;	// Data pin of 74HC595 is connected to Digital pin 4

byte leds = 0;		// Variable to hold the pattern of which LEDs are currently turned on or off

/*
 * setup() - this function runs once when you turn your Arduino on
 * We initialize the serial connection with the computer
 */
void setup() 
{
  // Set all the pins of 74HC595 as OUTPUT
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
}

/*
 * loop() - this function runs over and over again
 */
void loop() 
{
  leds = 0;	// Initially turns all the LEDs off, by giving the variable 'leds' the value 0
  updateShiftRegister();
  delay(500);
  for (int i = 0; i < 8; i++)	// Turn all the LEDs ON one by one.
  {
    bitSet(leds, i);		// Set the bit that controls that LED in the variable 'leds'
    updateShiftRegister();
    delay(500);
  }
}

/*
 * updateShiftRegister() - This function sets the latchPin to low, then calls the Arduino function 'shiftOut' to shift out contents of variable 'leds' in the shift register before putting the 'latchPin' high again.
 */
void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}

Kodu Arduino'ya yükledikten sonra, çıktının aşağıdaki gibi göründüğünü görmelisiniz:

Burada programa göre ledlerin yanış sırası gönderilen veriye göre farklı olabilir.



LED'lerden birini açmak yerine kapatmak isterseniz , ' led'ler ' değişkeninde benzer bir Arduino işlevi bitClear () çağırırsınız . Bu, belirli 'led'lerin' bitini 0 olarak ayarlayacaktır ve daha sonra updateShiftRegister()gerçek LED'leri güncellemek için aramanız gerekecektir .

Kod Açıklaması:

Yaptığımız ilk şey, yani 3 kontrol pimini tanımlamaktır. 74HC595'in mandal, saat ve veri pinlerini, Arduino'nun sırasıyla # 5, # 6 ve # 4 dijital pinlerine bağlayacağız.

int latchPin = 5;
int clockPin = 6;
int dataPin = 4;

Daha sonra 'led' adlı bir değişken tanımlanır. Bu, LED'lerin o anda açık veya kapalı olduğu modeli tutmak için kullanılacaktır. 'Bayt' türündeki veriler, sekiz bit kullanan sayıları temsil eder. Her bit açık veya kapalı olabilir, bu nedenle bu, sekiz LED'imizden hangisinin açık veya kapalı olduğunu izlemek için mükemmeldir.

// Variable to hold the pattern of which LEDs are currently turned on or off
byte leds = 0;

Kurulum ' işlevinde: basitçe üç pini dijital çıkışlar olacak şekilde başlatıyoruz.

void setup() 
{
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
}

Döngü fonksiyonu: başlangıçta Daha sonra denilen özel işlevini çağırır 0'a değişkenin 'led' tüm bitleri ayarlayarak, tüm LED'leri kapanır updateShiftRegister()hepsi LED'ler kapatmak böylece kayıt vardiyasına LED'leri 'desen gönderecek . Nasıl updateShiftRegister()çalıştığını daha sonra ele alacağız .

Program yarım saniye durur ve ardından 'for' döngüsünü ve 'i' değişkenini kullanarak 0'dan 7'ye kadar saymaya başlar. Her seferinde, değişken ' led'lerdeki belirli LED'i kontrol eden biti ayarlamak için Arduino işlevi bitSet () ' i kullanır. Daha sonra updateShiftRegister()LED'lerin durumunun değişken 'led'lerdeki şeye göre değişmesi için çağırır .

Ardından, 'i' artırılmadan önce yarım saniyelik bir gecikme olur ve sonraki LED yanar.

void loop() 
{
  leds = 0;
  updateShiftRegister();
  delay(500);
  for (int i = 0; i < 8; i++)
  {
    bitSet(leds, i);
    updateShiftRegister();
    delay(500);
  }
}

İşlev updateShiftRegister(), ilk olarak mandal Pinini LOW olarak ayarlar ve ardından shiftOut()mandalı tekrar HIGH konumuna getirmeden önce Arduino işlevini çağırır .

Neyse ki Arduino shiftOut(), tek bir aramada bitleri kolayca kaydırmamıza olanak tanıyan özellikle adı verilen kaydırmalı yazmaçlar için yardımcı bir işlev sağlar. Arduino'nun resmi web sitesinde kütüphane hakkında daha fazla bilgi edinebilirsiniz .

shiftOut()Fonksiyon dört parametre alır; ilk ikisi sırasıyla Veri ve Saat için kullanılacak pinlerdir. Üçüncü parametre, verilerin hangi ucundan başlamak istediğinizi belirtir. 'Least Significant Bit' (LSB) olarak adlandırılan en doğru bit ile başlayacağız.

Son parametre, kaydıran yazmacıya kaydırılacak gerçek verilerdir, bu durumda bu 'led'ler'dir.

void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}

PWM Kullanarak Parlaklığı Kontrol Etme

Ek olarak, burada aynı kuruluma dayalı, ancak küçük bir farkla, IC üzerinde başka bir kontrol pinini yani OE'yi manipüle ettiğimiz başka bir proje var - ve bunu yaparak, çıkış LED'lerinin parlaklığını kontrol edebiliriz!

OE (Output Enable) pininin bir anahtar görevi gördüğünü zaten öğrendik. Bu pin HIGH olarak ayarlandığında, çıkış pinleri devre dışı bırakılır (negatif mantıkla çalışır, hatırladınız mı?). Ve OE düşük voltaj aldığında, çıkış pinleri normal şekilde çalışır.

Önceki örneğimizde, bu pimi kalıcı olarak Ground'a bağlayarak çıkışları her zaman etkinleştirmiştik. Bu pimi Arduino'nun dijital pinlerinden herhangi birine bağlarsak ve durumunu değiştirecek şekilde programlanırsak, aşağıda gösterildiği gibi bir şey elde edebiliriz.

74HC595 Shift Register Çıkışı Etkin Çıkış Geçiş Çıkışı

Ancak bunu yapmak yerine, analogWrite()PWM kullanarak LED'lerin parlaklığını kontrol etmek için bu pini fonksiyonla birlikte kullanabiliriz Böylece aşağıdaki gibi sonuç alabiliriz.

74HC595 Shift Register Çıkışı Etkin PWM Çıkışı

Gerçekte, PWM sinyalinin YÜKSEK kısımları yine de OE pininin tüm IC çıkışlarını geçici olarak devre dışı bırakmasına neden olacaktır. Ancak bu, elbette, gözlerimizin doğrudan algılayabileceğinden daha hızlı gerçekleşecek, ancak genel parlaklıkta kesinlikle bir değişiklik hissedeceğiz.

Bunu yapmak için tek yapmanız gereken bağlantıyı 74HC595'in 13 numaralı pinine değiştirmek. Böylece onu Ground'a bağlamak yerine Arduino'nun 3. pinine bağlarsınız.

74HC595 Vardiya Kaydı ile Arduino PWM Parlaklık Kontrol Kablolaması Fritzing Bağlantıları
PWM Parlaklık Kontrolü - Arduino UNO ile Kablolama 74HC595 Shift Register

Aşağıdaki çizim, tüm LED'ler yandığında yavaş yavaş onları tekrar sönük hale getirecektir.

int latchPin = 5;		// Latch pin of 74HC595 is connected to Digital pin 5
int clockPin = 6;		// Clock pin of 74HC595 is connected to Digital pin 6
int dataPin = 4;		// Data pin of 74HC595 is connected to Digital pin 4
int outputEnablePin = 3;	// OE pin of 74HC595 is connected to PWM pin 3

byte leds = 0;		// Variable to hold the pattern of which LEDs are currently turned on or off

/*
 * setup() - this function runs once when you turn your Arduino on
 * We initialize the serial connection with the computer
 */
void setup() 
{
  // Set all the pins of 74HC595 as OUTPUT
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
  pinMode(outputEnablePin, OUTPUT); 
}

/*
 * loop() - this function runs over and over again
 */
void loop() 
{
  setBrightness(255);
  leds = 0;		// Initially turns all the LEDs off, by giving the variable 'leds' the value 0
  updateShiftRegister();
  delay(500);
  for (int i = 0; i < 8; i++)	// Turn all the LEDs ON one by one.
  {
    bitSet(leds, i);		// Set the bit that controls that LED in the variable 'leds'
    updateShiftRegister();
    delay(500);
  }
  for (byte b = 255; b > 0; b--)	// Gradually fade all the LEDs back to off
  {
    setBrightness(b);
    delay(50);
  }
}

/*
 * updateShiftRegister() - This function sets the latchPin to low, then calls the Arduino function 'shiftOut' to shift out contents of variable 'leds' in the shift register before putting the 'latchPin' high again.
 */
void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}

/*
 * setBrightness() - Generates PWM signal and writes it to OE pin.
 */
void setBrightness(byte brightness) // 0 to 255
{
  analogWrite(outputEnablePin, 255-brightness);
}


ANA SAYFAYA DÖN

Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook    robotic.code
instagram    @roboticcode


Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.

29 Nisan 2021 Perşembe

74HC595 Shift Register ve Arduino

 

74HC595 Shift Register ve Arduino


74HC595 IC, çipin içinde bir kaydırma yazmacı ile birlikte D tipi bir mandaldan oluşan 16 pinli bir kaydırma yazmacı IC'dir. Seri giriş verilerini alır ve daha sonra bu verileri paralel pinler aracılığıyla gönderir. Paralel çıkışlara ek olarak, bir seri çıkış da sağlar. Kaydırma yazmacı ve D mandalı için bağımsız saat girişlerine sahiptir. Bu IC, CMOS uygulamalarında kullanılmak üzere tasarlanmış HC mantık cihazları ailesine aittir.








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 vardiya yazmacı çalışıyor

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.

Arduino ile 74hc595 shift register arabirimi

Ş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.

Arduino74HC595
D11Çıkış Kayıt Saati (Pin12)
D9Vardiya Kayıt Saati (Pin10)
D12Veri girişi (Pin14)
GNDÇıkışı Etkinleştir (Pin13)
+ 5VVardiya Kaydı Temizle (Pin10)
+ 5VGüç (Pin16)
GNDZemin (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

Arduino simülasyonu ile 74hc595 kaydıran yazmaç arabirimi

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

ANA SAYFAYA DÖN

Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook    robotic.code
instagram    @roboticcode


Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.