7 SEGMENT DISPLAY KULLANIMI

Bu yazımda 7 segment display konusunu işleyeceğim. Fakat sadece nasıl çalıştığını değil, Displayleri sürme yolları, alternatif kullanımlar, avantaj ve dezavantajlarını işleyeceğim.
Örnekler arduino örnekleri gibi olsa da kütüphanesiz olan örnekler PIC gibi diğer mikrodenetleyicilere çevrilebilecek şekilde olduğundan kolaylıkla dönüşüm yapılabilir.

Öncelikle şunu belirtmeliyim, tek bir display kullanacaksanız bile, displayin boyutlarına bağlı olarak çektiği akımların değişik olduğunu bilmelisiniz. İnternetten gördüğünüz basit şemayı uygularsanız direkt entegre ile sürerseniz ENTEGREYİ YAKABİLİRSİNİZ. Bundan dolayı entegreden kontrol edilen uçlara transistörlü devreler kullanmanız yerinde olur. Ya da display sürücü entegreler kullanabilirsiniz. Bunun dışında ULN2003 ULN2803 gibi yüksek akıma dayanıklı entegreler de kullanabilirsiniz. Arduino kontrol pimi hangisi. Bu pim ortak katot veya ortak anot kullanıldığında ortak olan uca bağlı pimdir. Diğer Data hatlarına bu transistörü kullanıyorsanız 220R kullanın. Bu transistörü kullanmıyorsanız 1K kullanın. 
ÖRNEKLERDE 220R DİRENÇ KULLANILMIŞTIR. PROTEUS ÜZERİNDE DENEME YAPILDIĞINDAN DOLAYI SORUN OLMUYOR. GERÇEK DEVRELERDE, NORMAL LED KONTROL EDİLİRKEN 220R YA DA 330R DİRENÇ KULLANILIR. BURADA 7-8 ADET LEDİN BİR ARADA YANMA DURUMU SÖZ KONUSU, BUNDAN DOLAYI ARDUİNO KONTROL PİMİNDEN BU AKIMLARIN HEPSİ BİRDEN GEÇECEKTİR. BUNDAN DOLAYI DA AKIM YÜKSELECEKTİR.
ŞAYET TRANSİSTÖR KULLANMAYACAKSANIZ GERÇEK DEVREDE 1K DİRENÇ KULLANIN. IŞIK BİRAZ AZ GİBİ GÖRÜNSE DE 8 RAKAMI YAZARKEN ARDUINO YA DA DEVRENİZ BOZULMAZ.
ASLA, BAZI ŞEMALARDA GÖRDÜĞÜM GİBİ DİRENÇ OLMADAN ÇALIŞTIRMAYIN. GEÇECEK AKIM SINIRLANDIRILMAZSA DEVRENİZE ZARAR VERİR. 

Gelelim en çok yapılan hataya. Display satın alırken, ortak katot veya ortak anot belirterek alırsınız. Bunu direkt olarak mikrodenetleyicilerle sürmeyecekseniz, sürücü entegre almalısınız. Bu entegreleri ise aldığınız displaylere göre almanız gerekmektedir. Neden olduğunu aşağıdaki resimlerden görebilirsiniz. Yanlış aldınız, ne yapmanız gerek onu da daha aşağılarda yeri geldiğinde anlatacağım.
Aşağıda gördüğünüz resimde a,b,… g gibi harfler segment datasını temsil eder. Aşağıda verilecek olan tablolarda 1 rakamı yazmak için b,c ledlerini yakmanız gerektiğinde uçlara bağlı olan ledleri tetiklemeniz gerekir. Dp ise decimal point dediğimiz nokta ledidir.

Displayler 2 çeşit bağlantıya sahip dedik. Bunlardan biri ortak anot yukarıdaki ilk resim diğeri ise ortak katot 2. resim. İçerisindeki led diyotların bağlantı şekline göre adlandırılırlar.
Ortak Anot Bağlantısı : Bu bağlantıda +5V displayin +V ucuna verilir. Ledlerin GND uçları ise sürücü entegreden kontrol edilerek displayin çalışması sağlanır.
Ortak Katot Bağlantısı : Bu bağlantı şeklinde ise GND displayin GND ucuna bağlanır ve Ledlerin anotları entegreden kontrol edilir. RESİMLERDEKİ BAĞLANTI ŞEKLİNE DİKKAT EDİNİZ. 

Aşağıda çeşitli display bağlantıları göreceksiniz. Birincisi ve yalın hali tek display sürme için arduino kullanımı. Tabii ki bu tek display sürmek için arduinonuzun 8 bacağını birden kullanmanıza sebep olur. 2 tane display olsun derseniz 8 adet daha koyamayacağınız için çoklu çalışma sistemi denilen Multiplex çalışma sistemine geçmeniz gerekir.
MULTIPLEX çalışma sistemi nedir :
Bu çalışma sistemi aynı data hatlarını tüm displaylerde kullanıp displaylerin zamanı geldiğinde ışıldaması,(göstermesi) şeklinde yorumlayabiliriz. Sıralı bir çalışma sistemidir. Bu sistemde 8 data hattına ek olarak dijit(display sayısı) kadar kontrol ucu da kullanmalıyız. Yani 8 data hattı ve 2 kontrol hattı ile 2 display kullanabiliriz. Dijit sayısı arttıkça, kontrol uçları da artmalıdır. Kontrol nereden yapılır derseniz, Ortak anot kullanıyorsanız tek olan anot uçlarından, Ortak katot kullanıyorsanız tek olan Katot ucundan yapılmalıdır.
Minimum multiplex kullanımı bu devredeki gibi olmalı diye düşünebilirsiniz. Burada PIC entegre kullanılmış, Arduino da da multiplex çalışmada, display bağlantısını bu şekilde yapmanız gerekmektedir. Arduinoyu korumak için. Bu devre ortak anot olduğundan PNP transistörlerle ortak olan anot uçlarına bağlanmış.Ortak katod olsaydı bu transistörlerle GND ye bağlanacaktı. GND ye bağlarken NPN transistör kullanabilirsiniz. 

Bu şekilde sıralı çalışma, zaman paylaşımlı olduğundan ve insan gözünün saniyede 25 kez aynı şeyi görmesinin durma etkisi yaratmasından dolayı, belli frekansta kontrol edilen uçlardan displaylerin ışıldaması sağlanır.  Dijit sayısı arttıkça kontol zamanlama frekansı da artmalıdır. 2 hane için düşük bir kontrol frekansı kullanıyorsanız 10 haneye çıktığında, bazı displaylerde harflerin eksik olduğunu görebilirsiniz. Bundan dolayı sizinde dijit(Digit) sayısına göre kontrol frekansını arttırmanız gerek.
Multiplex çalışmada en büyük sorun arduino ile kullanırken, başka bir cihazı da aynı arduino ile kontrol ettiğiniz sürede, zaman paylaşımında olabilir. Mesela birden fazla servo motor kullanacaksanız ya da başka işlemler yaptıracaksanız, bu zaman içerisinde kontrol frekansı durmak zorundadır. Bu da displaylerin bazılarının eksik yanmasına sebep olabilir.
Tabii ki bu sorunlar için aşağıda bulunan çözümleri de kullanabilirsiniz. Tüm kontrolü arduino üzerinden alıp bu işlemi kendisi yapan entegreler var. Bunları da kullanabilirsiniz.

Mesela 74HC595 entegresi. Bu entegre ile Arduino 3 kablodan haberleşir. Kilitlemeli bir entegre olduğundan arduino kendi işine bakabilir. Bu entegre displayin sabit kalmasını sağlar. Fakat bunun dezavantajı ise her entegreye bir display bağlanması yani 8 rakamlı bir sistem yapacaksanız 8 tane 74hc595 kullanmanız gerekebilir. Burada bir mola verip kısaca 74HC595 in iletişimi hakkında bilgi vermeyi uygun buldum.
74HC595 in çalışma sistemi ise şu şekildedir:
Datalarınız SHIFT REGISTER içine yeşil olan CLOCK palsleriyle birlikte gönderilir.  8 bit bittiğinde çıkışın kilitlenmesi için LATCH denilen sinyal HIGH seviyesine çıkarılır. Bu anda girişte verdiğiniz bilgiler tekrar LATCH palsi gelesiye kadar çıkışa aktarılır ve kilitlenir. Kilitlemek demek gelen data ne olursa olsun çıkış uçlarındaki bilgiyi etkilemez demektir. Ayrıca entegrenin Q7 çıkışı 2 adettir. Biri o entegreye ait çıkıştır. 9 nolu pimdeki Q7 değil çıkışı ise başka 74hc595 entegresiyle birlikte çalışılacaksa gelen bilgiyi diğer entegreye aktarmak için kullanılır. Aşağıdaki 2. resimde SDO olarak gösterilmiş ucu takip ederseniz ne demek istediğimi daha iyi anlarsınız. 

Tabii ki bazı ek düşüncelerle burada da tasarrufa gidebilirsiniz.
Öncelikle 74HC595 devremize bakalım. Bu resimde 74hc595 entegresi sadece data kısmında kullanıldı ve 4 dijit kontrolü hala arduinonun 2,3,4,5. bacaklarından sağlanır. Bu şekilde 8 data hattı yerine 3 data hattı kullanılır. 74HC595 3 data hattı ile kontrol edilir.

Yukarıdaki çizimde hala arduinoyu display sisteminden kurtarmış sayılmayız. Yani hala belli frekansta kontrol işlemi yapmak zorunda. Bunu engellemek için her dijit için 74hc595 kullanırız.
4 adet 74hc595 kullanarak ve sadece arduino uzerinde 3 pim kullanarak arduinoyu multiplex çalışmadan kurtarırız. Bunu yaptığımızda arduino sadece display üzerine bir sayı yazmak istediğinde bu sayıyı yazmaya gider yazar ve diğer işlemlerine döner. Daha rahat bir çalışma ortamı sağlar.

Aşağıdaki devre ise bu şekilde her dijit için bir adet 74hc595 kullanılarak yapılmış devredir. Tabii ki bu devre de bir başka entegre de kullanılmıştır. Bu entegre sadece display akımını karşılamak için kullanıldığından, bu entegreleri küçük display için gözardı edebilirsiniz. (ULN2803 entegresi)

74HC595 entegresini bu şekilde kullanacaksanız data hattına yazılacak datayı da bir tablodan almanız gerek. Çünkü display üzerinde 1 sayısı oluşturmak için verilmesi gereken data ile 2 sayısı için verilmesi gereken data sıralı değildir. Yani siz 1 deyince 1 olmaz. Bundan dolayı 1 sayısı için 8 bitlik sayıyı tablodan almanız gerekir. Verilecek data aşağıdaki tablodan alınır. Arduino kütüphanelerinde bu datalar vardır. Kütüphane kullanmak istemezseniz ya da kütüphane kullanamayacağınız bir mikrodenetleyici kullanacaksanız, bu tabloyu göz önünde bulundurmanız gerekir. Sağdaki display gösterimindeki harflerle temsil edilmiş segmentlere verilecek datalar bu tablodan alınır.
Ayrıca bu sistemde de dezavantaj diyebileceğimiz bazı şeyler vardır. Dijit sayısı arttıkça bilgi seri data şeklinde gönderildiğinden ve her dijit için 8 bit kullanıldığından seri datanın tamamlanması uzun sürecektir. Mesela 1 dijit için 8 bit yollayacaksanız 10 dijit için 80 bit yollamak zorundasınız. Her ne kadar hızlı olduğunu düşünsek de belli bir zaman kaybı diyebiliriz.

 

 

 

 

 

 

 

 

Yukarıdaki devrenin dezavantajını biraz olsun hafifletecek bir sistem kullansak ve bu sistemde yukarıdaki tabloyu hiç kullanmasak. Nasıl olur. Tabii ki bu çözüm için 74HC595 ile birlikte displayin ortak anot veya ortak katot oluşuna göre display sürücü entegresi olan 7447 veya 7448 i kullanmamız gerek. Programımızı da daha küçük bir hafızaya koymuş olabileceğiz.  Aşağıdaki devrede 74HC595 entegresi 8 bit yerine 4 bitlik ikili kodlama olarak kullanılıyor. Bu şekilde de 1 adet 74HC595 entegresi 2 dijit kontrol edebiliyor olacak. Gönderdiğimiz 4 bit sayıların, display sürücü entegresinde karşılık gelen kodları ise bu tablodadır.

Yukarıdaki devrenin de dezavantajı var. Bu tip display sürücü entegrelerde Dp dediğimiz noktanın bağlantı ucu yok. Şayet bu noktayı kullanmak isterseniz ayrı kontrol etmeniz gerekir. Şemadaki R1 ve R9 dirençleri bundan dolayı boşta bırakılmıştır. Fakat 74HC595 data gönderim süresi yarıya düşmüştür.

Bütün bu devrelerin kendi avantajları ve dezavantajları var. Bunları tamamen yok etmek mümkün olmayabilir. En önemlisi Programı hazırlayan kişinin tercihidir. Arduino çok yoğun bir iş yapmıyorsa o zaman en az entegre ile tüm sistemi kontrol edebilirsiniz. Arduino zamanım bana kalsın display ile uğraşmasın diyorsanız diğer çözümleri deneyebilirsiniz.

Çözümler Bitti mi? Tabii ki HAYIR.
Mesela arduino kontrolünde display sürücü entegre kullanabilirsiniz. 7448 entegre ile arduino kullanmak 8 data hattını 4 data hattına düşürür aynı zamanda segment tablosunu kullanmanıza gerek olmaz. Şemadaki gibi bağlantı yaptığınızda 4 dijit çalışma için arduino multiplex çalışma yapar. Gördüğünüz transistörleri küçük displayler için kullanmasanız da büyük display akımları için kullanmanız gerekir.  Yine de ben bu transistörleri kullanmayı düşünün derim. çünkü 8 rakamı ile  en yüksek akımın arduino üzerinden geçmesine sebep olacaktır. Multiplex çalışmada bu kısa bir an olduğundan zarar vermeyebilir, fakat yine de uzun süreli çalışmalarda bu transistörlerin arduinonuzu koruyacağını düşünüyorum.
Tabii ki display sürücü kullandığınız için Dp noktası kontrol edilmemektedir. Bunu da göz ardı etmeyin derim.

Yukarıdaki devrenin bir benzerini kullanarak sadece bir entegre (cd4028) ekleyerek 10 dijit yapabiliriz. Zaten arduino 4 dijit kontrolü için 4 pim kullanıyordu. Bunu 4 bitlik sayıcı olarak düşünüp 0-9 arası saydırıyoruz. Kullandığımız entegre ise 4 bitlik sayıyı algılayıp kaçıncı çıkış kontrol edilecek buna göre çıkış veriyor. Yani arduino sadece 0-9 arası 4 bitlik sayı verecek ve multiplex kontrol çıkışı 4028 entegresinden kontrol edilecek. Bu şekilde 0-9 arası, yani 10 dijit aşağıdaki devre ile kontrol edilecek.  4028 entegresinin bilgileri buradadır.

Bunlardan başka çözümler de var. Mesela elektronik alışveriş sitelerinden alabileceğiniz 8 karakterlik max7219 entegreli modüller. Bunlar tamamen arduinonun yükünü kendi üzerine alır sadece arduino 3 kablodan seri iletişim yaparak dijitlere yazılacak kodu gönderir. multiplex kısmını MAX7219 entegresi yapar. Aşağıdaki  devre MAX7219 ile yapılmıştır. Max7219 ortak katot display kullanır. DİKKAT MAX 7219 ve 7221 gibi entegrelerde akım sınırlayıcı direnç vardır bunu mutlaka kontrol edin. burada gösterilen 9.53Kohm direnç önemlidir. Fakat bu değerde kullanmak zorunda değilsiniz. Bu en küçük değeri temsil eder bundan daha küçük olmamalı. sizler 10Kohm kullanabilirsiniz. Ya da datasheete bakıp displayinizin çektiği akıma bakıp 10Kohm dan daha büyük bir değer kullanabilirsiniz. 

Bundan başka, bu tip arduinoyu rahatlatan entegreler de bulunmaktadır. Mesela TM1637 entegresi. Bu entegre devresiyle yapılmış 4 dijit displayler de satış sitelerinde bulunur. Aslında entegre 6 dijite kadar kontrol edebilmektedir. Fakat piyasaya 4 dijit olarak modül sürülmüş.
Bu entegre de MAX7219 gibi multiplex taramasını kendisi yapıyor. Arduino sadece 2 kablodan yazılması gereken bilgiyi gönderiyor. Bu entegre ise Ortak Anot display kullanır.

Yukarıda bahsetmiştim. Display alırken ve sürücüsünü alırken ters alırsanız bir çözümü var demiştim. Mesela TM1637 entegresini aldınız ve displayleriniz Ortak anot olması gerekirken ortak katod gelmiş. Birbiriyle çalışmaz deyip yenisini sipariş etmeden önce, böyle bir çözüm işe yarayabilir. Aşağıdaki devrede transistörün yapısı gereği kollektördeki sinyal, beyz sinyalinin tersi olur. Yani siz 1 verdiğinizde kollektördeki sinyal 0 olacaktır. Bu da sizin ortak anot gibi ortak katot displayi kullanmanızı sağlayacaktır. Biliyorum çok uçuk bir örnek olacak. Fakat çözümcül yaklaştığınızda bu tip çevirici sistemleri de öğrenmenizde fayda var diye düşünüyorum.
Daima farklı bir bakış açısıyla bakmakta fayda vardır.

Büyük Displayleri kendiniz yapabilirsiniz ya da satış sitelerinden parça parça alabilirsiniz. Buradaki her segmentteki led sayısı ve çektiği akım farklı olacağından mutlaka gerekli akıma uygun transistörü seçmelisiniz.
Örnek satış yapılan display görüntüsü bu şekildedir. Bu tip displayleri kendiniz de hazırlayabilirsiniz. belli oranlar mevcut. Bunlara dikkat ederseniz düzgün bir görünüm elde edebilirsiniz. 3d printer ile de plastik kısımlarını yapabilirsiniz.
Plastik ölçüleri örnek olarak verilmiştir. Bu ölçülere yakın bir şekilde kendiniz de yapabilirsiniz.
Bununla birlikte PDF dosyasında büyük display yapımı için gerekli ölçüler mevcuttur. Bu ölçülerden de faydalanabilirsiniz. 

Buraya kadar alternatiflerimizi sıralamaya çalıştım. Tabii ki bu sistemlerden daha fazlası da vardır. Fakat popüler olanlar bu sistemler görünüyor. Arduino kullananlar kütüphane desteklerini bu entegrelerde bulabiliyorlar. Fakat programlara göz attığınızda kütüphane kullanımının gereksiz olduğunu görebileceksiniz. Ayrıca PIC, ARM, STM hatta raspberry pi kullanacaksanız bazı örnek verdiğim programları kolaylıkla dönüştürebilirsiniz. Tabii ki entegrelere ait datasheet ve diğer dökümanlara bakarak daha fazla fonksiyon da elde edebilirsiniz. Mesela TM1637 hem display sürer hem de 16 adet anahtar kontrolü yapar. Sizler dökümanları incelediğinizde daha çok bilgi edinebilirsiniz. TM1637 çin yapımı entegre olduğundan datasheet pek açıklamalı değil. Fakat bu konuyu inceleyen kişi çok güzel anlatmış onunda bilgilerini dökümanlar içerisinde bulabileceksiniz.

Programlar ve Dokümanlar buradadır.

Programlar arasında BEN yazan programlar benim yaptığım ya da düzeltme yaptığım programlardır. Bu programları PIC gibi diğer denetleyicilere de dönüştürebilirsiniz. Kütüphane kullanılmamaktadır. 

Dokümanlar arasında örnekler dizinler halindedir. Program dosyası, proteus dosyası ve çizim dosyası vardır. Bununla birlikte proteus 7.10 ve proteus 8.4 örnek dosyaları olduğundan bilgisayarınızda proteus 8.4 ve yukarısı yoksa, bazı proteus dosyalarını açamazsınız. Proteus 8.6 yı bu face grubuna üye olarak yükleyebilirsiniz. Bu grupta proteus hakkındaki sorularınıza yanıt da bulabilirsiniz.

Bazı 7 segment display devrelerinde seri direnç konulmadığını görüyorum. Devre çalışıyor fakat direnç yoksa akım sınırlamada olmadığı için problem yaratabilecektir.
Sebebi ise videoda görülmektedir. 

Konu hakkındaki düşüncelerinizi, buradaki yorum kısmına bırakırsanız daha sonra gelecek olan kişiler sizin yorumlarınızdan da faydalanacaktır.

 

6 Comments

  1. Şerit LED ler ile Display çalışması ve hangi entegre ile sürebileceğimiz konusunda yardımcı olurmusunuz?

  2. Sayin TC Safak , Elinize saglik güzel bir calisma. Ben cok önceleri bu displayleri tanidigimda, okadar hayran kaldimki 1980 de ilk digital saatimi, 7448, 7490 kullanarak yaptim. O zamanlar digital saat henüz yoktu. Son iki senedir de face de paylasmak icin calismalarim oldu ve paylastim. Bazilarini sizde gördünüz sanirim. Yukarda bahsettiginiz gibi 4 sifreli devrelerde arduino yavas kaliyor. ben bunu denedim. O esnada arduinoya baska bir is yaptirmak zor oluyor bu konuda haklisiniz. oda arduino nun yavasligindan oluyor. bir de araya delay girdimi digitlerde titreme oluyor. Gecen sene bu konuyu denedim. Fakat ozamanlar arduino bilgim azdi fazla ileri gidemedim. Yeni olarak 4 digitli display aldim tekrar deneyecegim. Ve 8 digitli max 7219 aldim ve kütüp hane indirdim ilk denemem iyi gitti bakalim bundan sonra neler yapabilecegim. Ben digital devreler yaparken saat veya frekans metre , transistörlerin yerine 7406 veya 7407 Buffer lari kullandim. Böylelikle bacak ve direnc kullanmaktan kurtuldum. Bu sitede ilk yorumum umarim arkadaslar degerlendirirler.

  3. LED veya display konusunda ben her zaman minimum isik almak icin maksimum direnc kullanirim. Zaten ledlerde farkli akimlarla calisiyor. Veya renk faktöründen dolayi, kirmizi olan LED normal parlak yandigi halde, yesil olan led cok fazla parlak yaniyor. genelde tekil LED lerle 330 yeterli oldugu halde, akimdan tasarruf etmek icin iki misli bir direnc secile bilir. Hatta bir kiloOhm bir direncle yeterli isik alinabilir. Burda denemelerde Led ler acikta oldugu icin zayif gibi yansada, etraftaki gün veya diger kuvvetli isiklar Led isigini zayif kilabilir. Ama bir projede önüne kirmizi icin kirmizi yesil icin yesil filtre cam konursa ledlerin isigi cok iyi gözükür. Tabi ledlerin ömrü önemlidir. bir projede led veya displayler uzun zaman dayanmalidirlar. Prode harici isik dan dolayi ledler kuvvetli yanmasi icabederse, dimmer ile ayarlanabilir olmasi uzun zaman kullanma imkani verir.

  4. Multiplexer i ilk 80 li yillarda tanidim. Cok interesan buldum. Ve hemen bir deney yaptim.
    Projem su idi , bir kac adet 556 (her birinde iki tane 555 var) ile cok cesisli frekanslarda müzik sesi üretip kapi zili yapmak. Ve yaptim. yaptigim müzigi multiplexer ile cikisa gönderdim. Bunun icin 556 nin yarisini Clock olarak kullandim. Cikista müzigi bir anfi yardimiyla yükselttim hoparlöre verdim. Multiplexer cok girisi olup tek cikisi oldugu zaman bir cok bilgiyi bir arada toplayabiliyor. Ve cikista bütün bilgiler siraya giriyor bunuda Clock taktiyla mümkün kiliyor. Sonra tabi bu datayi hedefe vardik tan sonra demultiplexerle tekrar ayristirabiliyor. Ben deneyimde kapi zilini kullandim. Bu konuda fazlada arastirmadim.

Murat için bir cevap yazın Cevabı iptal et

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