portB kendiliğinden elektrik kesiyor ! assembly yardım

Başlatan cestar, 28 Ağustos 2010, 16:22:57

cestar

Merhaba arkadaşlar bir sorunum var birtürlü çözemedim.

bildiğiniz ledli deneme kartında pic 16f84a kullanıyorum.
a0'a 1 verdiğimde b0'ı 1 yapacak ve a1'e 1 verdiğimde de b1'i 1 yapacak programı yazdığımı düşünüyorum fakat bir sorun var. mesela önce a0'a basıyorum b0 yanıyor iyi güzel fakat a1'e bastığımda b1 yanıyor ve zaten yanık olan b0 1-2 sn sonra sönüyor. Tam tersi içinde durum aynı. Sorun nerede anlayamadım
program aşağıdaki gibi.

LIST	P=16F84A
	INCLUDE "P16F84A.INC"
	CLRF 	PORTB
	BSF	STATUS,5
	CLRF	TRISB
	MOVLW	H'FF'
	MOVWF 	TRISA
	BCF	STATUS,5
SAYAC	EQU	H'0C'


MOTOR

	MOVF PORTA, W ;		a0 1 ise b0 = 1
	MOVWF SAYAC
	DECFSZ SAYAC, 1
	GOTO NEXT1
	BSF PORTB, 0
NEXT1

	MOVF PORTA, W ;		a1 1 ise b1 = 1
	SUBLW H'03'
	MOVWF SAYAC
	DECFSZ SAYAC, 1
	GOTO NEXT2
	BSF PORTB, 1
NEXT2

	GOTO MOTOR

	END

serdararikan


cestar

proteusta değil fakat farklı kartlarda denedim sonuç aynı. Proteus ta kod desteği olduğunu bilmiyordum. indirip deneyeyim fakat bişey değişeceğini zannetmiyorum

serdararikan

LIST	P=16F84A
	INCLUDE "P16F84A.INC"
	CLRF 	PORTB
	BSF	STATUS,5
	CLRF	TRISB
	MOVLW	H'FF'
	MOVWF 	TRISA
	BCF	STATUS,5
SAYAC	EQU	H'0C'


MOTOR

	BTFSS  PORTA,0		a0 1 ise b0 = 1
	GOTO NEXT1
	BSF PORTB, 0
NEXT1

	BTFSS  PORTA,1		a1 1 ise b1 = 1
	GOTO NEXT2
	BSF PORTB, 1
NEXT2

	GOTO MOTOR

	END


bide bunu dene.sen olayı mantığını kuramamışsın.sayaç la ne işin var?zaman sınırlamasımı koyacaksın?yazdığın programın anlattığın ile alakası yok.biraz daha yoğunlaş olaya

cestar

Aslında yapmaya çalıştığım bukadar değil. Ben derdimi anlatabileyim diye kodun hatalı kızmını minimize ettim de yazdım.
Yapmaya çalıştığım portA 'yı okuyup ona göre portB'yi belli kombinasyonlarda aktif etmek. (portA'ya onluk tabanda 1'den 15'e kadar sayılar gonderiyorum)
Bunu yaparkende düşüncem, gelen sayıyı bir üstünden çıkarıp 1 elde etmek ve decrease ile 0 olup olmadığını kontrol etmek. Çünkü başka türlü kontrol edemiyorum. Yani gelen sayı 13 ise şunu yap diyemem.
Mantıkta hata olabilir fakat bulamıyorum.

cestar

Kodun tamamını incelemek isterseniz ;

LIST	P=16F84A
	INCLUDE "P16F84A.INC"
	CLRF 	PORTB
	BSF	STATUS,5
	CLRF	TRISB
	MOVLW	H'FF'
	MOVWF 	TRISA
	BCF	STATUS,5
SAYAC	EQU	H'0C'
DEGER	EQU	H'0D'

MOTORINPKONTROL

	MOVF PORTA, W ;DEGER 1 ISE MOTOR SAGA
	MOVWF SAYAC
	DECFSZ SAYAC, 1
	GOTO NEXT8
	MOVF PORTB, W
	ANDLW B'00001111'
	MOVWF PORTB
	BSF PORTB, 4
	GOTO MOTORINPKONTROL
NEXT8

	MOVF PORTA, W ;DEGER 2 ISE MOTOR SOLA
	SUBLW H'03'
	MOVWF SAYAC
	DECFSZ SAYAC, 1
	GOTO NEXT9
	MOVF PORTB, W
	ANDLW B'00001111'
	MOVWF PORTB
	BSF PORTB, 5
	GOTO MOTORINPKONTROL
NEXT9
	MOVF PORTA, W ;DEGER 3 ISE MOTOR HIZLI SAGA
	SUBLW H'04'
	MOVWF SAYAC
	DECFSZ SAYAC, 1
	GOTO NEXT10
	MOVF PORTB, W
	ANDLW B'00001111'
	MOVWF PORTB
	BSF PORTB, 4
	BSF PORTB, 6
	GOTO MOTORINPKONTROL
NEXT10
	MOVF PORTA, W ;DEGER 4 ISE MOTOR HIZLI SOLA
	SUBLW H'05'
	MOVWF SAYAC
	DECFSZ SAYAC, 1
	GOTO NEXT11
	MOVF PORTB, W
	ANDLW B'00001111'
	MOVWF PORTB
	BSF PORTB, 5
	BSF PORTB, 6
	GOTO MOTORINPKONTROL
NEXT11
	MOVF PORTA, W ;DEGER 5 ISE MOTOR DAHA HIZLI SAGA
	SUBLW H'06'
	MOVWF SAYAC
	DECFSZ SAYAC, 1
	GOTO NEXT12
	MOVF PORTB, W
	ANDLW B'00001111'
	MOVWF PORTB
	BSF PORTB, 4
	BSF PORTB, 7
	GOTO MOTORINPKONTROL
NEXT12
	MOVF PORTA, W ;DEGER 6 ISE MOTOR DAHA HIZLI SAGA
	SUBLW H'07'
	MOVWF SAYAC
	DECFSZ SAYAC, 1
	GOTO NEXT13
	MOVF PORTB, W
	ANDLW B'00001111'
	MOVWF PORTB
	BSF PORTB, 5
	BSF PORTB, 7
	GOTO MOTORINPKONTROL
NEXT13
	

	;DIGERINPKONTROL

	MOVF PORTA, W ;DEGER 7 ISE REZISTANS 1
	SUBLW H'08'
	MOVWF SAYAC
	DECFSZ SAYAC, 1
	GOTO NEXT0
	BSF PORTB, 0
	GOTO MOTORINPKONTROL
NEXT0
	MOVF PORTA, W ;DEGER 8 ISE REZISTANS 0
	SUBLW H'09'
	MOVWF SAYAC
	DECFSZ SAYAC, 1
	GOTO NEXT1
	BCF PORTB, 0
	GOTO MOTORINPKONTROL
NEXT1
	
	MOVF PORTA, W ;DEGER 9 ISE SU AL I 1
	SUBLW H'0A'
	MOVWF SAYAC
	DECFSZ SAYAC, 1
	GOTO NEXT2
	BSF PORTB, 1
	GOTO MOTORINPKONTROL
NEXT2
	MOVF PORTA, W ;DEGER 10 ISE SU AL I 0
	SUBLW H'0B'
	MOVWF SAYAC
	DECFSZ SAYAC, 1
	GOTO NEXT3
	BCF PORTB, 1
	GOTO MOTORINPKONTROL
NEXT3

	MOVF PORTA, W ;DEGER 11 ISE SU AL II 1
	SUBLW H'0C'
	MOVWF SAYAC
	DECFSZ SAYAC, 1
	GOTO NEXT4
	BSF PORTB, 2
	GOTO MOTORINPKONTROL
NEXT4

	MOVF PORTA, W ;DEGER 12 ISE SU AL II 0
	SUBLW H'0D'
	MOVWF SAYAC
	DECFSZ SAYAC, 1
	GOTO NEXT5
	BCF PORTB, 2
	GOTO MOTORINPKONTROL
NEXT5
	
	MOVF PORTA, W ;DEGER 13 ISE SU BOSALT 1
	SUBLW H'0E'
	MOVWF SAYAC
	DECFSZ SAYAC, 1
	GOTO NEXT6
	BSF PORTB, 3
	GOTO MOTORINPKONTROL
NEXT6

	MOVF PORTA, W ;DEGER 14 ISE SU BOSALT 0
	SUBLW H'0F'
	MOVWF SAYAC
	DECFSZ SAYAC, 1
	GOTO NEXT7
	BCF PORTB, 3
	GOTO MOTORINPKONTROL
NEXT7
	MOVF PORTA, W ;DEGER 15 ISE MOTOR DAHA HIZLI SAGA
	SUBLW H'10'
	MOVWF SAYAC
	DECFSZ SAYAC, 1
	GOTO NEXT14
	MOVF PORTB, W
	ANDLW B'00001111'
	MOVWF PORTB
	GOTO MOTORINPKONTROL
NEXT14
	GOTO MOTORINPKONTROL

	END



Burada sorun; örneğin değer 10'dan sonra 12 gnderdiğimde 10'un aktif etttiği uçlar sönüyor. Aslen sönmemesi lazım.
Bazı yerlerde AND kullandım ona takılmayın prosedür icabı.

Ben bakıyorum bakıyorum mantık hatası göremiyorum. Fakat donanımda da sorun yok.

serdararikan

Alıntı yapılan: cestar - 28 Ağustos 2010, 17:45:51
Aslında yapmaya çalıştığım bukadar değil. Ben derdimi anlatabileyim diye kodun hatalı kızmını minimize ettim de yazdım.
Yapmaya çalıştığım portA 'yı okuyup ona göre portB'yi belli kombinasyonlarda aktif etmek. (portA'ya onluk tabanda 1'den 15'e kadar sayılar gonderiyorum)
Bunu yaparkende düşüncem, gelen sayıyı bir üstünden çıkarıp 1 elde etmek ve decrease ile 0 olup olmadığını kontrol etmek. Çünkü başka türlü kontrol edemiyorum. Yani gelen sayı 13 ise şunu yap diyemem.
Mantıkta hata olabilir fakat bulamıyorum.

yazdıklarından ne yapmak istediğini tam anlayamadım ama sanırım PIC programlama ile ilgili eksik bilgiye sahipsin.

eğer portb=0 iken a işlemi
portb=1 iken b işlemi......vs yapmak istiyorsan


PIC in 2 adet karşılaştırma komutu  var.DECFSZ ve INCFSZ ileistediğin işlemi yapamazsın.BTFSS ve BTFSC kullanman lazım.

örneğin portb=5 iken porta.2 yi 1 yapan kodu yazayım sana

                    MOVLW    5
                    XORWF     PORTB,0
                    BTFSS       STATUS,Z
                    GOTO devam
                    BSF    PORTA,2
devam:        ....


sen bence biraz daha assembly çalış bence.. eksik bilgilerin var

cestar

Tekrar merhaba dediğiniz gibi programı ve devreyi proteusta denedim. Proteusta sorunsuz çalışıyor, mantıkta hata yok. Gerçi dediğiniz gibi zero flagı kontrol etmek daha basit, o yuzden kontrol kısmını dediğiniz gibi yaptım bilgilendirme için teşekkürler.

Durum böyle olunca yaptığım devreden şüphelendim ve pic'i birde hazır deneme kartında denedim. Fakat sonuç burada da aynı, hatalı çalışıyor.

Artık pic'ten şüpheleniyorum fakat elimde iki adet pic var ve her ikiside aynı şekilde çalıştırıyo programları. Örneğin en basit bir sağdan sola kayan led kodu bile hatalı çalışıyor pic'lerde.  Hata şu şekilde, önce ikişer ikişer yakıyo ledleri sonra atlaya atlaya gidiyo. Garip.

Acaba piclerin ikiside arızalanmış olabilirmi (ihtimal vermiyorum çünkü sakat bişey kesinlikle yapmadım ve yeni pic'ler) yoksa bir ihtimal pic programlama kartı arızalanmış olabilirmi ?

serdararikan

bunun birçok nedeni olabilir.bir PIC en en temel çalışma devresi   
+5V   -> Vdd ye
-        ->  Vss
MCLR -> +5V' a 4,7K ile
OSC!-OSC2 -> krsitale 22pF larla şaseye

bu bağlantıyı sağlamalısın.belki devrende MCLR   10K ile bağlanmışsa +5V a ondan olabilir.veya kristalde sorun olabilir.olmadı PIC i değiştir

stlg

Birde sinyali girdigin ucları bosta bırakmamaılısın , işlemine  gore pullup yada pulldown direncler kullanmalısın
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

satilla

yetiştiremem gerek bir iş var o yuzden kodun tamamına bakamadım aklıma geldi yazayım dedim buton kullanıyorsan buton arklarını önlemek için NOP'la veya döngüyle en az 100 nop yazmaktansa döngü kurmanı tavsiye ederim

ve kesinlikle pull up veya pull down direnci kullan