3*3*3 led küp animasyon yazılım

Başlatan okay57, 13 Nisan 2015, 17:14:32

okay57

led küp animasyon devresinde sırayla birinci kat,ikinci kat ve üçüncü kattaki ledler sırayla yanacak. İSİS te simüle ediyorum ama çalışmıyor. Acaba yaptığım yazılım hatalı mı? Devreyi plakete döksem çalışır mı?

;====PROGRAM3B======27/02/2015=======	
;LED KÜPÜ SIRAYLA ÇALIŞTIR.
	INCLUDE	"P16F84A.INC"	;PIC16F84A KÜTÜPHANESİNDEKİ ATAMA BİLGİLERİNİ KULLAN
SAYAC1	EQU	h'0C'		;h'0C ADRESİNİ SAYAC1 OLARAK ATA
SAYAC2	EQU	h'0D'
	CLRF	PORTA	
	CLRF	PORTB		;PORTB DEKİ ÖNCEKİ BİLGİLERİ SİL
	BSF	STATUS,5	;BANK1 E GEÇ
	CLRF	TRISA		;PORTA YI çıkış YAP
	CLRF	TRISB		;PORTB Yİ ÇIKIŞ YAP
	BCF	STATUS,5	;BANK0 A GEÇ
	
BASLA	

KAT1
	MOVLW	b'00000010'
	MOVWF	PORTA
	MOVLW	b'00000001'	;
	MOVWF	PORTB		;EN SAĞDAKİ LEDİ YAK
	GOTO	SOLA_KAYDIR



KAT2
	MOVLW	b'00000100'
	MOVWF	PORTA
	MOVLW	b'00000001'	;
	MOVWF	PORTB		;EN SAĞDAKİ LEDİ YAK
	GOTO	SOLA_KAYDIR
	GOTO	KAT3

KAT3
	MOVLW	b'00001000'
	MOVWF	PORTA
	MOVLW	b'00000001'	;
	MOVWF	PORTB		;EN SAĞDAKİ LEDİ YAK
	GOTO	SOLA_KAYDIR

SOLA_KAYDIR
	CALL	TIMER
	RLF	PORTB		;BÜTÜN LEDLERİ SÖNDÜR
	BTFSS	PORTB,7		;PORTB NİN 7. BİTİNDEKİ LED YANDI MI
	GOTO	SOLA_KAYDIR	;EN SOLDAKİ LED YANMADIYSA BİR SOLA KAYDIR
	CALL	TIMER
	BSF	PORTA,0
	CALL	TIMER
	GOTO	KAT2
	

TIMER				;TIMER(ZAMAN GECİKMESİ) ALT PROGRAMI
	MOVLW	d'255'		;YA DA h'FF' YAZILABİLİR.
	MOVWF	SAYAC2		;SAYAC2 YE 100 SAYISINI YÜKLE
TIMER1
	MOVLW	d'255'		
	MOVWF	SAYAC1		;SAYAC1 E 100 SAYISINI YÜKLE
TIMER2
	DECFSZ	SAYAC1,F	; SAYAC1-1, SAYAC1=0 MI?
	GOTO	TIMER2		;SAYAC1  O DEĞİLSE TIMER2 YE GİT
	DECFSZ	SAYAC2,F	; SAYAC2-1, SAYAC2=0 MI?	
	GOTO	TIMER1		;SAYAC2 O DEĞİLSE TIMER1 E GİT
	RETURN			;ALT PROGRAMDAN ÇIK.ANA PROGRAMA KALDIĞI YERDEN DEVAM ET.

	END

RaMu

Isis şema ve mplab proje dosyanı gönder.
Gözüme çarpan:
SOLA_KAYDIR
    CALL	TIMER
    RLF	PORTB		;BÜTÜN LEDLERİ SÖNDÜR

Kısmında
RLF	PORTB,F

demelisinki kaydırılan hali tekrar portb ye yazılsın,
birde bu şekilde kullanım sıkıntıya sebep olabilir,
daha doğru kullanımı,
bir değişken tanımlayıp
onu kaydırıp sonra portb ye yazmaktır.
misal
SOLA_KAYDIR
    CALL	TIMER
    RLF	KAYAN,F		;bir sola kaydır
MOVF KAYAN,W
MOVWF PORTB
    BTFSS	KAYAN,7		;PORTB NİN 7. BİTİNDEKİ LED YANDI MI
    GOTO	SOLA_KAYDIR	;EN SOLDAKİ LED YANMADIYSA BİR SOLA KAYDIR
    CALL	TIMER
    BSF	PORTA,0
    CALL	TIMER
    GOTO	KAT2

gibi.

Programda mantık hatasıda var,
sırayla tüm katlara animasyon verilmez,
kat1 sola kaydıra gidiyor oradan kat2 ye gidiyor
kat2 den yine sola kaydır a gidiliyor,
doğal olarak sola kaydır tekrar kat2 ye git diyor ve
programın kat2 de takılı kalıyor.

Bir diğer hatada
sola kaydır daki
    BSF	PORTA,0

bu sadece A0 pinine bağlı katı aktif edebilir.

Daha düzgün bir algoritma kurmalısın.
Misal sola kaydır kısmını altprogram yapabilirsin.
Basla

Kat1 aktif et diğer katlar pasif (bsf porta,kat1 gibi)
call sola_kaydır

Kat2 aktif et diğer katlar pasif
call sola_kaydır

Kat3 aktif et diğer katlar pasif
call sola_kaydır

goto basla

;Altprogramlar

sola kaydır
w ye 0x01 yükle 
w yi  kayan a yükle

kay_devam
kayan ı w ye al
w yi PORTB ye yükle
bekle
kayan ı bir sola kaydır
kayan,7 set oldu mu?
hayır  kay_devam a git
evet   (kayan,7 portb de gözükmesi için)
kayan ı w ye al
w yi portb ye yükle
bekle

return


veya sola_kaydır altprogramı şöylede olabilir
sola_kaydır
w ye 0x01 yükle 
w yi  kayan a yükle

kay_devam
kayan ı w ye al
w yi PORTB ye yükle
bekle
kayan ı bir sola kaydır rlf kayan,f
kayan ı kayan a yükle MOVF  KAYAN,F
STATUS,Z yi kontrol et  Z=1 oldu mu
hayır  kay_devam a git
evet   return


MOVF degisken,F olayını daha sonra anlatırım.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

okay57

#2
PORTA,0 'da son 9.led var. Portbnin çıkışı yetmediğinden dolayı porta nın 0. bitine de led taktım
PORTA,1,2,3 katlar için kullanıldı. Animasyon şu şekilde olcak: önce birinci kattaki ledler sırayla sonra ikinci, son olarakta üçüncü kattaki ledler sırayla yanacak.



mesaj birleştirme:: 13 Nisan 2015, 19:19:34

Dediklerinizi de uyguluyorum.

mesaj birleştirme:: 13 Nisan 2015, 19:22:47

Ramu hocam, bir programda bir tane mi alt program kullanabiliriz?

mesaj birleştirme:: 13 Nisan 2015, 19:30:14

Bir de neden değişken içindekini bir sola kaydırıp sonra portbye atıyoruz.

RaMu

Alıntı yapılan: okay57 - 13 Nisan 2015, 19:19:05
Ramu hocam, bir programda bir tane mi alt program kullanabiliriz?

Hafızaya sığdırabildiğin kadar alt program kullanabilirsin, ama
dikkat etmen gereken; içiçe 6 dan fazla içiçe altprogram kullanma.

yani  call A
A altprogramı da call B desin
B altprogramıda call C desin
....
bu şekilde içiçe çok fazla call olmamalı.

Sende call sola_kaydır olur,
sola_kaydır içinde call bekle(timer gibi) olur,
içiçe 2 tane olur ve problem olmaz.

Alıntı yapılan: okay57 - 13 Nisan 2015, 19:19:05
Bir de neden değişken içindekini bir sola kaydırıp sonra portbye atıyoruz.
Read modify write dediğimiz türden bir prolem olabilir,
ayrıca prensib meselesi oluyor,
bu programında değilse başka bir kombinasyon olan programında
hatalı çalışmaya sebep olabileceği için kullanılmamalı.
Forumda buna benzer şeyleri tartışan konular vardı,
ingilice olarak
microchip forumdan şu konuya bakabilirsin
http://www.microchip.com/forums/m522385.aspx
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

okay57

PORTA NIN 0. BİTİNE LED TAKSAM SORUN OLURMU?

RaMu

Ledi yakıp söndürebilen programı yazabiliyorsan
problem olup olmayacağını anlayabilirsin.

Önce datasheet e bakılır,
porta nın spi i2c psp uart analog vs. bir özelliği var mı?
Varsa portu digital olarak ayarlamak için
ne yapmak gerekiyor ona bakılır, ona göre ayarlanır vs.

16f84 RA0 zaten digital IO problem olmaz yani.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

okay57

Üçüncü katı yanmıyor. Üçüncü katı ikinci, ikinci katıda üçüncü kat yaptığımda ise bu sefer yeni ikinci kat yanıyor yeni üçüncü kat yanmıyor/

;====PROGRAM3B======27/02/2015=======	
;LED KÜPÜ SIRAYLA ÇALIŞTIR.
	INCLUDE	"P16F84A.INC"	;PIC16F84A KÜTÜPHANESİNDEKİ ATAMA BİLGİLERİNİ KULLAN
SAYAC1	EQU	h'0C'		;h'0C ADRESİNİ SAYAC1 OLARAK ATA
SAYAC2	EQU	h'0D'
KAYAN	EQU	h'0E'
	CLRF	PORTA	
	CLRF	PORTB		;PORTB DEKİ ÖNCEKİ BİLGİLERİ SİL
	BSF	STATUS,5	;BANK1 E GEÇ
	CLRF	TRISA		;PORTA YI çıkış YAP
	CLRF	TRISB		;PORTB Yİ ÇIKIŞ YAP
	BCF	STATUS,5	;BANK0 A GEÇ
	
BASLA	
	MOVLW	b'00000010'
	MOVWF	PORTA
	CALL	SOLA_KAYDIR
	MOVLW	b'00000100'
	MOVWF	PORTA
	GOTO	SOLA_KAYDIR
	MOVLW	b'00001000'
	MOVWF	PORTA
	CALL 	SOLA_KAYDIR
	GOTO	BASLA

SOLA_KAYDIR
	MOVLW	h'01'
	MOVWF	KAYAN
KAYAN_DEVAM
	MOVF	KAYAN,W
	MOVWF	PORTB
	CALL	TIMER
	RLF	KAYAN,F
	BTFSS	KAYAN,7
	GOTO	KAYAN_DEVAM
	MOVF	KAYAN,W
	MOVWF	PORTB
	CALL	TIMER
	RETURN
	
	
TIMER				;TIMER(ZAMAN GECİKMESİ) ALT PROGRAMI
	MOVLW	d'255'		;YA DA h'FF' YAZILABİLİR.
	MOVWF	SAYAC1		;SAYAC2 YE 100 SAYISINI YÜKLE
TIMER2
	MOVLW	d'255'		
	MOVWF	SAYAC2		;SAYAC1 E 100 SAYISINI YÜKLE

TIMER1
	DECFSZ	SAYAC2,F	; SAYAC1-1, SAYAC1=0 MI?
	GOTO	TIMER1
	DECFSZ	SAYAC1,F	; SAYAC1-1, SAYAC1=0 MI?
	GOTO	TIMER2		;SAYAC1  O DEĞİLSE TIMER2 YE GİT
	RETURN		

	END

RaMu

BASLA	
    MOVLW	b'00000010'
    MOVWF	PORTA
    CALL	SOLA_KAYDIR
    MOVLW	b'00000100'
    MOVWF	PORTA
    GOTO	SOLA_KAYDIR
    MOVLW	b'00001000'
    MOVWF	PORTA
    CALL 	SOLA_KAYDIR
    GOTO	BASLA


6. satır Call SOLA_KAYDIR olacak.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

okay57

#8
o satırı düzeltmeme rağmen üçüncü kata geçiş yapılmıyor

mesaj birleştirme:: 13 Nisan 2015, 21:41:12

0. BİTİ 1. KAT 1. BİTİ 2.KAT 2. BİTİ 3. KAT YAPTIM YİNE ÜÇÜNCÜ KAT YANMIYOR

mesaj birleştirme:: 13 Nisan 2015, 21:43:46

İSİS te RA0 VE RA1 çıkışı sırayla '1' olurken RA2 '1' olmuyor. Acaba simülasyon kaynaklı bir şey olabilir mi?

RaMu

Isis ve mplab proje dosyalarını zipleyip yolla bakayım istrersen.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

okay57


RaMu

Nasıl gönderebilirsen :)
zip yapıp herhangi bir dosya paylaşım sitesine yükleyip
linki burada mesajında paylaşıyorsun.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

okay57

#12
Tamam :) ben de acaba sitede öyle bir dosya paylaşım bölümümü var diyordum.


https://yadi.sk/d/x0jDabQ1fxXEa

mesaj birleştirme:: 13 Nisan 2015, 22:02:25

gönderdiğim yazılımda PORTA'nın 0. bitindeki ledi kullanmadım.

RaMu

Programda problem yok gibi ama
isisde problem var,
isis library den 16f84a yı tekrar seç,
halihazırda çizmiş olduğunla değiştir düzeliyor.

Ayrıca proteus8 tavsiye ederim.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

okay57

Yardımlarınız için çok teşekkür ederim hocam. Son dediğinizi yapınca düzeldi. İsis bazen yazılıma göre değil de kafasına göre takılıyor :) o kadar şey yaptım ki bu hiç aklıma gelmemişti! Ramu hocam ben npn(bd547) kullandım(elimde bu model vardı) ve ledlerin katodunu toprağa çektim. Ama çoğu projelerde örneğin tubitakta pnp(bc237) transistör ile lledlerin katoodunu toprağa çekilmiş. Acaba pnp kullanmalarının nedeni nedir. Acaba bu önemli bilgilerin yeraldığı bir kaynak biliyormusunuz?