UYGULAMA A: LED İLE KARA ŞİMŞEK ANİMASYONU
(74HC595 SHIFT REGISTER UYGULAMASI)
Bu uygulamada 74HC595 shift register entegresi ile kara şimşek efekti elde etmeye çalışacağız. Öncelikle 74HC595 entegresinin nasıl kullanıldığından bahsedelim. Entegrenin pinout yapısına baktığımız zaman, ST_CP (latch), SH_CP (clock) ve DS (data) pinlerinin entegrenin çalışmasında önemli bir rölü var. DS pini ile entegreye bilgi yüklemesi yapılmaktadır. Bilgi yüklemesini kontrol eden pin ise SH_CP pinidir ve bu pinden gelen clock palsine göre DS pinindeki bilgi entegreye aktarılır. 8 adet çıkış pini olduğuna göre 8 adet bilgi girişi yaptığımızda, bu bilgileri artık çıkışa yönlendirmemiz gerekmektedir. Bu işlemi ise ST_CP pini kontrol etmektedir. Entegreyi resetlemek için MR pini, entegrenin çalışmasını yetkilendirmek için ise OE pini mevcuttur. MR ve OE pinleri değil mantığıyla çalışmaktadır. Yani resetlemek için MR girişine GND bilgisi gönderilmelidir. Diğer durumda bu pin Vcc (+5V) ile beslenmelidir. OE girişimiz ise entegrenin çalışabilmesi için GND ye bağlanmalıdır. Bu pine Vcc (+5V) verirsek entegreyi kullanıma kapatmış oluruz. Bu mantıkla çalışan bir başka entegre de TPIC6B595 entegresidir. Farkı ise open collektor olarak çalışmasıdır yani çıkışları aktifken GND ye bağlanmaktadır. 74HC595 ise çıkışları aktifken +5V vermektedir.
Gerekli Malzemeler:
- Arduino Uno
- Breadboard
- 74HC595
- Kırmızı Led (8 adet)
- 220 ohm veya 330 ohm direnç (8 adet)
- jumper kablolar
Kod:
int latchPin = 9; // ST_CP pini. Bu pin LOW iken entegre çıkış vermez. HIGH iken çıkışlar aktif olur. int clockPin = 10; // SH_CP pini. Entegreye bilgi yüklemek için bu pin aktif yapılır. int dataPin = 8; // DS pini. Entegreye yüklemek istediğimiz bilgiyi burdan göndeririz. byte led_durum = 0; // leds isimli 8-bitlik bir değişken oluşturduk. void setup() { pinMode(latchPin, OUTPUT); //pinleri çıkış olarak ayarlama pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); } void loop() { led_durum = 0; goster_sol(); // fonksiyonu çağrıyor delay(1500); for (int i = 0; i < 8; i++) // led_durum değişkenimizdeki 8 bitten her birini sırayla 1 yapacak { bitSet(led_durum, i); // i. biti 1 yapıyor. goster_sag(); delay(75); } for (int i = 0; i < 8; i++) // bu döngüde bitleri 0 yapmak içindir { bitClear(led_durum, i); // i. biti 0 yapıyor goster_sag(); delay(75); } delay(150); for (int i = 0; i < 8; i++) // led_durum değişkenimizdeki 8 bitten her birini sırayla 1 yapacak { bitSet(led_durum, i); // i. biti 1 yapıyor. goster_sol(); delay(75); } for (int i = 0; i < 8; i++) // bu döngüde bitleri 0 yapmak içindir { bitClear(led_durum, i); // i. biti 0 yapıyor goster_sol(); delay(75); } } void goster_sol() // shift register'ın çalışması için gerekli işlemleri yapıyor { digitalWrite(latchPin, LOW); // shift register veri okumaya hazır hale geliyor shiftOut(dataPin, clockPin, LSBFIRST, led_durum); // entegreye veri yükleme komutu digitalWrite(latchPin, HIGH); // shift register veriyi çıkış olarak veriyor } void goster_sag() // shift register'ın çalışması için gerekli işlemleri yapıyor { digitalWrite(latchPin, LOW); // shift register veri okumaya hazır hale geliyor shiftOut(dataPin, clockPin, MSBFIRST, led_durum); // entegreye veri yükleme komutu digitalWrite(latchPin, HIGH); // shift register veriyi çıkış olarak veriyor }
Son Yorumlar