Bakış açınızı genişletin

 

Bu yazımın konusu farklı bir bakış açısı elde edilmesi. Arduino, pic, stm, vs.  ile çok şey yaparım diyenler için, bakış açılarını geliştirmek istedim.

Bir örnekle başlayalım neden bakış açısı.
Bir çok yerde arduino kursu veriliyor. Bu kurslarda öğretilenler ile başlayan kişi arduino ile motor kontrolü, led yakma, sensör kontrol etme gibi işlevleri yapıyor. Sonrasında bir sensöre göre değeri okuyup bir RTC den zaman bilgisini okuyup sonrasında ise 7 seg display ile zaman bilgisini ve sensör bilgisini yansıtmak istiyor. Bir de sensörün durumuna göre fan motorunu çalıştırmak ve hızını ayarlamak istiyor. Bu tip bir programı sadece arduino ile yapmak mümkün. Buradaki tek handikap display lerin çoklu bağlantı ile sürülmesi. Bunu arduino pimleriyle yapmak mümkün fakat meşakkatli olacaağı için çeşitli yardımcı devrelerin kullanılması, arduino’nun bu işi kolaylıkla halletmesi demektir.
Bu displaylere bir çözüm bulalım. Mesela 74hc595 entegresiyle display sürelim arduino bunun için 3 pimini kullanacak. Fakat bu durumda bile display çalışma kodlarını ya bir kütüphaneden ya da bir kodlama sisteminden yararlanarak yapmamız lazım bu da fazladan kodlama demek.
Ne yapmalıyız, 74hc595 ile birlikte 7447 kullanabiliriz. Bu da işimizi bir miktar daha kolaylaştıracaktır.

Display kullanımı hakkında yazdığım bir yazıya buradan ulaşabilirsiniz. 

Bunun gibi yardımcı devreler ve entegreler ile ARDUINO’yu ya da PIC, STM gibi kontrolcüleri bir ORKESTRA ŞEFİ gibi kullanabiliriz.

Bu yazımızda kullandığımız entegreler, umarım size bakış açınızı genişletmenizde fayda sağlayacaktır.

Hangi entegreler var.
1- ADC0804 Analog dijital çevirici entegresi paralel tip
2- ADC0831 Analog dijital çevirici entegresi seri tip
3- CD4067 16 kanal Analog dijital çoklayıcı.
4- CD4050 6 lı seviye dönüştürücü (HEX non inverting level shifter)
5- CD4033 sayıcı display gösterici entegresi
6- CD4510 ileri geri sayıcı
7- 7490 binary decade sayıcı( 0-9 arası 4 bit binary sayaç)
8- 7447 display sürücü entegre
9- 27C256 paralel EPROM
10- 74HC165 Paralel seri çevirici entegre.

Bu entegrelerden daha fazlasını da sizler bulabilirsiniz. Entegrelerin çalışması videoda PROTEUS üzerinde gösterilmiştir.

Projenizi oluştururken bunu arduino yada diğer mikrokontrolcüler ile nasıl yaparım derken, bir yandan da rutin işlerin kontrolcü zamanınızı çalmaması için bir yere aktarabilir miyim sorusunu sormalısınız.
Bazı arkadaşlar UNO nun pim sayısı yetmedi MEGA ya geçtim diyor. Projeyi inceleseniz arduino mini ile bile yapılabilecek bir projedir. Pimleri kullanılırken bol keseden dağıtılmıştır. Her şeyi arduino içine gömmeye çalıştığından bir çok kütüphaneyi de eklemiştir. Hatta bu kadar kütüphaneden sonra bellekte bile yer kalmayabilir.
Biraz düşünürse, I2C ile fazladan pim kullanma şansı var. Çok gerekirse bu pimleri kullanır yine de MEGA ya geçmez.

Projenizi oluştururken, ALGORİTMA sını iyi bir şekilde çıkardıysanız, daha programa geçmeden önce ihtiyacınız olan yan devre ve entegreleri de belirleyebilirsiniz. Programınızı sonradan değiştirmenize gerek kalmaz. Algoritma hakkındaki yazıma buradan ulaşabilirsiniz. 

Şimdi de yukarıdaki entegreleri açıklamaya çalışayım.

ADC0804 çıkışının 27C256 eprom ile display de gösterilmesi.

ADC0804 entegresi ADC entegresi dedik. Bu entegreyi kullanmadan Arduino unoda kullanabileceği 6 adet analog girişi olduğunu unutmayalım. I2C kullanıyorsanız 2 tanesi eksilecek. 4 tane kaldı. Bu 4 adet normalde yeterli fakat bundan fazlası gerekiyorsa I2C den vazgeçmenize gerek yok ADC0804 ya da ADC0831 entegrelerini ya da benzerlerini kullanabilirsiniz.
Tabii ki bunu yapmak istemiyorum da diyebilirsiniz.
Size önerim tüm analog sensörlerinizi ya da devrelerinizi 4051, 4052, 4067 gibi entegreler kullanarak sıralı okuma yapabilmeniz mümkün olur.

Multiplexer ( çoklayıcı ) kullanılması.
74HC4067 entegresi kullanılarak yapılmış çoklayıcı.

4067 16 kanallı çoklayıcı yerine, daha düşük kanallı 4051, 4052 gibi entegreleri de kullanabilirsiniz. Arduino hangi sensörü seçerse onu kullanacaktır. Ben videoda 4067 16 kanallı olanı seçtim. Diğerleri de aynı şekilde çalışır.
Çareler tükenmez yeter ki bakış açınızı genişletin. Mesela ADC0804 paralel çıkışlı bir entegredir. Ölçüm değerini 8 bit olarak gösterir. Yani arduino’nun 8 pimini kullanması gerekecektir. Bu kadar savurgan olmayalım dersek, 74HC165 entegresini kullanarak paralel bilgiyi ( 8 bit bilgiyi 1 bit seri ) bilgiye dönüştürebiliriz. ( Bu da videoda gösterilmiştir. )
Ayrıca elimizde 8 bitlik bir değer var. Bunu arduinoya gönderip arduinonun da displaylere göndermesini isteyebiliriz. Arduinonun zamanını çalmamak için 27C256 paralel epromu programlayarak, display sürücüleri de eklerseniz, 7 seg displayde gösterebilirsiniz. Arduinonun bundan haberi bile olmayacaktır. Zamanı çalınmamış olacaktır. ( Bu da videoda gösterilmiştir.)

ADC0831 den bahsetmiştik. Bu da 8 bacaklı bir seri çıkışlı Analog Dijital çevirici entegresidir. Zaten seri bilgi geleceği için arduinonun, entegrenin CS ucunu aktif ederek bilgiyi istemesi yeterli. Yine fazla pim kullanımı söz konusu. Arduino kendi içinde 1 pim kullanarak bu işi yapıyor. Neden 2 pim kullanayım dersiniz. Haklısınız. Fakat çözümü de var. Çoklayıcı kullanmak. Arduino 4 bit bilgi kullanarak birden fazla sensörü seçebiliyor. 4067 gibi entegrelerle bu kez sensör seçimi yapabiliriz. Arduino sadece 4 bit yani 4 pim kullanarak çoklayıcı vasıtasıyla 16 tane sensörün hangisinden bilgi alacağını seçer ve aynı zamanda tek pim kullanarak analog veriyi de alır.

Diyelim ki 6 adet 7 seg display kullanacağız ve bir sayıcı yapacağız. 4033 entegrelerini birbirine seri bağlayarak 6 adet display çalıştırabiliriz.
Ben bir de geri sayaç yapmak istiyorum derseniz bu kez 4510 entegresini kullanabilirsiniz. Bu entegre ileri geri sayıcı entegredir. Çıkışı 4 bitlik decade denilen 10lu sayıcıdır. Yani sadece 0-9 arası sayar. Bu çıkışlar 4033 gibi direkt display’e bağlanamadığından bu kez 7447 display sürücü kullanılır ki displayler arduino olmadan çalışsın. Bu entegrenin güzel bir özelliği daha var. İstediğiniz değerlere ayarlayarak o değerden başlayıp ileri ya da geri gitmesini sağlayabilirsiniz. Arduino bunun neresinde derseniz Arduino istenilen başlangıç sayısını ayarlar, clock ( saat ) sinyali için PWM darbe üretir ya da dijital pim üzerinden bir saat darbesi üretebilir. Ayrıca ileri ya da geri saymasını sağlayabilir.

Sayıcı entegreleri

Buraya kadar çok güzel.
3 dijit kullanımda arduino başlangıç değerlerini vermek için 12 pim feda eder. Bir de diğer denetimler varsa pim yetmez.

NE YAPMALI? Tıkandık mı? Tabii ki HAYIR.

Her şeyin bir çözümü var. Daha önceki display yazımda belirttiğim gibi 74HC595 entegreleri için 3 pim ile kontrol sağlayabilirim. 2 tane 74HC595 kullanarak 4 adet 4510 entegresinin başlangıç değerlerini kontrol edebilirim daha fazlası için 74HC595 ekleyerek daha fazla kontrol sağlayabilirim.

7490 entegresi 4 bitlik binary sayıcıdır. Bu entegrenin arkasına 7447 display sürücü ve 7 seg display kullanılarak sayıcılar yapılır. Bunun avantajı, 7490 çıkışını bir mantık kapı devresiyle kontrol ederek bu kapı devresinin çıkışını da Master Reset ucuna vererek istediğimiz sayıdan geri döndürebiliriz. 0-4 arası saysın dediğinizde 4 rakamının binary karşılığı olan  0100 sayısında bir sonraki sayı olan 5 sayısı ( 0101 )  sayısında bulunan 2 adet 1 rakamının çıkışını bir AND kapısıyla birleştirip Master resete verirsek 4 ten sonra 5 değil 0 rakamı bilgisi gelir ve ekranda 0 görünür. Arduino bunu nasıl kullanır. Normalde bunu kullanmasına gerek yok. 4 bitlik çıkışı 7490 yerine kendi verir. 7447 Display sürücüsüyle birlikte 7 seg display çalışır.
Arduino bir enkoder gibi deliklerin sayıldığı bir projede bu entegreyi kullanabilir. Her 10 tanede bir resetleneceği için sayacın saydıklarını 10 ar 10 ar sayar. Durduğu anda ise 4 bitlik değere bakarak hızlı bir sayma işlemini yapabilir.
Hatta aşağıdaki resimdeki gibi bir çalışma da yapılabilir. Bu çalışmada Arduino megada her dijit başına 1 kontrol pimi kullanılarak daha fazla dijit yazılabilir. Bu devreyi kısaca anlatacak olursak çalışma şu şekildedir. Arduino 4511 entegresinin kilidini açıp kapatarak (LE/ST pimi) 7490 çıkışının hangi entegreye iletilmesi gerektiğini belirtir. 7490 a bağlı olan uçlar ise reset ucu (2.3. pimler) bir de saat palsi (14). Mesela ekrana 25 yazdırmak istiyor. Sağ taraftaki 7490 entegresinin 14. Bacağını 5 kez tetikler. Sonrasında ise sağdaki 4511 ent. 5. Bacağını önce 0 sonra 1 yaparak display’in 5 rakamına ulaşmasını sağlar. 5. Pimini 1 yapmak demek. Giriş değişse bile çıkış değişmesin demektir. Artık sağdaki display 5 yazarken diğer entegre için arduino 7490 ı resetler. Arkasından 14. Pimden 2 kez saat palsi vererek 7490 entegresini 2 rakamına ayarlar. Sonrasında ise soldaki 4511 entegresinin 5 numaralı ucunu önce 0 sonra 1 yaparak 2 rakamının displaye yazılmasını ve kilitlenmesini sağlar.
Bu şekilde dijit sayısı çoğaltılabilir. Ve sadece arduinonun 1 pimi yeni dijit için yeterli olacaktır.

Bazen size saçma gelebilir. Arduino varken neden daha fazla devre kullanayım arduino yapar. Maalesef öyle olmuyor. Sadece ARDUINO kullanmıyoruz. 8 bacaklı bir PIC ya da attiny entegresiyle bir çok şey yapmak mümkün iken koca arduino kartını kullanmak zorunda kalabilirsiniz. Zaten bu tip ihtiyaçlardan dolayı seri çıkışlı entegre ve sensörler ortaya çıkmıştır. Hatta hafıza entegreleri bile seri haberleşme kullanır oldular. Eskiden entegrelerin hızları çok yüksek değildi. Bundan dolayı paralel çalışması hız yönünden avantajlıydı. Fakat şimdilerde entegrelerin çalıştığı frekanslar çok yükseldi. Paralel yerine çok daha az pim ile hızlı seri haberleşmeler yapılmaya başlandı. SEBEP : Mümkün olduğu kadar küçük ve hızlı devreler oluşturmak.

İkiside aynı kapasitede eprom. Büyük olan eski tip küçük olan yeni tip epromdur. Küçük olan seri haberleşme (spi, I2C gibi ), Büyük olan paralel çalışmaktadır.

27C256 Eprom için de bu yazıma bakabilirsiniz.

Gelelim en çok hata yaptığımız, fakat şans eseri modülleri ve komponentleri bozmadığımız duruma.
Level Shifter ( seviye dönüştürücü ) 4050 entegresi. Bu entegre non inverting denilen bir yapıdadır. Anlamı ise girişe hangi seviyede gerilim uygularsanız çıkışı da aynı demektir. Entegrenin VCC ucuna verilecek gerilim çıkış maksimum gerilimini belirliyor. Normalde giriş uçları 15V gerilime kadar dayanabilecek niteliktedir. Bundan dolayı giriş ucuna 5-12V gerilim verilse de entegrenin besleme gerilimi Vcc 3.3V ise çıkış uçlarından maksimum 3.3V luk bir gerilim alınız. Mesela 12V luk bir sensörünüz var. Bu sensörü 4050 entegresinin girişine bağlayın ve entegrenin besleme gerilimini 5V yapın. Çıkıştan alınabilecek maksimum 5V olacağından, arduino ve benzeri TTL seviyesinde çalışan devrelere giriş olarak rahatlıkla kullanabilirsiniz.  Aşağıda microSD kart modülü üzerinde kullanımı görülüyor. 

Buradaki 4050 entegresi, 6 adet 3V3 olması gereken girişler için seviye dönüşüm sağlıyor.

Basit olarak dirençler ile yapılmış seviye dönüştürücü.

Yukarıdaki devrenin amacı ESP gibi, HC06 gibi 3v3 ile çalışan modüllerin giriş pimlerini ya da devrelerini koruma altına alır.
Mesela ESP01 ile seri port üzerinden Arduino ile haberleşme yapacaksınız. Bu durumda ESP01 Tx çıkışı zaten 3V3 gerilim olarak bilgiyi çıkaracaktır bu bilgiyi arduino ve diğer 5V luk mikrokontrolcüler problemsiz alır. Fakat Arduino ve diğer 5V luk mikrokontrolcüler ESP ye bilgi gönderirken ESP01’in Rx girişine bilgiyi 5V tan 3v3 seviyesine düşürüp vermeli. Bunu sağlamak için kolaylık olsun diye gerilim bölücü dirençler kullanıyoruz. Fakat yukarıdaki resimde MicroSD kart modülü gibi birden fazla 3V3 giriş olduğunda her birine gerilim bölücü direnç koymak yerine 4050 gibi bir entegre koymak daha mantıklı olacaktır. Bu şekilde MicroSD kartlarımızı da korumuş olduk. ESP01 in Rx girişine ise arduino direkt olarak 5V luk bir seviye uygularsa hemen yanmayabilir fakat çalışırken ısınarak çalışmaz hale gelebilir. BU DURUMA DÜŞMEMEK İÇİN MODÜLLERİNİZİ VE GİRİŞ SEVİYELERİNİ İYİ TANIMANIZ GEREKMEKTEDİR. .

Tüm dosyalar bu linktedir. ( Proteus dosyaları proteus 7.10 ile yapıldığından daha yüksek varsiyonlarda da çalışacaktır. )

Konu hakkında kafanıza takılan soru olursa ya da Şurası yanlış olmuş dediğiniz yer varsa Lütfen buradan ya da Face gruplarından bana iletin. 

1 Comment

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir