Bölüm-6 Sürücü Entegreleri İle Çalışmak | |||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
7447 ve 7448 BCD - 7-Segment Gösterge SürücüleriMikrodenetleyiciler ile profesyonel düzeyde çalışırken fiziki sınırları zorlayan koşullarla karşılaşırız. Mikrodenetleyicilerin pin sayısının yetersiz kalması bu sorunlardan biridir. Bu tür sorunları aşmak amacıyla pin sayısını daha etkin ve idareli kullanmamızı sağlayan çeşitli sürücü entegreleri vardır. Amaca uygun ve doğru bir tercihle sınırlı sayıda pini bulunan mikrodenetleyicinizi daha fazla sayıda noktayı kontrol etmede kullanabilirsiniz. Sürücü entegrelerinin kullanılmasının bir başka avantajı da mikrodenetleyicinin çıkış pinlerinin tamponlanması ve böylece akım koruması sağlanmasıdır. Sürücü entegreleri yardımıyla daha yüksek akım çeken devre bileşenleri ile mikrodenetleyici arasında koruma sağlanmış olur. 7-Segment göstergelerin mikrodenetleyiciler ile sürülmesi 3 numaralı başlık altında gösterilmişti. Dikkat edileceği üzere göstergenin sahip olduğu bacak sayısı kadar mikrodenetleyici çıkışı kullanılmıştı. Birden fazla göstergenin kullanılması durumunda, mikrodenetleyicinin pin sayısı yeterli gelmeyeceğinden göstergelerin paralel bağlanması ve tarama tekniğiyle sürülmesi de açıklanmıştı. Tek bir çıkış hattından çok daha fazla sayıda göstergenin tarama tekniğiyle sürülmesi belirgin bir kıpraşmaya neden olabilir. Bu durum görsel olarak istenmeyen bir durum yaratır. 7-segment göstergeleri kendi aralarında gruplayarak sürebiliriz. Bu durumda fazladan pin ihtiyacı ortaya çıkacaktır. Böyle bir durumda kullanacağımız pin sayısını azaltmak için 7-segment göstergeler için geliştirilmiş ve giriş pin sayısı daha az olan sürücü entegresi kullanmak gerekir. Ek-I7’de ortak anotlu 7-segment göstergeler için kullanılan TTL seviyeli 7447 ve ortak katotlu 7 segment göstergeler için kullanılan 7448 sürücü entegreleri ayrıntılı olarak açıklanmıştır. Bu sürücü entegreleri yardımıyla ihtiyaç duyulan 7 pin sayısı BCD giriş formatında olan 4 pin sayısına düşürülür. Şekil 6.1’de halı sahalarda da gördüğümüz ikişer haneli sonuç ekranı (skor board) uygulaması görülmektedir. Bu uygulamada her iki takım için de ikişer gösterge kullanılmıştır. Mikrodenetleyici olarak PIC16F887 seçilmiştir ve her ortak katotlu gösterge için bağımsız olarak birer 7448 BCD – 7 segment ortak katot sürücü entegresi kullanılmıştır. Bu uygulamada da tarama tekniği kullanılmıştır ancak göstergeler ikişer gruba ayrılmıştır. Dolayısıyla toplam 8 pin entegrelerin sürülmesi için tahsis edilmiştir. Mikrodenetleyicinin B portu üzerinden bağlanan butonlar yardımıyla A ve B takımları için skor değerlerinin ileri/geri yönde hareket ettirilmesi sağlanmıştır.
Şekil-6.1 İki haneli dijital skor ekranı
4.8 numaralı başlıkta harici zaman kesmesinin kullanımında anlatılan 4 segmentli dijital saat uygulamasından farklı olarak bu devrede UDN2981A kaynak sürücüsü entegresi kullanılmıştır. Uygulamanın gerçek fiziki hayatta anlamlı olabilmesi için bu tür sürücü entegrelerinden sıklıkla yararlanılır. Bilindiği üzere hobi amaçlı ya da küçük boyutlu uygulamalarda 9 mm genişliğinde ufak 7 segment göstergeler 5V çalışma altında yeterli gelmektedir. Ancak daha büyük boyutlu ve uzak mesafeden görülmesi gereken görüntü uygulamalarında doğal olarak bu tür göstergeler anlamlı olmayacaktır. Uygulama aynı akımı çeken ancak bu akımı daha yüksek çalışma voltajı altında çeken büyük boyutlu göstergelerde kullanabilmek için tasarlanmıştır. UDN2981A sürücü entegresi, mikrodenetleyiciler ve TTL entegreleri gibi standart 5V çalışma voltajı altında çalışan devre bileşenleriyle daha yüksek DC gerilimlere ihtiyaç duyan devre bileşenlerinin sürülmesinde tercih edilir. Piyasada 100 mm ve 200 mm boyutlarında 7-segment göstergeler bulunmaktadır. Bu göstergeler ideal olarak 12-15V DC gerilime ihtiyaç duyar. UDN2981A sürücü entegresi 8 giriş için 8 çıkış sunan çalışma kaynak gerilimi aralığı 5V – 50V arasında olan ve 15V çalışma altında her bir çıkışından 120 mA akım çekilebilen bir entegre devre bileşenidir. Girişleri 5V’luk TTL sitemlerle uyumlu çalışacak şekilde tasarlanmıştır. Daha ayrıntılı bilgi için veri kılavuzunu incelemeniz tavsiye edilir.
Şekil-6.2 UDN2981A entegre devresinin pinleri
Kitabın haberleşme protokolleri ve uygulamaları başlığı altında SPI seri iletişim tekniğinden bahsedilecektir. Bir SPI donanımı olan MAX7219 BCD – 7-segment ortak katot sürücü entegresinden yalnızca 1 adet kullanmak suretiyle bu uygulamanın daha az sayıda MCU pini kullanan modelini tasarlamak mümkündür. Uygulamanın daha yüksek performansla çalışması için dâhili 8 MHz osilatörle çalışabilen PIC16F887 mikrodenetleyicisi tercih edilmiştir. Uygulamanın kaynak kodu Tablo 6.1’de gösterildiği gibidir. Tablo 6.1 İki haneli dijital skor ekranı uygulaması mikroC kodu
74HC595 Kaydırmalı KaydedicisiKaydediciler (Registers) sayesinde tek bir hat üzerinden seri bilgi paralel olarak işlenebilir. Mikrodenetleyicinin portları aynı anda çok sayıda cihazı kontrol etmeye yeterli gelmeyebilir. Kaydediciler sayesinde port çoklaması gerçekleştirilerek özellikle kayan yazı ve grafik LCD uygulamalarında yüksek performans elde edilebilir. Çok sayıda dotmatriks bir ekrana kayan yazı efektinin uygulanması kaydedici entegrelerinin kullanımıyla mümkün olmaktadır. Yaygın olarak kullanılan kaydedici entegrelerinden olan 74HC595 bir kaydırmalı kaydedicidir (Shift Register). CMOS yapısıyla mikroişlemci ve mikrodenetleyici gibi CMOS yapısına sahip entegrelerin seri iletişim arabirimlerine doğrudan bağlanabilir. Paralel çıkışları hafıza özelliklidir, diğer bir ifadeyle bir önceki durumu tutabilir. Bu durum elektronikte ‘latch’ olarak adlandırılır. Şekil 6.3’te 74HC595 entegresinin entegre şeması ve lojik diyagramı gösterilmiştir. Çalışma voltajı aralığı 2-6 V arasıdır.
Şekil-6.3 74HC595 8 bitlik kaydırmalı kaydedici entegresi
Bu entegrenin doğru şekilde kullanılabilmesi için bacak işlevlerini kısaca bilmek gerekir. Tablo 6.2’de bacak isimleri ve işlevleri verilmiştir. Tablo 6.2 74HC595 kaydırmalı kaydedici bacak isimleri ve işlevleri
74HC595 entegreleri kaskad bağlanarak çok sayıda 8 bitlik verinin sıralı olarak kaydırılması sağlanır. Bu entegrenin kaskad bağlanması için 9 numaralı SQH çıkışı bir sonraki entegrenin DS girişine bağlanır. 74HC595’in çalışma mantığının anlaşılması mikrodenetleyici ile kontrol etmenizi kolaylaştırır ve karmaşık uygulamaları hatasız hazırlamanızı sağlar. Şekil 6.4’te PROTEUS-ISIS® programında kaskad bağlı iki kaydırmalı kaydedici entegresinin çalışma ilkesi gösterilmiştir.
Şekil-6.4 Kaskad bağlı 74HC595'lerin çalışma ilkesi
Bu devrede CLK ve LATCH olarak isimlendirilmiş girişler PROTEUS-ISIS® programının LOGICTOGGLE aracı kullanılarak kontrol edilmektedir. CLK’nın her yükselen kenarında seri bilginin bir biti kaydırmalı kaydedicinin LSB bitine yazılır. Bu yazılan bilginin çıkışa aktarılması için LATCH girişine de yükselen kenar tetiklemesi uygulanmalıdır. Sıralı gelen bilginin diğer bitlerinin kaydediciye yazılması için CLK girişinin yeniden tetiklenmesi gerekir. Her tetiklemede seri olarak gelen bilginin tetikleme anındaki biti kaydedicinin LSB bitine yazılır. Daha önceden yazılmış bitler sırayla bir sonraki bite kaydırılır. LATCH girişi tetiklenmediği sürece bu sıralı kaydırılan bilgi çıkışa aktarılmaz. İlk kaydedicinin 9 numaralı çıkışı bir sonraki kaydedicinin seri girişi olur. Böylece en baştan gönderilen seri bilgi sıralı olarak diğer tüm kaskad bağlı kaydedicilere iletilmiş olur. 74HC595 kaydırmalı kaydedicisinin Darbe (SH_CP - Clock), Veri (DS - Data) ve Tutma (ST_CP - Latch) girişleri mikrodenetleyici tarafından sürülmek suretiyle kaydedici çıkışları istenildiği gibi kontrol edilebilir. Bilgi bir bit kaydırılıp bir kez saat darbesi gönderilir ve bu işlem 8 bitlik (genelde) byte halinde entegreye yazılır. Eğer peşi sıra bilgi yazılacaksa ve entegreler sıfırlanmaz veya resetlenmez ise gönderilen bir sonraki paket veri yazımında gelen veriler ilk entegreye yazılır ve daha önce ilk entegrede olan veriler 2. entegreye kaydırılır. Çıkış aktif yapılınca bilgiler görüntülenir. Sadece port genişletme veya gösterge sürme gibi işlemler yapılacaksa bu entegreler Şekil 6.4’teki gibi bağlanıp reset ucu +5 Volta, Çıkış Etkinleştirme (Output Enable - OE) ucu – şaseye bağlanmalıdır. Eğer daha fonksiyonel bir devre yapılacaksa ve bilgi peşi sıra aktarılmayıp ayrı demetler halinde tüm entegrelere tek seferde yazılacaksa o zaman reset ucu da mikrodenetleyiciyle kontrol edilecektir. Kaydırmalı Kaydediciye MCU İle Veri YazmaŞekil 6.5’teki devrede mikrodenetleyicinin girişlerindeki bitlerin sıralı olarak çıkışa aktarılmasını sağlayan bir uygulama gösterilmiştir. Mikrodenetleyicinin 4 bit paralel veri girişi 74HC245 üç durumlu çift yönlü alıcı/verici (transceiver) entegresi üzerinden gerçekleştirilmiştir. Uygulamada Mikrodenetleyicinin port değişim algılama özelliğine sahip B portunun RB4-7 portları kullanılmıştır. Portlardan herhangi birinde meydana gelen değişim durumunda 4 bitlik veri tarama yöntemiyle seri olarak 74HC595 kaydırmalı kaydediciye gönderilmektedir.
Şekil-6.5 Mikrodenetleyici ile kaydırmalı kaydediciye veri yazılması
Uygulamada mikrodenetleyicinin RA0 portu Darbe (Clock), RA1 portu Veri (Data) ve RA2 portu Tutma (Latch) çıkışları olarak kullanılmıştır. 74HC245 alıcı/verici entegresinin 1 numaralı Yön Kontrol (Direction Control - DIR) pini lojik-1 olduğu müddetçe B portunun RB4-7 pinlerinden birinde gerçekleşecek değişim 74HC595 entegresine aktarılmaktadır. Bu uygulamada verinin okunup seri olarak gönderilmesi ve tekrar paralel olarak çıkışta gösterilmesi tamamen yazılım yöntemiyle yapılmaktadır. Tablo 6.3 74HC595 kaydırmalı kaydedicisinin sürülmesi mikroC kodu
Kaydırmalı Kaydedici İle Çoklu Ekran KontrolüMikrodenetleyicilerle kaydırmalı kaydedicilerin yaygın olarak kullanıldıkları alanlardan birisi kayan yazı uygulamalarıdır. 8x8 Hücreli nokta matris LED panellerden çok fazlası kullanılacak ve kayan yazı gibi bir uygulama yapılacaksa, çıkışı tutma özellikli kaydırmalı kaydedicilerin kullanımı tercih edilir. Şekil 6.6’da 8 satır (R1-R8) ve 8 sütundan (C1-C8) oluşan bir nokta matrisin LED diziliminden oluşan yapısı gösterilmiştir.
Şekil-6.6 8x8 Nokta matris iç yapısı
Bu matris göstergelerde karakter oluşturulması 8-bitlik ASCII kod ilkesine göre gösterilecektir. Her ne kadar tasarlanan uygulama 8x8 matrislerle gerçekleştirilmiş olsa da karakter genişlikleri 5x8 ölçüleriyle sınırlandırılmıştır. R1-R8 (Row) hatlarıyla gösterilen uçlar 74HC595 kaydırmalı kaydedicisinin çıkışlarına bağlanacak pinlerdir. C1-C8 hatları (Column) ise mikrodenetleyicinin ilgili portuna sırasıyla bağlanacak olan pinlerdir. Tasarımınıza bağlı olarak satır ve sütun hatlarının bağlantısını değiştirebilirsiniz. 5x8 bir düzlemde örnek olarak ‘A’ harfinin kodunun nasıl türetildiği Şekil 6.7 üzerinde gösterilmiştir (http://dotmatrixtool.com/# sitesinde karakter kodunun nasıl üretildiğini gösteren bir web tabanlı uygulama mevcuttur).
Şekil-6.7 8x8 Nokta matris için karakter üretilmesi
Şekilde görüldüğü üzere 8x8 nokta matris üzerinde 5x8 boyutunda üreteceğimiz karakteri öncelikle sağa hizalı olarak hazırlıyoruz. Her bir satırı 1 baytlık veri olarak düşünecek olursak 00h – FFh arasında değişen bir onaltılı kod elde edileceği görülür. D3-D0 arasını baytımızın LSB kısmı, D7-D4 arasını ise MSB kısmı olarak düşünürsek örnek karakter için şekilde elde edilmiş kodu bulursunuz. Şekil 6.8’de benzer mantıkla tasarımı yapılmış 5 adet 8x8’lik nokta matris kayan yazı sürücü devresi gösterilmiştir. Yapılan uygulamada nokta matrislerin sütun hatları (katot bacakları) mikrodenetleyicinin portu üzerinden sürüldüğü için bu portların çıkışına yeterli sayıda 7404 entegresi bağlanmalıdır. 7404 entegresi içinde bağımsız olarak 6 adet NOT kapısı bulunduran bir lojik tersleme entegre devresidir. Dolayısıyla bu entegreden iki adet kullanılması gerekir. PROTEUS-ISIS® programında çizim kolaylığı olması açısından 74HC595 ile nokta matris göstergeler arasına direnç çizilmemiştir. Gerçek uygulamada her bir bacak için olmak üzere toplamda 5x8 = 40 adet 330 Ω direnç bağlanmalıdır.
Şekil-6.8 8x8 Nokta matris ile kayan yazı uygulaması
ASCII kodu tablosunda ekrana yazdırılabilir karakterler “32” boşluk karakteriyle başlar. Yaygın olarak kullanacağımız tüm karakterleri 32 kodundan başlayarak sıralı şekilde gittiğimizde ‘ ~ ’ işaretine kadar toplamda 95 alfanümerik karakter elde ederiz. Tüm bu karakterler için bir look-up tablosu hazırlanmıştır. Her bir karakterin 8x8 nokta matris alanı üzerine yazdırılması için 8 baytlık bir veri akışı olacaktır. Dolayısıyla program kodu içinde [95]x[8] boyutunda bir char tipinde dizi matris değişkeni oluşturulur. Ancak bilindiği üzere, mikroC’nin ANSI C standartı sayesinde char veri tipinde ilk değer ataması sırasında matris boyutunu belirtmek zorunluluğu yoktur. Bu nedenle sonradan başka karakterlerin de eklenmesi ihtimali de göz önünde bulundurularak [ ] x [8] şeklinde açık boyutlu bir dizi oluşturulur. Tablo 6.4’te look-up tablosuyla birlikte tüm program kodu sunulmuştur. Program koduna dikkat edildiğinde [8][5] boyutunda bir tampon dizisi görülür. Bu dizi değişken ile her bir karakter kümesinin kademeli olarak bir sonraki matrise aktarılması sağlanır. 74HC595 seri veri girişi aynı anda tek bitlik veri aldığından bu tampon dizisindeki bitler okunur ve bilgi olup olmaması durumuna göre maskelenerek sıralı şekilde entegre seri veri girişine gönderilir. Diğer taraftan main() ana fonksiyonu içinde 8’lik döngüler halinde B portu sıralı şekilde aktif edilmektedir. Tablo 6.4 8x8 Nokta matris ile kayan yazı uygulaması mikroC kodu
|