© http://elektronikce.com ©
ana sayfa devre arsivi elektronik dersleri | bilgisayar dersleri |  bilim-teknik |  download |  soru bankası |  iletişim
 

 

PIC16F84'LÜ KLAVYE KONTROLLÜ KAYAN YAZI


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

  1. Son bir kontrolden sonra klavyeyi takınız.

  2. Besleme gerilimi uygulayınız. Sistemin çektiği akım 300 mA'den küçük olmalıdır.

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

  4. Şu karakterleri girebilirsiniz: 1234567890ABCDEFGHIJKLMNOPQRSTUVWYXZ, nokta ve boşluk

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

  6. İ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.

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

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

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

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

  11. 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)

 
                
ana sayfa devre arsivi elektronik dersleri | bilgisayar dersleri |  bilim-teknik |  download |  soru bankası |  iletişim