Site içi Arama

Ara

PIC BASIC ile Kayan Yazı Yapalım

Mehmet Yılmaz - 06.06.2006

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



Adana'da dünyaya geldi. Televizyon tamirciliğınde çırak olarak erken dönemde iş hayatına başladı. Daha sonraları Adana ve Ankara'da imalat, bilgisayar ve danışmanlık sektöründe iş hayatına devam etti. Şu anda kendisine ait işyerinde çalışmalarına devam etmektedir.
Web adresi: www.teknimer.com
E-posta: mehmet@teknimer.com
İçerik Yan Blok
Konular
Tasarım: Teknimer Teknoloji
Yukarı