Havaya Yazı Yazmak, PIC mi kaldı diyenler olabilir. Evet picler hala birçok yerde kullanılıyor. Bende arşivimi karıştırırken lise yıllarında PIC16F628 ile yaptığım havaya yazı yazma projesini sizinle paylaşmak istedim. Dijital dünyada saklı kalacağına her zaman dediğim gibi bazı kısımları bazıların işine yarayabilirse ne mutlu bana. Belki ilerleyen zamanlarda arduino ile yeniden daha gelişmiş bir model yapabilirim.

Pic 16F628 ile yapılmış devre şeması 3 buton 7 LED’ den oluşmaktadır.

Havaya Yazı Yazma Uygulaması Devre Şeması

Havaya Yazı Yazma Uygulaması Devre Şeması

Mekanik olarak bu 7 LED’ i ister yatayda ister dikeyde sıralı olarak dizin ve bir motora bağlı olan platforma sabitleyin.

Havaya Yazı Yazma Uygulaması Mekaniği

Havaya Yazı Yazma Uygulaması Mekaniği

Havaya Yazı Yazmak Devre şeması

Burada önemli olan pic16f628′ i programlamadan önce motorun saniyedeki tur sayısı ve sütun genişliği hesaplanıp belirlenmelidir.

İnsan beyni saniyede 15 kareye kadar olan resimleri algılayabildiği için bu sistemde motor saniyede 20 tur atacaktır.

1 saniye = 20 tur atması isteniyorsa

1 tur T = 1/f = 1/20 = 0,05 saniye = 50 milisaniye

Sistemin sütun sayısını hesaplamak için

Dairenin çevresi = 50cm ise

Örneğin; sütun genişliği = 0,5cm

50/0,5 = 100 sütun

Sistemin satır sayısını hesaplamaya gerek yoktur, çünkü sistemde 7 LED kullanıldığı için satır sayısı da 7 dir.

Havaya Yazı Yazma Matrisi

Havaya Yazı Yazma Matrisi

Yukarıdaki grafik oldukça kolaylık sağlayacaktır.

Bir sütun için gecikme süresi (LED in 0,5cm yanık kalma süresi) için

1 tur = 0,05 sn ise

0,05/100 = 0,0005 sn = 500 milisaniyelik bir gecikme yapılmalıdır. Yazdığımız metnin bitiş noktası da belirlenmelidir. Böylelikle boşta kalan kısım hesaplanıp gecikme yapılması çok önemlidir. Aksi taktirde görüntü oluşmaz.

Metin için kullanılan sütun sayısı;

Örneğin; 25 sütun ise

Boşta kalan kısım = 100 – 25 75 sütundur.

Bu durumda boşta kalan kısım için gecikme

Bir sütun için 500 mikro saniye ise; 75 x 0,0005 = 0,0375 = 37,5 milisaniye olmalıdır.

Metin için toplam gecikme 25 x 0,0005 = 0,0125 = 12,5 milisaniye

1 tur = metin süresi + botsa kalma süresi = 12,5 + 37,5 = 50 milisaniye

Havaya Yazı Yazma Tur Hesaplama

Havaya Yazı Yazma Tur Hesaplama

Assembly dilinde çift döngü yapmak için;

Havaya Yazı Yazma Gecikme Hesaplama

Havaya Yazı Yazma Gecikme Hesaplama

Komut cycle sayısı = 3 x N x M

Gecikme süresi = Komut cycle sayısı x 4 / f

12,5 milisaniye gecikme için

4 MHz lik osilatör kullanıldığın da GS = KSS X 4/4 den    GS = KSS olur

12,5 milisaniye = 12500 mikro saniye

KSS = 3xNxM olduğuna göre       12500 = 3xNxM   NxM = 4166    N=255 ise M=16

37,5 milisaniye gecikme için

37500 = 3xNxM    NxM = 12500    N=255 ise M=49

Örneğin bir metin olarak ABC harflerini yazdıralım.

Programı yazmak için grafiğe ihtiyacımız olacaktır.
Havaya Yazı Yazma Karakter Kodlaması

Havaya Yazı Yazma Karakter Kodlaması

Grafiğin alt tarafı metne bağlı olarak binary olarak doldurulur. Metne denk gelen kutucular 1 diğerleri ise 0 olarak yazılır. Programı yazarken binary kodlara bakılarak PORTB yönlendirilir.

Metin kısmı 15 sütun dan oluştuğu için gecikme süresi

15 x 0,0005 = 7.5 milisaniye

7500 = 3xNxM            NxM = 2500                N=255  ise M=10 olur.

Boşta kalan kısım 100 – 15 = 85 sütun dan oluştuğu için gecikme süresi

85 x 0,0005 = 42.5 milisaniye

42500 = 3xNxM          NxM = 14166              N=255  ise M=55 olur.

Pic Programı koduna gelicek olursak sıkı durun, o zamanlar daha C dili ile tanışmadığımdan kodu assembly dilinde yazmışım. geçmiş olsun 🙂

;*********DEĞİŞKENLERİN TANIMLANMASI******************************
	LIST	P=16F628A
;yazan: Remzi ŞAHİNOĞLU

PORTB	EQU	0X06
PORTA	EQU	0X05
STATUS  EQU	0X03
TRISB	EQU	0X86
TRISA	EQU	0X85
CMCON	EQU	0X1F

;*********GİRİS/CIKIS AYARLARININ OLUSTURULMASI*********************
	BSF	STATUS,5		;BANK1 E GEC	
	CLRF	TRISB			;PORTB CIKIS
	MOVLW	b'01000011'		;RB0,RB1,RB7 GİRİŞ
	MOVWF	TRISA			;PORTA GİRİS
	BCF	STATUS,5		;BANK0 A GEC
	MOVLW	b'00000111'		;BÜTÜN KARSILASTIRICILAR KAPALI
	MOVWF	CMCON		        ;TÜM PİNLER GİRİS/CIKIS
	CLRF	PORTB			;BASLANGICTA TÜM LED LER SÖNÜK

;***************ANA PROGRAMIN OLUSTURULMASI**********************
;************* "A" HARFİ İÇİN ***************************************
BASLA
	MOVLW	b'01111111'
	MOVWF	PORTB
	CALL	BEKLE1
	MOVLW	b'00001001'
	MOVWF	PORTB
	CALL	BEKLE1
	MOVLW	b'00001001'
	MOVWF	PORTB		
	CALL	BEKLE1
	MOVLW	b'01111111'
	MOVWF	PORTB
	CALL	BEKLE1
	
        CLRF	PORTB
	CALL	BEKLE1

;************* "B" HARFİ İÇİN*************************************
	MOVLW	b'01111111'
	MOVWF	PORTB
	CALL	BEKLE1
	MOVLW	b'01001001'
	MOVWF	PORTB
	CALL	BEKLE1
	MOVLW	b'01001001'
	MOVWF	PORTB
	CALL	BEKLE1
	MOVLW	b'00110110'
	MOVWF	PORTB
	CALL	BEKLE1	
	
        CLRF	PORTB
	CALL	BEKLE1

;************ "C" HARFİ İÇİN**************************************
	MOVLW	b'00111110'
	MOVWF	PORTB
	CALL	BEKLE1
	MOVLW	b'01000001'
	MOVWF	PORTB
	CALL	BEKLE1
	MOVLW	b'01000001'
	MOVWF	PORTB
	CALL	BEKLE1
	MOVLW	b'00100010'
	MOVWF	PORTB
	CALL	BEKLE1	
	CLRF	PORTB
	CALL	BEKLE1			
	
        CLRF	PORTB
	CALL	BEKLE2
	GOTO	BASLA

;***************1 MİLİSANİYE GECİKME YAP**************************
;***********LEDİN BİR PARCA YANIK KALMA SÜRESİ********************
BEKLE1
	MOVLW	d'255'		;YAKLASIK 1 MİLİSANİYE 
	MOVWF	0X21		;BEKLEME YAP
D1	MOVLW	d'10'		
	MOVWF	0X20		
D2	DECFSZ	0X20,1		
	GOTO	D2		
	DECFSZ	0X21,1
	GOTO	D1
	RETURN

;*****************95 MİLİSANİYE GECİKME YAP***********************
;************PROGRAM BOSLUGUNDA Kİ LEDİN SÖNÜK KALMA SÜRESİ*******
BEKLE2
	MOVLW	d'255'		;YAKLASIK 74 MİLİSANİYE 
	MOVWF	0X22		;BEKLEME YAP
D3	MOVLW	d'55'		
	MOVWF	0X23		
D4	DECFSZ	0X23,1		
	GOTO	D4		
	DECFSZ	0X22,1
	GOTO	D3
	RETURN
	
	END

İlerleyen zamanlarda daha gelişmiş bir Havaya Yazı Yazmak Arduino uygulaması yaparız. İyi kodlamalar.


0 yorum

Bir yanıt yazın

Avatar placeholder

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.