Toplam 20 giriş/çıkış bacağı bulunan Arduino’da çıkış sayısını artırmak için seri giriş paralel çıkış (SIPO) shift register kullanmıştık. Örneğin 7-segment display çalıştırmak için 74HC595 kullanılmış ve “shift register nasıl çalışır?” konusunda da çalışma prensibine bakmıştık. Bu çalışmamızda da Arduino’da girişleri nasıl arttırabiliriz? bunu inceleyeceğiz. Asıl konumuz aslında paralel (ve seri) girişi ve seri çıkışı olan (PISO) 74HC165. Ama önce en basit yöntem olan ve yeterince Türkçe kaynak olduğunu düşündüğüm ilk yöntemle başlayalım. Bu yöntemde gerilim bölücüler kullanarak analog bir girişte birden fazla buton okunabiliyor. Analog girişinde 10 bit ADC (analog dijital dönüştürücü) Arduino bu sayede herhangi bir analog girişteki gerilimi (2^10 =) 0-1023 aralığında bir hassasiyetle ölçebiliyor. Bunun gerilim karşılığı (5/1024) yaklaşık 0,005 V (5 milivolt civarında). bunun anlamı teorik olarak 5 mV hassasiyetli 1023 buton bağlayabiliyoruz. Ancak bu gerilim, güç kaynaklarının hatta gerilimölçerlerin bile tolerans değerinden daha düşük. 5 volt seviyesindeki dalgalanmalar, kullanılan dirençlerin hassasiyetleri, butonların temas anında oluşan “ark”lar bile bunu etkiliyor. Türkçe kaynaklarda bunu aşmak için hesaplanan değerin ±10 birim aralığı yapılarak, yaklaşık her bir analog pin için yaklaşık 50 buton tavsiye ediliyor. ama emin olun, gösterim için yaptığım üç butonlu devrede bile bu aralık yetmedi. Gelelim devremize;

Devremiz basitlik açısından üç buton, üç LED şeklinde tasarlandı. Amaç K butonu ile kırmızı LED’i, M butonu ile mavi LED’i ve S butonu ile de serı LED’i yakmaya çalışmak. Üç buton da A0 bacağına bağlandı. A0 bacağı 10 k (pull down) dirençle gnd hattında bağlandı. Bu direnç olmazsa olmaz. K butonunun diğer ucu +5v hattına direk bağlanırken, M butonu 1 k dirençle, S butonu da 10k dirençle +5v hattına bağlandı. Bu şekilde K butonuna basıldığında A0 bacağına 5v (1023 değeri) yollanırken, gerilim bölücüler sayesinde M butonu yaklaşık 4,45 v (930 değeri), S butonu ise 2,50 v (512 değeri) gerilimler yolluyor. Bu değerler Arduino’daki basit program yardımcılığı ile işlenip Arduino’nun üç dijital çıkışına bağlı LED’ler yakılıyor. İlgili bölüm:

Sağlıklı bir program için, aralıklara dikkat ettiniz mi? ±10 birimden fazla! Bu da çok buton bağlayabilme sınırını azaltıyor.
Gelelim 74HC165 paralel giriş seri çıkışlı shift register’a. 16 bacaklı bu entegrenin veri kağıdına göre bağlantıları şöyle:

2-6 Volt besleme gerilimi ile çalışan entegrenin 16 numaralı bacağı +Vcc, 8 numaralı bacağı gnd. D0-D7 ile gösterilen bacaklar paralel giriş, Q7 (9 nolu bacak) ise seri çıkış. Ayrıca bu bacağın “DEĞİL”i de oluşturulmuş (7 nolu bacak). DS bacağı (10 nolu) seri giriş için kullanılıyor. Bu entegrenin hem seri hem de paralel giriş şeklinde kullanılabildiğini belirtelim. Seri giriş burada ne işe yarar bilmiyorum ama, 7 numaralı bacaktan bir evirici (değil alıcı-inverter) çıkış alınabilir. Dediğim gibi başka bilgim yok. ancak bu entegreler de diğer shift register’ler gibi peş peşe bağlanabiliyor. O zaman DS bacağı kullanılıyor. Yazının sonunda o bağlantı da gösterilecek. CP (2 nolu bacak) saat girişi. Veri kağıdına göre saat girişinin LOW’dan HIGH’a yükselme anı (rising edge) tetikleme anı için kullanılıyor. Bu saat girişini aktif etmek için CE (15 nolu bacak) gnd hattına bağlanıyor. Diğer bacaklara yine veri kağıdındaki aşağıdaki şekil üzerinden bakalım.

Giriş değerlerini (D0-D7, toplu olarak tüm değerler okunduğu için girişlere yük/load adı veriliyor) register üzerine almak için PL (1 nolu bacak) pini gnd hattına çekiliyor. CE (saat aktifleştirme) bacağı da gnd bağlandığında, CP (saat) bacağından gelen sinyalin ilk yükselme anında, giriş değerleri register üzerine kaydoluyor. Sanki o değerlerin anlık bir resmi çekilip kaydediliyor. Bundan sonra PL bacağı gnd’den sökülüp +Vcc hattına bağlanarak shift register çıkış moduna alınıyor, girişten değer okumuyor. İşte bu andan sonra gelen saat sinyalinin ilk yükselme anından (0’dan 1’e geçiş) başlayarak her bir atmada önce D7 olmak üzere sırayla D6, D5, … çıkışa yönlendiriliyor. İşte bize kaydırmalı yazmaç 🙂
Bunu Arduino ile kullanmak için tasarlanmış devrede; bir dijital bacak giriş olarak kullanılırken, bir bacak saat sinyali, bir bacak da giriş/çıkış aktifleştirmek için olmak üzere toplam üç bacak kullanıldı. 8 dijital çıkış da olan biteni görmek için 8 LED’e birer akım koruma direnci ile bağlandı. Tüm girişlerde 10k pull down direnci eklendi

LED’ler 5-12 numaralı bacaklara bağlandı ve bu bacaklar çıkış pini olarak tanımlandı. Q7 bacağı Arduino’nun 4 numaralı bacağına bağlandı ve giriş olarak tanımlandı. Giriş/çıkış aktifleştirme ve saat sırasıyla 2 ve 3 numaralı bacaklara bağlanarak çıkış olarak tanımlandı.

Loop’da; önce giriş aktif edildi (0) ve saat sinyali 0’a çekilip hemen 1 yapıldı. Böylelikle tüm girişteki değerler (D0-D7) alındı. Sonra çıkış aktif edildi (1). For döngüsü ile veri (D7) okundu, ‘deger’ değişkenine atandı, bu değer 1 ise LED çıkışı 1 yapıldı (LED yandı), değilse LEd çıkışı 0 yapıldı, yeni bir saat sinyali oluşturuldu ve yeni değer (D6) okunarak bu işlemler döngü boyunca 8 kez tekrar edildi.

Şimdi güzelliğe bakar mısınız! Burda amaç LED yakmak değildi biliyorsunuz. Ama yukardaki resimde görülüyor aynı anda birden fazla LED yakabiliyoruz. Bu ne demek; aslında bu kıytırık devre yerine ben tüm butonların kombinasyonunu yaptığımda tam 1 byte’lık (8 bit) bilgi okunuyor. Bu da (2^8) 255 butonun sorunsuz çalışması demek! Hem de tek bir shift register ile…
Ben denemedim ama birden fazla 74HC165 peşpeşe bağlanabiliyor (daisy chain diyorlar). Ama düşünsenize 16 bitlik bir (2^16 = kaç buton ediyor!…) giriş. Kendileri aşağıdaki şekilde bağlanıyormuş. (Basitleştirme açısından girişler gösterilmemiştir)

Yeni çalışmalarda görüşebilmek dileği ile, sağlıcakla kalın…
Veri Kağıdı: https://assets.nexperia.com/documents/data-sheet/74HC_HCT165.pdf
Kaynak: https://www.youtube.com/watch?v=hR6qOhUeKMc&t=324s&ab_channel=KevinDarrah
Kaynak: https://www.youtube.com/watch?v=k4va1JFtzSg&t=663s&ab_channel=element14presents
Kaynak: https://www.youtube.com/watch?v=ANizoLs2-qw&t=166s&ab_channel=FedorWeems
Kaynak: https://www.youtube.com/watch?v=Ys2fu4NINrA&t=1776s&ab_channel=DroneBotWorkshop
Business-focused
BeğenLiked by 1 kişi