Hata neresinde yardım???

Başlatan 122055221, 05 Haziran 2009, 19:59:35

122055221

Arkadaşlar aşağıdaki kodlar proteus ta sorunsuz çalışıyor ama uygulamaya gelince düzgün çalışmıyo. Özellikle koddaki PLAY etketli bölüm düzgün çalışmıyor. Biyerde hatamı var acaba, halbuki simüle ederken sorunsuz çalışıyor.



@ Device MCLR_OFF
@ DEVICE INTRC_OSC_NOCLKOUT
CMCON = 07
include "modedefs.bas"

a var byte
b var byte
c var byte
a=0
b=0
c=0
MPLAY VAR PORTA.0
MSTOP VAR PORTA.1
HAREKET VAR PORTB.0
AYDINLIK VAR PORTB.5
ROLE VAR PORTA.2

TrisA=%00000000
TrisB=%11111111

portA=0

MODSEC:
A=0
B=0
IF PORTB.3=0 AND PORTB.2=0 THEN MOD_0
IF PORTB.2=1 THEN MOD_1
IF PORTB.3=1 THEN MOD_2
GOTO MODSEC

MOD_0:
pause 1000
FOR A=1 TO 30
FOR B=1 TO 60
IF HAREKET=1 THEN PLAY
PAUSE 1000
NEXT B
b=0
IF AYDINLIK=1 THEN    
PAUSE 10000
IF AYDINLIK=1 THEN PLAY
ENDIF
NEXT A
GOTO MODSEC

MOD_1:
pause 1000
IF HAREKET=1 THEN PLAY
PAUSE 100
GOTO MOD_1

MOD_2:
pause 1000
IF AYDINLIK=1 THEN
PAUSE 10000
IF AYDINLIK=1 THEN
FOR A=1 TO 30
PAUSE 60000
NEXT A
GOTO PLAY
ENDIF
ELSE
GOTO MOD_2
ENDIF

PLAY:
A=0
B=0
HIGH ROLE
PAUSE 1000
HIGH MPLAY
PAUSE 200
LOW MPLAY
PAUSE 10000
HIGH MSTOP
PAUSE 200
LOW MSTOP
PAUSE 1000
LOW ROLE
GOTO MODSEC

ete

Kodlarda bir hata yok. Ancak devre şeman olmadığı için başka bir yorum yapmak imkansız.
Programdan anlaşıldığı kadarı ile buton yada anahtarları sıfıra çekili (pull-down) kullanıyorsun. Bu durumda portB pinlerinden anahtar yada buton bağlı olanların her birine 10K direnç bağlayıp direncin diğer ucunu GND ye bağlaman gerekir. Giriş olarak ayarlanmış pinlerin  mutlaka 10K direnç ile ya şaseye (GND) yada +5V ta (Pull-up) çekilmesi gerekir. Aksi taktirde bu pinler havada gezinen moda geçerler yani bir bakarsın low olur bir bakarsın high olurlar. O nedenle bu işleme dikkat etmek gerekir.

Gerçek devrede ayrıca pic in besleme uçlarına mutlaka 100 nf kondansatör atın bunu direk besleme pinlerine bağlayın. Uzakta olması bir anlam ifade etmez.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

ftsahin

Play etiketli kısımda röle önce çektiriliyor sonra geri bıraktırılıyor.  Devre elektomanyentik etkilere karşı yeterince korunmamışsa röle bırakması sırasında Pic'in resetlenmesine sebep olabilir.  Röle yerine uygun bir direnç takarak deneyin sorun daha iyi anlaşılır.