PIC BASIC ile Kayan Yazı Yapalım
Daha önce yayınlanan "PIC 16F628 ile 8X32 Kayan Yazı Grafik Panosu" başlıklı çalışmamdan sonra aldığım emailler ve yapılan yorumlardan ortaya çıkan sonuca göre, bu konuyla ilgilenen bazı arkadaşlar için basit anlatımlı ve sade yapıda devresi olan yeni bir çalışma yapmam ihtiyaç olarak belirdi. Bu çalışmada yine öncelikle PIC BASIC ile programlama yapacağız. Tercihen PIC 16F628 kullanacağız. Yapacağımız devre, Bellek kapasitesinin izin verdiği noktaya kadar PIC 16F84 ile de çalışmaktadır. Yine 16F877 ile de devre çalışacaktır. Yalnız ben denemelerimi 16F628 ve 16F84 ile yaptım.
Bu çalışmada, 1 adet 5x7 led matrix üzerinde karakter oluşturacak ve oluşturduğumuz bu karakteri kaydıracağız. Sonraki çalışmalarımızda matrix sayısını çoğaltmak, karakter jeneratörü oluşturmak ve bunları kaydırmak gibi konular üzerinde duracağız. Bütün bu çalışmalar temel bilgiler verme amaçlı olarak öğrenmeye ilk adımı oluşturacak. Dolayısıyla gelişmiş devrelerden beklenen özellikler bu çalışmada aranmamalıdır.
Göstergeler:
Öncelikle kullanacağımız 5x7 led matrix üzerinde durmak gerekmektedir. Malzemeciden istediğim 5 adet ortak katod ve 5 adet ortak anot matrix displeyin hepsi ortak katod olarak karşıma çıkınca üzerinde dikkatle durmak gerektiği düşüncesi bende hasıl oldu.
Şekil 1: 5x7 ortak katod dipley (bu displey boyut olarak oldukça küçük: 1.3cmX1.8cm)
Şimdi bu kadot dipleyinresminde göründüğü şekliyle grafiğini çizelim.
Şekil 2: 5x7 matrixin grafiksel gösterimi. Üstten görünüm.
Resimde de görülen işaretli bacak grafikte yaptığım isimlendirmede C6 ucunu ifade diyor. Bu displeyde dik dizilmiş olan sırayı sütun olarak tanımladım C harfini verdim. Yatay dizlimiş led sırasını satır olarak tanımladım ve R harfini verdim. Sol üst köşeyi R1 ve C1 olarak tanımladım.
Devrenin Şeması:
Şekil 3: Devrenin Şeması (08.07.2006 tarihinde güncellendi.)
Denemelerimizde kullanacağımız devreyi, şeması şekil 3'te görüldüğü gibi tek displeyli ve PIC 16F628 kullanarak yapıyoruz. Yukarıda bahsettiğimiz sütun uçlarını PORTA olarak ve satır uçlarını PORTB olarak bağlıyoruz.
BOREAS linux ortamında KiCad programı ile çizilmiş devre şeması kaynak dosyalarını indirmek için tıklayınız.
Microsoft Windows ortamında KiCad programı ile çizilmiş devre şeması kaynak dosyalarını indirmek için tıklayınız.
Göstergenin Çalıştırılması:
Göstergede karakterler dizisini oluşturmak için gerekli mantık şudur: Elimizdeki displey ortak katod uçlu olduğundan sütuna bağlı olan ledlerin uçları katoddur. PIC'i programlarken bu uçlara 0 değerini verirsek ve satırlarda yanmasını istediğimiz ledler için de 1 değerini verirsek istediğimiz ledler yanmış olur.
İlk yapacağımız iş matrix displeydeki bütün ledleri yakmak olacak. Bunu için PIC BASIC ile ilk programımızı yapalım:
'===5X7 LED MATRIX TAMAMEN YANAR=== TRISA=%00000000 'PORTA ÇIKIŞ YAPILDI TRISB=%00000000 'PORTB ÇIKIŞ YAPILDI BASLA: PORTA=%00000000 'PORTA 0 (LOW) PORTB=%11111111 'PORTB 1 (HIGH) GoTo BASLA 'BASA DON End
Programda görüldüğü gibi bütün ledleri yakmak için ledlerin ihtiyacı olan voltajı veriyoruz. Burada hangi satırı söndürmek istersek onu PORTA'da 0 yapıyoruz, hangi sütunu söndürmek istiyorsak onu PORTB'de 1 yapıyoruz.
Programın PIC BASIC ile hazırlanmış kaynak dosyasını indirmek için tıklayınız.
Programın hex dosyasını indirmek için tıklayınız. (Bu hex dosyanın çalışması için kristal ve reset dahili olarak kullanılmıştır.)
Göstergede Karakterin Oluşturulması:
Göstergede istediğimiz karakteri şu şekilde rahatlıkla oluştururuz.
Önce 1. sütunu 0 (LOW) yaparız (PORTA'nın 1. biti). Diğer bitler 1 olarak kalır.
Sonra, satırlarda yanmasını istediğimiz ledler için PORTB'nin uçlarından gerekli olnları 1 (HIGH) yaparız.
İkinci sütuna geçeriz ve 0 yaparız
İkinci sütunda yanmasını istediğimiz ledleri 1 yaparız. Bu işlem Son sütuna kadar devam eder. Böylece karakteri oluşturmuş oluruz.
'===5X7 DISPLEYDE M KARAKTERINI OLUSTURMAK=== TRISA=%00000000 '===PORTA CIKIS=== TRISB=%00000000 '===PORTB CIKIS=== P1 VAR BYTE P1=5 '===BEKLEME SURESI TITREMEYI ENGELLEMEK ICIN=== BASLA: '===M karakterinin olusturulmasi=== PORTA=%11111110 'SUTUN 1 ICIN PORTB=%01111111 'BU DEGERLER Pause P1 'BEKLEME SURESI PORTA=%11111101 'SUTUN 2 ICIN PORTB=%00000010 'BU DEGERLER Pause P1 'BEKLEME SURESI PORTA=%11111011 'SUTUN 3 ICIN PORTB=%00000100 'BU DEGERLER Pause P1 'BEKLEME SURESI PORTA=%11110111 'SUTUN 4 ICIN PORTB=%00000010 'BU DEGERLER Pause P1 'BEKLEME SURESI PORTA=%11101111 'SUTUN 5 ICIN PORTB=%01111111 'BU DEGERLER Pause P1 'BEKLEME SURESI GoTo BASLA 'BASA DON VE TEKRAR ET End
Programda görüldüğü gibi sütunu seçiyor ve satırdan istediğimiz ledleri yakıyoruz. Ledlerin ynma süresini tayin etmek için de bir bekleme zaman dilimi koyuyoruz.
Yapılan devrenin görünümü şöyle oluyor.
Şekil 4: Sabit M karakterinin görünümü.
Programın PIC BASIC kaynak dosyasını indirmek için tıklayınız.
Programın HEX dosyasını indirmek için tıklayınız. (Bu hex dosyanın çalışması için kristal ve reset dahili olarak kullanılmıştır.)
Göstergede Oluşturulan Karakterin Kaydırılması:
Oluşturduğumuz karakteri kaydırmak için öncelikle değişkenler tanımlıyor ve karakterleri bu değişkenlere atıyoruz. Bu değişkenler sütunlardaki satır bilgilerini ifade ediyor. Göstermek istdiğimiz sütunda bu değişkenleri kullanıyoruz. Bu ilk adımı oluşturuyor.
Bunu programda gösterirsek:
'===M KARAKTERINI DEGISKENLERLE OLUSTURMAK=== P1 VAR BYTE d1 VAR BYTE d2 VAR BYTE d3 VAR BYTE d4 VAR BYTE d5 VAR BYTE TRISA=%00000000 TRISB=%00000000 P1=5 '===M karakteri degiskenlerde tanimlandi=== d1=%01111111 '******* d2=%00000010 ' * d3=%00000100 ' * d4=%00000010 ' * d5=%01111111 '******* BASLA: '===M karakterinin olusturulmasi=== PORTA=%11111110 'SUTUN 1 ICIN PORTB=d1 'BU DEGERLER Pause P1 'BEKLE PORTA=%11111101 'SUTUN 2 ICIN PORTB=d2 'BU DEGERLER Pause P1 'BEKLE PORTA=%11111011 'SUTUN 3 ICIN PORTB=d3 'BU DEGERLER Pause P1 'BEKLE PORTA=%11110111 'SUTUN 4 ICIN PORTB=d4 'BU DEGERLER Pause P1 'BEKLE PORTA=%11101111 'SUTUN 5 ICIN PORTB=d5 'BU DEGERLER Pause P1 'BEKLE GoTo BASLA End
Bu programın PIC BASIC dosyasını indirmek için tıklayınız.
Programın HEX dosyasını indirmek için tıklayınız. (Bu hex dosyanın çalışması için kristal ve reset dahili olarak kullanılmıştır.)
Bu programda kullandığımız değişkenleri kullanacağımız sütun sayısı kadar çoğaltmamız gerekmektedir. Ben MEHMET görünümü için 30 tane değişken kullandım. Sizinde istediğiniz karakterler için gerektiği kadar sütun için değişken tanımlamanız gerekir. Bu devrelerde yanmasını istediğim ledlere 1 değerini veriyorum sönmesini istediğim ledlere 0 değerini veriyorum. Ancak değişken kullanma sayısının da PIC'lerin hafıza kapasitesinden dolayı bir sınırı var. Bu sınır kullandığımız PIC'e göre değişi. PIC 16F84 te az iken 16F628 de fazladır. Değişken kullanma sınırını aştığınızda program derlenmez ve hata verir.
Şimdi çok karakterli kaydırma işlemini yapan programı görelim ve inceleyelim:
'===COKLU KARAKTER KAYDIRILIYOR=== P1 VAR BYTE i VAR BYTE i1 VAR BYTE d0 VAR BYTE d1 VAR BYTE d2 VAR BYTE d3 VAR BYTE d4 VAR BYTE d5 VAR BYTE d6 VAR BYTE d7 VAR BYTE d8 VAR BYTE d9 VAR BYTE d10 VAR BYTE d11 VAR BYTE d12 VAR BYTE d13 VAR BYTE d14 VAR BYTE d15 VAR BYTE d16 VAR BYTE d17 VAR BYTE d18 VAR BYTE d19 VAR BYTE d20 VAR BYTE d21 VAR BYTE d22 VAR BYTE d23 VAR BYTE d24 VAR BYTE d25 VAR BYTE d26 VAR BYTE d27 VAR BYTE d28 VAR BYTE d29 VAR BYTE TRISA=%00000000 '===BUTUN UCLAR=== TRISB=%00000000 '===CIKIS YAPILDI=== P1=5 '===TITREMEYI ENGELLEMEK LCLN=== i=0 '=== BU DEGER SABIT KALSIN=== i1=22 '===KAYMA HIZINI AYARLIYOR=== '===MEHMET karakterinin degiskenlere atanmasi=== d0=%00000000 d1=%01111111 d2=%00000010 d3=%00000100 d4=%00000010 d5=%01111111 d6=%00000000 d7=%01111111 d8=%01001001 d9=%01001001 d10=%00000000 d11=%01111111 d12=%00001000 d13=%00001000 d14=%01111111 d15=%00000000 d16=%01111111 d17=%00000010 d18=%00000100 d19=%00000010 d20=%01111111 d21=%00000000 d22=%01111111 d23=%01001001 d24=%01001001 d25=%00000000 d26=%00000001 d27=%01111111 d28=%00000001 d29=%00000000 BASLA: i=i+1 'i YI BIR ARTTIR IF i=i1 Then kaydir PORTA=%11111110 'SUTUN 1 ICIN PORTB=d1 Pause P1 PORTA=%11111101 'SUTUN 2 ICIN PORTB=d2 Pause P1 PORTA=%11111011 'SUTUN 3 ICIN PORTB=d3 Pause P1 PORTA=%11110111 'SUTUN 4 ICIN PORTB=d4 Pause P1 PORTA=%11101111 'SUTUN 5 ICIN PORTB=d5 Pause P1 GoTo BASLA kaydir: i=0 '===KAYDIRMA BASLIYOR=== d0=d1 d1=d2 d2=d3 d3=d4 d4=d5 d5=d6 d6=d7 d7=d8 d8=d9 d9=d10 d10=d11 d11=d12 d12=d13 d13=d14 d14=d15 d15=d16 d16=d17 d17=d18 d18=d19 d19=d20 d20=d21 d21=d22 d22=d23 d23=d24 d24=d25 d25=d26 d26=d27 d27=d28 d28=d29 d29=d0 GoTo BASLA End
Bu programa bektığımızda kaydırma işlemi dışında herşey yukarıda anlattığımız gibi olduğundan sadece kaydırmanın nasıl yapıldığını izah etmek istiyorum.
Bu programda kullanılan bazı değişkenlerin amacını öncelikle açıklamak gerekmektedir:
i değişkeni sayaç amacıyla kullanılmıştır.
i1 değişkeni kaç görüntü tekrarlandıktan saonra kaydırmanın yapılması gerektiğini belirtir. i1 değişkeni ile kayma hızını ayarlayabilirsiniz.
P1 değişkeni ise her sütunun ekranda ne kadar süre kalması gerektiğini yani bekleme aralığını belirtir. Bu değeri titreme sınırına yakın bırakmakta fayda var. Program büyüdükçe bu değerin ve i1 değişkeninin değerini gözden geçirmek gerekebilir.
i=i+1
IF i=i1 Then kaydir
Programda bulunan bu satırları şöyle hikaye edebiliriz. "Buraya kadar geldiysen kaydır'a git ve oradakileri gerçekleştir." i1 değişkeni için 22 atandığı için 22 kere karakteri gösterdikten sonra kaydırma işlemi yapılacaktır.
Şimdi ise kaydırma işleminin nasıl yapıldığını inceleyelim. Bu işlem çok basit. Öncelikle sayacı sıfırlıyoruz. Sonra değşkenleri birbiriyle yer değiştiriyoruz. Bu şekilde kaydırmayı ve yönünü tayin edebiliyoruz.
Bu programın PIC BASIC dosyasını indirmek için tıklayınız.
Programın HEX dosyasını indirmek için tıklayınız. (Bu hex dosyanın çalışması için kristal ve reset dahili olarak kullanılmıştır.)
Buraya kadar anlattığımız şekilde yapılmış devrenin çalışmasını izlemek için tıklayınız (avi video dosyası).
Yorumlarınız
led baglantılarını isiste yanlış baglamış olabilirsiniz bende ilk çizdigimde öyle oldu matrik ledleri ters çevirip bagladıgımda sorun çözülmüştü.
Sütun sayısını arttırarak uzun bi kelimeyi nasıl kaydırarak yazdırabiliriz.
Mail atarsan sevinirim.
devre şöle asm kodu ile yazılıp çalıştırılacak 10 tane led ve 10 direnç var artı diyot da var ben bu devrenin içinden çıkamadım entegre 18 bacaklı 16f628 ledler tek tek yanıp sönecek lütfen yardımcı olun
aderesinde benim yapmış olduğum projem var ihtiyacı olanalar inceleye blir herkeze başarılar bana bu konuda yardım larınızı bekliyorum.
OKUL ADI NASIL YAZILIYOR
ÇKUROVA ÜNİVERSİTESİ CEYHAN MESLEK YÜKSEKOKULU ELKTRİK BÖLÜMÜ OLACAK YARDIMCI OLURSANIZ SEVİNİRİM PAZERTESİ YE KADAR TESLİM ETMEM LAĞZIM
Sayın Akmet Evci, bana mail atarak düşüncelerinizi paylaşırsanız daha faydalı olabilirim.
en üsteki bilen msn'den bana cvp yazasın nolur cok lasım
Bir yorum ekleyin
İzin verilen html etiketler (tag): <p><div><b><strong><i><u><del><hr><sup><sub><br>