|
Klavye kontrollü, 24
sütun led matrix kayan yazı devresi (8*24)
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

Gültekin'in kamerasından aldığımız video ve resimler bizi tatmin
etmedi. Bu nedenle Photoshop, Ulead Gif Animator gibi
yazılımlar yardımıyla yukarıdaki küçük animasyonu hazırlamak zorunda
kaldık. Animasyonda toplam 60 kare kullanılması gerektiğinden, dosya
boyutunu küçültebilmek için animasyonu kırpmak zorunda kaldık.
Dosyanın orijinal boyutunu merak edenlere açıklayalım: 3.164.273
bayt...
Aşağıdaki ş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.

Yandaki 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.

Resmi büyük görmek için üzerine
tıklayınız.

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 rast gele bir biçimde yerleştirilmiş.
Yukarıdaki 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 frekansı çok yüksek olursa, tüm LED'lerin aynı anda
yandığı izlenimi ediniriz. Tarama sisteminin mantığı da bu yanılgı
üzerine kurulmuştur.
Yukarıdaki 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.
GÖSTERİLECEK KARAKTERLERİN KODLARI
Microsoft Excel'le hazırlanmış, 2
sayfadan oluşan tabloyu indirmek için sayfa sonuna gidiniz. Bu
tabloda Türkçe karakterlere ait kodlar da var. PIC'i tıka basa
doldurduğumuzdan bu karakterleri kullanamadık. Ve aynı sayfalarda
son olarak çevrim tablolarıyla ilgili kod satırlarını da
bulabilirsiniz.

Gültekin'in kamerasından uygulamayla ilgili bir
görünüm.
Üç adet display, sürücü transistörler ve onlu sayıcılar aynı kart
üzerinde bulunuyor. 74160'lar ve 7402 ise board'a yerleştirildi.
Resmin altında PIC16F84A'nın bulunduğu deneme kartının bir
kenarını görüyorsunuz.
Bu fotoğrafa bakarken bir not düşelim:
Programlama kartıyla bilgisayar arasındaki kabloyu 1 metreden
kısa tutmaya bakın. Bu kablonu uzun olması denediğimiz 2 programlama
yazılımında da "0000' adresiyle ilgili hata mesajı almamıza
neden oldu. Ekranlı kablo kullandığımızda ise hata mesajı veren
yazılımlar yeniden kuzu kuzu yazmaya başladı.
KLAVYEDEN 2 TÜR VERİ ALINIR
|
 |
 |
Bir PC/AT Klavye ve 5 PIN'lik bir fişin
ÖNDEN görünümü.
Klavye de 5 Volt ile beslenir. Ancak 75 mA'e kadar akım
tüketebilir. Bir 7805 gerilim regülatörü, donanımın tamamını
beslemek için yeterlidir.
Tek başına DATA pin'ini kullanarak klavyeden gelen
verinin okuması yapılabilir. Bu yöntemin bir kusuru, bir
sonraki verinin alınması için geçen zamanı bilmek ve bu zaman
kadar PIC'i bekletmektir.
|

İşte bir grafik ve her şeyi açıklıyor. Ne yazık ki bu bilgiye,
osiloskop başında epey ter döktükten sonra ulaştık.
Mikrodenetleyicinin RB7 pin'i CLOCK'ı, RA4 pin'i ise DATA'yı
okuma görevini üstlenir.
Klavyede bir tuşa basılmadığı sürece RB7 lojik "1"de bekler.
Klavyede herhangi bir tuşa basmak, otomatik olarak kesme alt
programını çalıştırır. Çünkü PIC, PORTB'deki lojik değişikliklere
duyarlıdır. CLOCK'ın ilk düşen kenarı değerlendirilmez (Start
bit'i). 2. düşen kenarla birlikte, ilk DATA RA4 aracılığıyla alınır.
CLOCK'ın 9. düşen kenarıyla son DATA alındıktan sonra, 10. ve 11.
darbeler pas geçilir. 2...9. adımlarda alınan DATA'lar paralel
veriye dönüştürüldüklerinde, ortaya çıkan şey tuş kodudur.
PROGRAM KODU
Program kodunu verdikten sonra, bazı ayrıntılar
üzerinde duracağız. Program kodunu indirmek için aşağıdaki metni
kopyalama yoluna gitmeyiniz. Bu, derlemede sorunlara yol açabilir.
matrix.asm ve matrix.hex dosyaları sayfa sonundaki
bağlantıdan indirilebilir.
NOTLAR
-
Son bir kontrolden sonra klavyeyi takınız.
-
Besleme gerilimi uygulayınız. Sistemin çektiği akım 300
mA'den küçük olmalıdır.
-
Besleme gerilimi uygulandığında, PIC16F84A birkaç saniye
süreyle hiçbir işlem yapmadan bekler. Bunun nedeni, klavyeden
gelen tanıtım bilgilerinin PIC'in EEPROM'una yazmasını
engellemektir. Aynı nedenle, besleme gerilimi uygulanmış iken
klavyeyi takıp çıkarmamaya özen gösteriniz.
-
Şu karakterleri girebilirsiniz:
1234567890ABCDEFGHIJKLMNOPQRSTUVWYXZ, nokta ve
boşluk
-
Girilen metni silmek için NumPad'deki DEL tuşunu
kullanmalısınız. Bu tuşa bastıktan sonra, ekrandaki eski metin
bilgisi sola doğru akıp kaybolana kadar bekleyiniz.
-
İlk gösterilebilecek karakteri giriniz. Karakter, göstergenin
sağ tarafında belirecek ve sol doğru kayacaktır. Kayma, karakter
sol kenardan kaybolana kadar sürer. Eğer yeni bir karakter
girmezseniz, bu işlem sürekli olarak tekrarlanır. İkinci karakter,
otomatik olarak ilkinin sağında yer alır. İlk geçiş, daha önce
sözü edildiği gibi hatalı olabilir. Ancak sonraki geçişte
göstergenin girilen karakterleri doğru olarak görüntüleyeceğinden
emin olabilirsiniz.
-
Karakterler arasındaki 1 sütunluk boşluk, yazılım tarafından
sağlanır. Sözcükler arasındaki boşluğu ise kullanıcı belirler. 1
kez space tuşuna bastığınızda, 3 sütunluk boşluk vermiş
olursunuz. Bu da EEPROM'da, diğer karakterler gibi 1 bayt'lık alan
kaplar.
-
Cümle sonundaki boşluk ise 10 boşluktan oluşur. Bu, 30
sütunluk boşluğa denk gelir. Cümle sonu boşluklar, PIC'in
EEPROM'unda yer kaplamazlar.
-
EEPROM'a kayıt için ek bir işlem yapmanız gerekmiyor. Siz her
yeni karakteri girdiğinizde, EEPROM'un H'00' adresindeki sayı 1
arttırılır. Bu sayı en çok D'63' olabilir.
-
Herhangi bir tuşa basma sırasında PORTB kesmesi oluşur.
Gösterge parlamalarının (taramanın durduğu an) önüne geçmek için
her tuşa basma anında PORTB temizlenir. Tuşa basma sırasında,
göstergenin kısa kısa sönmesinin nedeni budur.
-
Satırlarda, seri akım sınırlama dirençlerini, tüm sorunları
çözmeden küçültmeyiniz. Biraz daha parlaklık istiyorsanız,
taramanın normal yapıldığından emin olunuz. Herhangi bir tuşa
bastığınızda, display'in kısa bir süre için olsa bile donmamasını
sağlamalısınız. Aksi halde LED'ler hasar görebilir.
| İNDİRİLEBİLECEK DOSYALAR |
| AÇIKLAMA |
DOSYA |
BOYUT |
|
| TA5COZ metninin görüntülendiği ilk
animasyon |
anim1.zip |
77,392 KB |
 |
| Eagle için hazırlanmış kütüphane
dosyası |
ccf.zip |
36,566 KB |
 |
| 1 satır, 25 sütunluk tarama
animasyonu |
scan_anim1.zip |
31,096 KB |
 |
| 7 satır, 24 sütunluk tarama
animasyonu |
scan_anim2.zip |
17,104 KB |
 |
| Excel'le hazırlanmış, karakter
kodları |
code.zip |
41,082 KB |
 |
| Programın asm dosyası |
matrix_asm.zip |
7,347 KB |
 |
| Programın hex dosyası |
matrix_hex.zip |
1,968 KB |
 |
| Bu makaledeki tüm dosyalar |
all.zip |
527,540 KB |
 |
Kaynak:
www.antrak.org Ali YETİŞ (TA5CCF)
|