UYGULAMA ÖZELLİKLERİ
Bu uygulama, bilgisayar yada başka bir sistemden bağımsız olarak çalışır. Bilgi, bir PC/AT klavye aracılığıyla girilir.
Yazılabilecek ve gösterilebilecek metin, (büyük İngilizce alfabetik karakterler, 0...9 nümerik karakterler, nokta ve boşluk) toplam 35 karakterden oluşur.
Klavyeden girilen ilk karakter hemen görüntülenir. İkinci karakter girildiğinde, ilk geçiş hatalı olabilir. Ama ikinci geçiş mutlaka düzgün olacaktır. Her yeni karakter girmenizde göstergenin bir "afallama" dönemi geçirmesinin nedenleri makale içinde açıklanacaktır.
Klavyeden girilen karakterlere ait kodlar PIC'in EEPROM'una kaydedilir. Dolayısıyla metni çok uzun süre PIC içinde saklayabilirsiniz.
Kaydedilecek karakter sayısı, ya da metin uzunluğu, boşluk dahil olmak üzere 63'tür. EEPROM'un H'00' adresi ise toplam karakter sayısını saklamaktadır.
Sütun sayısı her ne kadar 24 olarak verildiyse de, kolaylıkla arttırılabilir. PIC16F84A'nın RAM alanında bu iş için yeteri kadar boşluk vardır.
Bu uygulama için indirilebilecek dosyalar, bir liste halinde sayfanın sonundadır.
İŞE BAŞLAMA ZAMANI
Yukardaki şema Eagle v4.03 ile çizildi. Eğer şema dosyasını açmak isterseniz, mutlaka sözü edilen sürümü kurmalısınız.
Önce uygulamanın pahalı ve karmaşık bir yapısı olan LED display üzerinde duralım. Burada her ne kadar 8x 8 gösterge görünüyorsa da, uygulamada 7 satır kullanıldı. Çünkü proje 5x7 matrix display için tasarlanmıştı. 5x7 ortak katot herhangi bir gösterge kullanabilirsiniz.
yukaridaki resim tarayıcıdan alındı. Bizim kullandığımız display FYM-23881BS-11'i 1/1 oranında gösteriyor.
Boyut yaklaşık olarak 6x6 cm.
Her LED 5 mA gibi düşük bir akımla doyurucu bir ışık verebilir.
Fiatı ise yaklaşık 4 USD.
Ortak katot bir display'i yakmak için satırlardan lojik 1, sütunlardan lojik 0 göndermeniz gerekir. Ortak anot bir display kullanmak içinse satırlardan lojik "0" sütunlardan lojik "1".
Ortak anot bir display kullanmanız gerekiyorsa, iki yol izleyebilirsiniz. Donanımda yada yazılımda değişiklik yapmak. Donanım değişikliği, display'in yanması için gereken lojik durumları sağlamaktan geçer. Bizce mantıklı olan budur.
Yazılımla da benzer bir çalışma koşulu sağlanabilir. PIC Assembly komutları arasından COMF komutu bu amaçla kullanılabilir.
Bu gösterge, Eagle'ın lbr dizini altına kopyalanması gereken ccf.lbr dosyasına eklendi. Bu dosyayı ccf.zip adıyla sayfa sonundaki bağlantıdan indirip kullanabilirsiniz.
FYM-23881BS-11 baskı devrede böyle yer alacak.
C1...C8 (Column1...8) sütun yada kolonları, R1...R8 (Row1...8) ise satırları gösteriyor.
Satır ve sütunlar neredeyse rastgele bir biçimde yerleştirilmiş. Yukardaki satırlarda bu göstergenin karmaşık yapısından söz ederken bu durum anlatılmak istenmişti.
Ancak yapılan Internet araştırmasında incelenen tüm dot matrix display'lerin aynı yapıda olduğu görüldü.
Eğer kendiniz bir gösterge yapmak istiyorsanız, bu işin oldukça çetin geçeceğini söyleyebiliriz.
Maliyetin hazır bir display'den daha fazla olduğunu ve profesyonel bir görünüm elde edemeyeceğinizi düşünüyorsanız bu işten vazgeçebilirsiniz. Elde bir gösterge yapmanın bir yararı olabilir; Bir LED hasar gördüğünde onu değiştirebilirsiniz.
DONANIM
Bazı elektronikçiler bir uygulamayı önce şema olarak görmeyi tercih eder. Bu, hiç te yabana atılacak bir yaklaşım değildir. Çünkü şema, bir projeyle ilgili tüm ayrıntıları açıklayabilir.
Bizim hazırladığımız şemanın sayma ve sürme devrelerinde 7 adet TTL tümdevre kullanıldı. Bu sayı 4'e hatta 3'e indirilebilir. Ancak devrenin tasarlanması aşamasında, çıkabilecek sorunlar gözönüne alınarak çizim yapıldı. Daha sonra da bir sadeleştirmeye gidilmedi. Akımdan da tasarruf amacıyla C-MOS tümdevreler de rahatlıkla kullanılabilir.
IC4, IC5, IC6 (74160) BCD sayıcıları sırayla sayma yapar. IC4'ün BCD çıkışları B'0000' iken IC1'in (7442) Q0 çıkışı aktiftir. 7442'nin Q0 çıkışı, PNP TR1 transistörünü sürer. 74160 için aşağıdaki tabloyu inceleyiniz.
74160 BCD SAYICI İÇİN DOĞRULUK TABLOSU
Adım CLR ENT CLK QD QC QB QA AÇIKLAMA
0 x x 0 0 0 0 RESET
1 0 x QD QC QB QA Sayma yok.
1 1 1 0 0 0 1
2 1 1 0 0 1 0
3 1 1 0 0 1 1
4 1 1 0 1 0 0
5 1 1 0 1 0 1
6 1 1 0 1 1 0
7 1 1 0 1 1 1
8 1 1 1 0 0 0
9 1 1 1 0 0 1
7442 tümdevresinin aktif olan çıkışı lojik 0, diğer 9 çıkış ise lojik 1'dir. Bu durum, ortak katotlu bir göstergeyi sürmede kolaylık sağlar.
7442 ONLU KOD ÇÖZÜCÜ İÇİN DOĞRULUK TABLOSU
ONLUK GİRİŞLER ÇIKIŞLAR
D C B A Q9 Q8 Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
0 0 0 0 0 1 1 1 1 1 1 1 1 1 0
1 0 0 0 1 1 1 1 1 1 1 1 1 0 1
2 0 0 1 0 1 1 1 1 1 1 1 0 1 1
3 0 0 1 1 1 1 1 1 1 1 0 1 1 1
4 0 1 0 0 1 1 1 1 1 0 1 1 1 1
5 0 1 0 1 1 1 1 1 0 1 1 1 1 1
6 0 1 1 0 1 1 1 0 1 1 1 1 1 1
7 0 1 1 1 1 1 0 1 1 1 1 1 1 1
8 1 0 0 0 1 0 1 1 1 1 1 1 1 1
9 1 0 0 1 0 1 1 1 1 1 1 1 1 1
7442'nin Q0 çıkışı, başka bir görev daha yapar. Bu görev, kendinden sonraki sayıcıyı sıfırlamaktır. IC4 BCD sayıcısı 1 adım ilerlediğinde, IC1'in Q1 çıkışı lojik 0 olur. Bu durum, IC1'in Q9 çıkışının aktif olmasına kadar sürer. Bu aşamaya gelindiğinde sayıcıların çalışma koşullarında değişiklik olur.
IC1'in Q9 çıkışı lojik 0 olunca, IC4 tümdevresi ENT girişinin "0" olması nedeniyle saymasını durdurur. Aynı "0" işareti ise IC7A (7402) NOR kapısının açılmasına ve saatin her düşen kenarıyla "1" üretmesine yol açar. Aşağıdaki tabloya bakınız.
7402 NOR (VEYA) KAPISI
GİRİŞ ÇIKIŞ
A B Q
0 0 1
0 1 0
1 0 0
1 1 0
Üretilen bu işaret zincirin ikinci halkasındaki IC5'in bir adım ilerlemesine neden olur.
IC2'nin Q0 çıkışının atlandığına dikkat ettiniz mi? Eğer bunu sağlamazsanız aynı bilgi, farklı iki sütunda gösterilir ve bu durum karmaşaya yol açar.
IC2 saymasını, Q9 çıkışına kadar olağan biçimde sürdürür. Bu noktada, IC1'in akıbetine uğrayarak saymasına ara vermek zorunda kalır. IC7C kapısı denetimi ele alarak zincirin son halkasındaki IC6 için saat darbeleri üretmeye başlar.
IC3 onlu sayıcısının Q8 çıkışı "0" olduğunda tüm sayıcılar başlangıca döndürülür. Aynı sıfırlama noktası, PIC16F84A tarafından da zaman zaman kullanılmaktadır.
Özet
Tarama yöntemini kullanan bu uygulamada, sırayla lojik "0" olan 24 çıkış kullanılmaktadır. Onlu sayıcıların Q9 çıkışları, sayıcıları "park ettirmek" amacıyla, Q0 çıkışları (ilk onlu sayıcı hariç) ise sonraki sayıcıyı sıfırladığından ve 1 adımlık bir zıplama gerektiğinden kullanılamamaktadır.
Proteus, SnagIt ve Ulead Gif Animator yardımıyla anlattıklarımızı resimleyelim.
Bu animasyonda 25 sütunun sürülmesi sırasında, 7442 onlu sayıcısının çıkışlarının lojik seviyelerini adım adım izleyebilirsiniz.
"Neden 24 değil de 25 sütun var?" diyebilirsiniz. Bunun nedeni, ilk göstergenin elde yapılması ve 25 sütundan oluşması.
Bu devre, D27 LED'i yandığında kendini sıfırlar. Aslında D27'nin yandığını göremeyiz. Çünkü tarama çok hızlı bir şekilde gerçekleşir. Eğer tarama frakansı çok yüksek olursa, tüm LED'lerin aynı anda yandığı izlenimi ediniriz. Tarama sisteminin mantığı da bu yanılgı üzerine kurulmuştur.
Yukardaki display 25 sütun ve 1 satırdan oluşur. Eğer anlamlı bir görüntü elde etmek istiyorsak, daha fazla satır kullanmalıyız.
Bu gösterge, bizim aradığımız özellikleri sağlayacak gibi görünüyor. Ama hala anlamlı bir karakter oluşturmak için gerekli bilgiyi alamadınız. Çünkü, bu bilgiyi tarama kısmı değil, mikrodenetleyici üretir. Tarama bölümü yalnızca sütunları sırayla aktif etmek ve ara sıra da RESET yapmakla görevlidir.
Yukardaki animasyonlarda satırlardan sabit olarak lojik "1" gönderildi. Eğer satırlardan her seferinde, karakterin bir sütununda bulunan veriyi CLOCK'la eşzamanlı olarak gönderirsek satır verisini de elde etmiş oluruz.
Şimdi bir L karakterinin nasıl oluşturulacağına bakalım
L karakteri 4 temel adımda görüntülenir.
Kırmızı LED'ler yerine "1" yazdığınızda, PIC tarafından gönderilecek binary veri ortaya çıkar.
1. adım: İlk sütun seçilerek satırlardan B'1111111' ikili sayısı gönderilir. Bu işlemle L'nin 4. sütunu, display'in ilk sütununda gösterilmiş olur. Gösterme süresi 1.583 mS kadardır. Veri bir adım sola ötelenir.
2. adım: Display'in 2. sütunu seçilerek L'nin 3. sütunu satır bilgisi olarak (B'0000001') gönderilir. Veri bir adım sola ötelenir.
3. adım: Display'in 3. sütunu seçilerek L'nin 2. sütunu satır bilgisi olarak (B'0000001') gönderilir. Veri bir adım sola ötelenir.
4. adım: Display'in 4. sütunu seçilerek L'nin 1. sütunu satır bilgisi olarak (B'0000001') gönderilir. Eğer gösterilecek başka bir karakter varsa ötelemeye devam edilir. Gösterilecek karakter yalnız L ise, ya işlemler tekrarlanır, ya da bizim yaptığımız gibi gösterge boyunca kayma işlemi sürer.
Bu uygulama, bilgisayar yada başka bir sistemden bağımsız olarak çalışır. Bilgi, bir PC/AT klavye aracılığıyla girilir.
Yazılabilecek ve gösterilebilecek metin, (büyük İngilizce alfabetik karakterler, 0...9 nümerik karakterler, nokta ve boşluk) toplam 35 karakterden oluşur.
Klavyeden girilen ilk karakter hemen görüntülenir. İkinci karakter girildiğinde, ilk geçiş hatalı olabilir. Ama ikinci geçiş mutlaka düzgün olacaktır. Her yeni karakter girmenizde göstergenin bir "afallama" dönemi geçirmesinin nedenleri makale içinde açıklanacaktır.
Klavyeden girilen karakterlere ait kodlar PIC'in EEPROM'una kaydedilir. Dolayısıyla metni çok uzun süre PIC içinde saklayabilirsiniz.
Kaydedilecek karakter sayısı, ya da metin uzunluğu, boşluk dahil olmak üzere 63'tür. EEPROM'un H'00' adresi ise toplam karakter sayısını saklamaktadır.
Sütun sayısı her ne kadar 24 olarak verildiyse de, kolaylıkla arttırılabilir. PIC16F84A'nın RAM alanında bu iş için yeteri kadar boşluk vardır.
Bu uygulama için indirilebilecek dosyalar, bir liste halinde sayfanın sonundadır.
İŞE BAŞLAMA ZAMANI
Yukardaki şema Eagle v4.03 ile çizildi. Eğer şema dosyasını açmak isterseniz, mutlaka sözü edilen sürümü kurmalısınız.
Önce uygulamanın pahalı ve karmaşık bir yapısı olan LED display üzerinde duralım. Burada her ne kadar 8x 8 gösterge görünüyorsa da, uygulamada 7 satır kullanıldı. Çünkü proje 5x7 matrix display için tasarlanmıştı. 5x7 ortak katot herhangi bir gösterge kullanabilirsiniz.
yukaridaki resim tarayıcıdan alındı. Bizim kullandığımız display FYM-23881BS-11'i 1/1 oranında gösteriyor.
Boyut yaklaşık olarak 6x6 cm.
Her LED 5 mA gibi düşük bir akımla doyurucu bir ışık verebilir.
Fiatı ise yaklaşık 4 USD.
Ortak katot bir display'i yakmak için satırlardan lojik 1, sütunlardan lojik 0 göndermeniz gerekir. Ortak anot bir display kullanmak içinse satırlardan lojik "0" sütunlardan lojik "1".
Ortak anot bir display kullanmanız gerekiyorsa, iki yol izleyebilirsiniz. Donanımda yada yazılımda değişiklik yapmak. Donanım değişikliği, display'in yanması için gereken lojik durumları sağlamaktan geçer. Bizce mantıklı olan budur.
Yazılımla da benzer bir çalışma koşulu sağlanabilir. PIC Assembly komutları arasından COMF komutu bu amaçla kullanılabilir.
Bu gösterge, Eagle'ın lbr dizini altına kopyalanması gereken ccf.lbr dosyasına eklendi. Bu dosyayı ccf.zip adıyla sayfa sonundaki bağlantıdan indirip kullanabilirsiniz.
FYM-23881BS-11 baskı devrede böyle yer alacak.
C1...C8 (Column1...8) sütun yada kolonları, R1...R8 (Row1...8) ise satırları gösteriyor.
Satır ve sütunlar neredeyse rastgele bir biçimde yerleştirilmiş. Yukardaki satırlarda bu göstergenin karmaşık yapısından söz ederken bu durum anlatılmak istenmişti.
Ancak yapılan Internet araştırmasında incelenen tüm dot matrix display'lerin aynı yapıda olduğu görüldü.
Eğer kendiniz bir gösterge yapmak istiyorsanız, bu işin oldukça çetin geçeceğini söyleyebiliriz.
Maliyetin hazır bir display'den daha fazla olduğunu ve profesyonel bir görünüm elde edemeyeceğinizi düşünüyorsanız bu işten vazgeçebilirsiniz. Elde bir gösterge yapmanın bir yararı olabilir; Bir LED hasar gördüğünde onu değiştirebilirsiniz.
DONANIM
Bazı elektronikçiler bir uygulamayı önce şema olarak görmeyi tercih eder. Bu, hiç te yabana atılacak bir yaklaşım değildir. Çünkü şema, bir projeyle ilgili tüm ayrıntıları açıklayabilir.
Bizim hazırladığımız şemanın sayma ve sürme devrelerinde 7 adet TTL tümdevre kullanıldı. Bu sayı 4'e hatta 3'e indirilebilir. Ancak devrenin tasarlanması aşamasında, çıkabilecek sorunlar gözönüne alınarak çizim yapıldı. Daha sonra da bir sadeleştirmeye gidilmedi. Akımdan da tasarruf amacıyla C-MOS tümdevreler de rahatlıkla kullanılabilir.
IC4, IC5, IC6 (74160) BCD sayıcıları sırayla sayma yapar. IC4'ün BCD çıkışları B'0000' iken IC1'in (7442) Q0 çıkışı aktiftir. 7442'nin Q0 çıkışı, PNP TR1 transistörünü sürer. 74160 için aşağıdaki tabloyu inceleyiniz.
74160 BCD SAYICI İÇİN DOĞRULUK TABLOSU
Adım CLR ENT CLK QD QC QB QA AÇIKLAMA
0 x x 0 0 0 0 RESET
1 0 x QD QC QB QA Sayma yok.
1 1 1 0 0 0 1
2 1 1 0 0 1 0
3 1 1 0 0 1 1
4 1 1 0 1 0 0
5 1 1 0 1 0 1
6 1 1 0 1 1 0
7 1 1 0 1 1 1
8 1 1 1 0 0 0
9 1 1 1 0 0 1
7442 tümdevresinin aktif olan çıkışı lojik 0, diğer 9 çıkış ise lojik 1'dir. Bu durum, ortak katotlu bir göstergeyi sürmede kolaylık sağlar.
7442 ONLU KOD ÇÖZÜCÜ İÇİN DOĞRULUK TABLOSU
ONLUK GİRİŞLER ÇIKIŞLAR
D C B A Q9 Q8 Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
0 0 0 0 0 1 1 1 1 1 1 1 1 1 0
1 0 0 0 1 1 1 1 1 1 1 1 1 0 1
2 0 0 1 0 1 1 1 1 1 1 1 0 1 1
3 0 0 1 1 1 1 1 1 1 1 0 1 1 1
4 0 1 0 0 1 1 1 1 1 0 1 1 1 1
5 0 1 0 1 1 1 1 1 0 1 1 1 1 1
6 0 1 1 0 1 1 1 0 1 1 1 1 1 1
7 0 1 1 1 1 1 0 1 1 1 1 1 1 1
8 1 0 0 0 1 0 1 1 1 1 1 1 1 1
9 1 0 0 1 0 1 1 1 1 1 1 1 1 1
7442'nin Q0 çıkışı, başka bir görev daha yapar. Bu görev, kendinden sonraki sayıcıyı sıfırlamaktır. IC4 BCD sayıcısı 1 adım ilerlediğinde, IC1'in Q1 çıkışı lojik 0 olur. Bu durum, IC1'in Q9 çıkışının aktif olmasına kadar sürer. Bu aşamaya gelindiğinde sayıcıların çalışma koşullarında değişiklik olur.
IC1'in Q9 çıkışı lojik 0 olunca, IC4 tümdevresi ENT girişinin "0" olması nedeniyle saymasını durdurur. Aynı "0" işareti ise IC7A (7402) NOR kapısının açılmasına ve saatin her düşen kenarıyla "1" üretmesine yol açar. Aşağıdaki tabloya bakınız.
7402 NOR (VEYA) KAPISI
GİRİŞ ÇIKIŞ
A B Q
0 0 1
0 1 0
1 0 0
1 1 0
Üretilen bu işaret zincirin ikinci halkasındaki IC5'in bir adım ilerlemesine neden olur.
IC2'nin Q0 çıkışının atlandığına dikkat ettiniz mi? Eğer bunu sağlamazsanız aynı bilgi, farklı iki sütunda gösterilir ve bu durum karmaşaya yol açar.
IC2 saymasını, Q9 çıkışına kadar olağan biçimde sürdürür. Bu noktada, IC1'in akıbetine uğrayarak saymasına ara vermek zorunda kalır. IC7C kapısı denetimi ele alarak zincirin son halkasındaki IC6 için saat darbeleri üretmeye başlar.
IC3 onlu sayıcısının Q8 çıkışı "0" olduğunda tüm sayıcılar başlangıca döndürülür. Aynı sıfırlama noktası, PIC16F84A tarafından da zaman zaman kullanılmaktadır.
Özet
Tarama yöntemini kullanan bu uygulamada, sırayla lojik "0" olan 24 çıkış kullanılmaktadır. Onlu sayıcıların Q9 çıkışları, sayıcıları "park ettirmek" amacıyla, Q0 çıkışları (ilk onlu sayıcı hariç) ise sonraki sayıcıyı sıfırladığından ve 1 adımlık bir zıplama gerektiğinden kullanılamamaktadır.
Proteus, SnagIt ve Ulead Gif Animator yardımıyla anlattıklarımızı resimleyelim.
Bu animasyonda 25 sütunun sürülmesi sırasında, 7442 onlu sayıcısının çıkışlarının lojik seviyelerini adım adım izleyebilirsiniz.
"Neden 24 değil de 25 sütun var?" diyebilirsiniz. Bunun nedeni, ilk göstergenin elde yapılması ve 25 sütundan oluşması.
Bu devre, D27 LED'i yandığında kendini sıfırlar. Aslında D27'nin yandığını göremeyiz. Çünkü tarama çok hızlı bir şekilde gerçekleşir. Eğer tarama frakansı çok yüksek olursa, tüm LED'lerin aynı anda yandığı izlenimi ediniriz. Tarama sisteminin mantığı da bu yanılgı üzerine kurulmuştur.
Yukardaki display 25 sütun ve 1 satırdan oluşur. Eğer anlamlı bir görüntü elde etmek istiyorsak, daha fazla satır kullanmalıyız.
Bu gösterge, bizim aradığımız özellikleri sağlayacak gibi görünüyor. Ama hala anlamlı bir karakter oluşturmak için gerekli bilgiyi alamadınız. Çünkü, bu bilgiyi tarama kısmı değil, mikrodenetleyici üretir. Tarama bölümü yalnızca sütunları sırayla aktif etmek ve ara sıra da RESET yapmakla görevlidir.
Yukardaki animasyonlarda satırlardan sabit olarak lojik "1" gönderildi. Eğer satırlardan her seferinde, karakterin bir sütununda bulunan veriyi CLOCK'la eşzamanlı olarak gönderirsek satır verisini de elde etmiş oluruz.
Şimdi bir L karakterinin nasıl oluşturulacağına bakalım
L karakteri 4 temel adımda görüntülenir.
Kırmızı LED'ler yerine "1" yazdığınızda, PIC tarafından gönderilecek binary veri ortaya çıkar.
1. adım: İlk sütun seçilerek satırlardan B'1111111' ikili sayısı gönderilir. Bu işlemle L'nin 4. sütunu, display'in ilk sütununda gösterilmiş olur. Gösterme süresi 1.583 mS kadardır. Veri bir adım sola ötelenir.
2. adım: Display'in 2. sütunu seçilerek L'nin 3. sütunu satır bilgisi olarak (B'0000001') gönderilir. Veri bir adım sola ötelenir.
3. adım: Display'in 3. sütunu seçilerek L'nin 2. sütunu satır bilgisi olarak (B'0000001') gönderilir. Veri bir adım sola ötelenir.
4. adım: Display'in 4. sütunu seçilerek L'nin 1. sütunu satır bilgisi olarak (B'0000001') gönderilir. Eğer gösterilecek başka bir karakter varsa ötelemeye devam edilir. Gösterilecek karakter yalnız L ise, ya işlemler tekrarlanır, ya da bizim yaptığımız gibi gösterge boyunca kayma işlemi sürer.