74HC595 Kullanımı



Bu entegre seri giriş paralel çıkış yapan bir entegredir. Mikrodenetleyici çıkışlarını çoğaltmak 7 parçalı göstergeleri veya led ışıkları yönetmek için kullanılabilir.  Datasheet 'te detaylı bilgiler mevcut. Entegrenin iki kayıt (register) bölümü vardır. Kaydırma (shift register) bölümü ve çıkışların kontrol edildiği hafıza (storage register) bölümü. Veri önce kaydırma kısmına alınır daha sonra hafıza bölümüne alınır. Kayıt verisine göre çıkış verilir. Her yeni gelen bir bit veri için çıkış bir bit kaydırılır. Resimde entegrenin bacak numaraları ve isimleri bulunmaktadır. farklı isimler olan şemalar olsa da sıralama ve görevler aynıdır. 




Bacakların tanımı ve entegrenin çalışması;

Vcc: Pozitif besleme +2 ile +6 volt uygulanabilir.

Gnd: Negatif besleme.

Qa-Qh (Q0-Q7): Çıkış bacakları. Gelen veriye göre "1" High ya da "0" Low olurlar.

Qh' (Q7'): İkinci bir 74HC595 bağlanması durumunda seri çıkış bacağı olarak kullanılır.

SER (DS): Verinin gönderildiği bacaktır. Seri olarak "10011101" ya da "0011" gibi veri gönderilebilir.
7. bit 6. bit 5. bit 4. bit 3. bit 2. bit 1. bit 0. bit
Qh Qg Qf Qe Qd Qc Qb Qa
1 0 0 1 1 1 0 1 Çıkış
Veri  10011101=> 1 0 0 1 1 1 0 1 Shift

Gönderilen veri aşağıdaki gibi "0011" olduğunda önceki veri gönderdiğimiz 4 bit veri kadar kaydırlır. gönderilen son veri 0. bittir ilk olarak yüksek bit veri gönderilir.
7. bit 6. bit 5. bit 4. bit 3. bit 2. bit 1. bit 0. bit
Qh Qg Qf Qe Qd Qc Qb Qa
1 1 0 1 0 0 1 1 Çıkış
Veri  0011=> 0 0 1 1 Shift


OE: Çıkışları "1" High olduğunda pasif "0" Low olduğunda aktif yapar. kullanılmayacaksa Gnd ile bağlanabilir.

RCLK (STCP): Kaydırma (Shift register) içindeki veriyi hafıza (Storage register) bölümüne almak için saat darbesi gönderilen bacaktır. Veriyi her "1" High olduğunda hafızaya yazar. SRCLK dan sonra "1" olmalıdır.

SRCLK (SHCP): Veriyi kaydırma (Shift register) bölümüne almak için saat darbesi gönderilen bacaktır. SRCLK "1" High olduğunda SER yani veri "1" ise kaydırmaya "1" , veri "0" ise kaydırmaya "0" yazar.

 SRCLR (MR): Kaydırma bölümüne kayıt yapabilmek için "1" High olması gerekir. Hafıza ve kaydırma bölümündeki veriyi "0" Low olduğunda siler. Bunu yapabilmek için SRCLR "0" ardından "1" yapılır.  RCLK "1" ve "0" darbesi gönderilir. Silme (reset) kullanılmayacaksa Vcc ile bağlanabilir.

Tüm bu işlemleri yapabilmek için 5v gerilimde 20ns (nanosaniye) yeterlidir. Aşağıdaki resim entegrenin çalışması için gerekli zamanlamayı göstermektedir.


Hızlı bir özet geçmek gerekirse, SRCLR "1" ve OE "0" durumdayken SRCLK bacağına "1" -"0" darbeleri gönderilir. Bacak her "1" olduğunda SER bacağının "1" veya "0" olması durumunu kaydırma bölümüne (shift register) yazar. SRCLK önce olmak kaydıyla her bit sonunda RCLK "1" yapılabilir ya da tüm veri gönderilip RCLK bacağına "1"-"0" darbesi gönderilip hafızaya (storage register) alınıp çıkışlar aktif edilebilir.



/*
 * 74hc595.c
 *
 * Created: 6.01.2019 15:20:43
 * Author : haluk
 */ 
#include <avr/io.h>
#include <avr/delay.h>
// port tanımı
#define HC595 PORTB
#define HC595_D DDRB
// port pin tanımları
#define SER PORTB0
#define SRCLK PORTB1
#define RCLK PORTB2
#define SRCLR PORTB3
// pinler çıkış seçildi
#define HC595_BASLA HC595_D|=(1<<SER)|(1<<SRCLK)|(1<<RCLK)|(1<<SRCLR)
// veri çıkış 
#define SER_HIGH HC595|=(1<<SER)
#define SER_LOW HC595&=~(1<<SER)
//veri saat
#define SRCLK_HIGH HC595|=(1<<SRCLK)
#define SRCLK_LOW HC595&=~(1<<SRCLK)
//çıkış saat
#define RCLK_HIGH HC595|=(1<<RCLK)
#define RCLK_LOW HC595&=~(1<<RCLK)
//reset
#define SRCLR_HIGH HC595|=(1<<SRCLR)
#define SRCLR_LOW HC595&=~(1<<SRCLR)
void saat_darbe(){
 SRCLK_HIGH;
 _delay_ms(1);
 SRCLK_LOW;
}
void cikis_darbe(){
 RCLK_HIGH;
 _delay_ms(1);
 RCLK_LOW;
}
void reset_595(){
 SRCLR_LOW;
 _delay_ms(1); 
 SRCLR_HIGH;
 cikis_darbe();
}
void veri_yaz(uint8_t data){
 for (uint8_t i=0;i<=7;i++)
 {
  if (data&0x80)
  {
   SER_HIGH;
  }else{SER_LOW;}   
   saat_darbe();
   data<<=1;
 }
 cikis_darbe();
}
int main(void)
{    HC595_BASLA;
 SRCLR_HIGH; 
    while (1) 
    {
  veri_yaz(0xF0); // 0b11110000
  _delay_ms(3000);
  veri_yaz(0x0F); // 0b00001111
  _delay_ms(3000);
  veri_yaz(0xAA); // 0b10101010
  _delay_ms(3000);
  veri_yaz(0x55); // 0b01010101
  _delay_ms(4000);
  reset_595();
    }
}

Devre şeması

Hiç yorum yok:

Yorum Gönder