Bundan önceki çalışmamızda Arduino’nun bir analog girişini kullanarak 8 butonun nasıl eklendiğini görmüş ve paralel giriş seri çıkışlı shift register (74HC165)’i incelemiştik. Bu çalışmamızda da analog girişi yine analog olarak çoklamak için multiplexer nasıl kullanılır onu inceleyeceğiz.

Multiplexer/Demultiplexer çoklu rotary switch (komutatör anahtar) olarak kullanılabiliyor. Multiplexer (Mux) paralel girişleri seri çıkışa yönlendiriyor ve bu yüzden ‘Veri Seçici’ olarak adlandırılırken, demultiplexer (Demux) ise seri giriş, pararlel çıkış olarak kullanılıyor ve ‘Veri Dağıtıcı’ olarak adlandırılıyor.

Bu projede kullandığımız multiplexer CD4051. Bu entegrenin veri kağıdında ilginç bir bilgi var; o da hem multiplexer hem de demultiplexer olarak kullanılıyor olması! Komütatör anahtarda elimizle yaptığımız döndürme (giriş çıkış arasındaki bağlantıyı seçme) işlemi dijital girişlerle yapılıyor. CD4051’de bunu ayarlayabilmek için 3 dijital giriş var. Dolayısıyla (2^3=) 8 çıkış seçilebiliyor. Buradan bu arkadaşların neden 8/3 veya 4/2 ya da 32/4 diye adlandırıldıkları anlaşılıyor sanırım. Veri kağıdı bize aşağıdaki bilgileri sağlıyor:

Yukarıdaki fonksiyon diyagramında 1 ortak giriş/çıkış (COM) ile 8 kanal çıkış/girişi (Ch..) olan bu entegrede ister 8 kanal giriş, ortak çıkış istersek de ortak giriş 8 kanal çıkış olarak kullanabiliyoruz. Ortak bacağın hangi kanala bağlanacağını belirttiğimiz girişler de C, B, A girişleri. Sanırım bu diyagram üzerinden yukarıda bahsettiğimiz 8/3 vurgusu daha iyi anlaşılıyor. Örneğin CBA girişi ‘101’ olarak verilirse ‘COM’ bacağı 5 numaralı kanala, CBA girişi ‘001’olarak verilirse ‘COM’ bacağı 1 numaralı kanala bağlanıyor. INH (inhibit) isimli bacak ise giriş ile çıkış arasındaki bağlantıyı kesiyor/açıyor. Bağlantı için bu bacağın gnd hattına çekilmesi gerekiyor. ‘VDD’ bacağı 20 volta kadar pozitif besleme, ‘VSS’ bacağı da gnd hattı. 7 numaralı ‘VEE’ negatif besleme için kullanılabiliyor, gnd hattına bağladık. Biz bu projede 8 kanal giriş bir ortak çıkış olarak kullandık. Neticede giriş çoklamaya çalışıyoruz (aşağıda tersi için de bir örnek oluşturdum). Multiplexer bir anahta olduğu için seçilen kanaldaki veri ne ise onu ortak bacağa bağlıyor. Yani o hattaki analog veri taşınıyor. Yani sadece buton değil analog veri üreten her sensör kullanılabiliyor.

Bu projede analog sensörleri temsilen ayarlı dirençler (10k trimpot) kullanıldı. Kanalın bir tanesi de dijital girişi denemek için basit bir anahtar ile bağlandı. Tüm trimpotlar 0- 5 volt arası analog veri üretirken anahtar üzerinden de 1(5V) veya 0(gnd) verisi yollandı. CD4051’in analog çıkışı Arduino’nun A0 bacağına bağlandı. Arduino’nun 3 dijital çıkışı CD4051’in A, B ve C girişlerine bağlandı. Analog çıkışı gözlemleyebilmek için de arduino’nun pwm destekli dijital çıkışları kullanıldı. Yukarıdaki şemada LED’lere giden iki sarı renkli kablo ise Arduino’nun 12 ve 13 numaralı çıkışları. Yani pwm desteği yok. 13 numaralı LED zaten anahtara bağlı. Ama 12 numaralı LED trimpota bağlı. Gözlem şu; trimpottan gelen gerilim, Arduino’nun 1 olarak anlayabildiği seviyenin üzerine çıktığında LED yanıyor, Arduino’nun 0 olarak kabul ettiği değere inince sönüyor. Diğer LED’lerin ise parlaklığı trimpottan gelen gerilime göre değişiyor. Bu devreyi tasarlarken kodda iç içe ‘for döngüsü’ kullanarak tüm girişlerdeki veriler okunuyor, ve LED’ler üzerinden ‘analogWrite’ komutu ile gözleniyor.

Yukarıda önce bacak bağlantıları ve bunların giriş/çıkış oldukları tanımlandı. Loop’da; ‘p’ hangi LED olduğunu gösteren değişken. İç içe ‘for döngüsü’ ile CBA çıkışları : 000’da 111’e kadar saydırıldı ve tüm girişler okutuldu. Her bir okuma esnasında elde edilen ‘deger’ değişkeni ‘map’ komutu ile 10 bit girişten 8 bit çıkışa dönüştürüldü. Elde edilen bu değer LED’ler üzerinden ‘analogWrite’ komutu ile yazdırıldı.

Demultiplexer Örneği:

Üstteki çalışmadan kopya çekerek aynı entegrenin demultiplexer olarak kullanımına bir örnek hazırlandı. Arduino ile sadece C, B ve A kontrol edilerek ortak uç +5 Volt hattına bağlandı. Aynı döngüler ile CBA önce 000’dan 111’e sonra 111’den 000’a saydırılarak bir yürüyen ışık devresi 8 LED ile oluşturuldu. Bu devrede butonlar (ve anahtar) sökülerek yerlerine birer LED (akım koruma direnci ile) bağlandı. Ortak uçtaki +5 volt sırasıyla her bir LED’e uygulandı.

Bu koddaki hızı belirlemek için ‘zaman’ değişkeni oluşturuldu. Hatta artistik olması açısından ‘delay’ komutundaki bu zaman değiştirilerek LED’lerin yanma hızında bir yavaşlama etkisi de oluşturuldu.

Bu çalışmamızda burada sonlandı. Umarım proje geliştirmenize yardımcı olabilecek bir temel bilgi verilebilmiştir. Hoşça kalın, sağlıkla kalın…

Veri Kağıdı: https://www.ti.com/lit/ds/symlink/cd4052b.pdf?ts=1612417527477&ref_url=https%253A%252F%252Fwww.google.com%252F

Kaynak: https://www.youtube.com/watch?v=OgaeEiHemU4&t=389s&ab_channel=EEEnthusiast

Kaynak: https://www.youtube.com/watch?v=XzRhtR78mgk&t=2s&ab_channel=ElektronikDerslerim