devreye besleme baglarken rolenin cekmesi

Başlatan selvi, 27 Temmuz 2009, 15:18:53

selvi

16f84a islemcisi olan devreye devreye besleme verir vermez roleyi cekip birakiyor.normalde rolenin cekmesi icin bazi kosullarin gerceklesmesi gerekiyor.fakat bu kosullar saglanmadigi halde besleme verme esnasinda role cekiyor.tabi bu sorun her besleme baglantisinda olmuyor.tek tuk yasaniyor.
  bunu gidermek icin roleyi ceken trisa.4=1 ucu giris olarak yonlendirdim.ne zamanki kosul gerceklesti o anda trisa.4=0 yaparak role ceksin seklinde programi yeniden duzenledim.buna ragmen ayni sorun devam ediyor.
    ayriyeten 16f84 yerine 16f628 kullandim.bir kac kez ust uste devreye  besleme vererek denedim.bu durumda bahsettigim sorun yasanmiyor.
isin mantigini  cozemedim.16f84a yasanan durum 16f628 de yasanmamasinin nedeni ne olabilir.bir tesaduf mu?kalici sorunsuz bir cozum var mi?
 pic islemcilerinde bu sorunlar diger bildigimiz entegreli(7400.4027 v.b) sistemlerden daha fazla oldugunu soyleniyor.boyle bir durum gercek mi?
 devreyi pille besliyorum.regule olarak 7805 kullaniyorum.girise 100uf ve cikisina 47uf kondansator bagladim.icin besleme uclarina 100nf bagladim.
Yaşam anlamlandırıldıkça kutsaldır....

mustafa_cmbz

standart çözüm yollarını gözden geçirip hangilerini yerine getirdiğiniveya getirmediğini tespit edip eksiklerini gidermeye bak...

* mclr ucuna direnç kondastör
* pic'e en yakın yere 47n
* röle uçlarına ters diyot
* transistör pic bağlantısını kontrol et... hatta şemayı ve kodu yayınla..
* kristalin metal yüzeyini şaseye ver
* özellikle programdan pause komutları varsa timerleri kapat..
* beslemeye ters diyot at.

bunların dışında aklıma bunlar geliyor...şema vs. elindekileri sunarsan gerisi gelir...

hoguz

İşlemciler enerji verildiğinde portlarını 1 yapar.Sende bu şekilde sürüyorsan roleyı çekip bırakır resette devreni degıstırmen lazım.

Tagli

Alıntı yapılan: "hoguz"İşlemciler enerji verildiğinde portlarını 1 yapar
Bu ifade yanlış, en azından 16F84 ve 16F628 için (ki diğer PIC modellerinde de durumun benzer olduğunu sanıyorum). Resetten sonra PORT registerlarının alacağı değer belirsizdir, ama analog bacaklar 0 değerini alır. TRIS register'ları ise 1'dir. İlgili bilgi tablo halinde datasheet'te bulunabilir.
Gökçe Tağlıoğlu

tyildizak

Alıntı yapılan: "Tagli"
Alıntı yapılan: "hoguz"İşlemciler enerji verildiğinde portlarını 1 yapar
Bu ifade yanlış, en azından 16F84 ve 16F628 için (ki diğer PIC modellerinde de durumun benzer olduğunu sanıyorum). Resetten sonra PORT registerlarının alacağı değer belirsizdir, ama analog bacaklar 0 değerini alır. TRIS register'ları ise 1'dir. İlgili bilgi tablo halinde datasheet'te bulunabilir.

doğrudur, başlangıçta trisa 1, porta belirsiz olur.

ra4 open drain çıkış, transistör ile röle sürüyorsanız, pull-up  direnç bağlamış olmanız gerekiyor(npn için), ilk enerjilenmede bu direnç üzerinden transistör iletime geçiyor olabilir, benimki tamamen varsayım tabii, herhangi bir şema yok çünki ortada..

camby

transistöre giden çıkışa kondansatör koy, biraz yavaşlar ama açılıştaki anlık açılmadan etkilenmez.
Varsayım tabi denemedim , bu şekilde olabilir belki..

selvi

Yaşam anlamlandırıldıkça kutsaldır....

ftsahin

Her ihtimale karşı tris satırından sonra porta=0 yazmayı dene. Belki arkadaşların bahsettiği gibi porta.4 1 değeriyle açılıyor olabilir.

Tagli

Ama PORT'da 1 olsa bile TRIS de 1 olacağından bir etkisi olmaması gerekir. Acaba derleyici kendisi bu değerleri programın başında değiştiriyor olabilir mi? Emin olmak için assemly koduna bakmak gerekli.
Gökçe Tağlıoğlu

selvi

; PicBasic Pro Compiler 2.46, (c) 1998, 2005 microEngineering Labs, Inc. All Rights Reserved.  
PM_USED			EQU	1

	INCLUDE	"16F84.INC"

RAM_START       		EQU	0000Ch
RAM_END         		EQU	0004Fh
RAM_BANKS       		EQU	00001h
BANK0_START     		EQU	0000Ch
BANK0_END       		EQU	0004Fh
EEPROM_START    		EQU	02100h
EEPROM_END      		EQU	0213Fh

R0              		EQU	RAM_START + 000h
R1              		EQU	RAM_START + 002h
R2              		EQU	RAM_START + 004h
R3              		EQU	RAM_START + 006h
R4              		EQU	RAM_START + 008h
R5              		EQU	RAM_START + 00Ah
R6              		EQU	RAM_START + 00Ch
R7              		EQU	RAM_START + 00Eh
R8              		EQU	RAM_START + 010h
T1              		EQU	RAM_START + 012h
T2              		EQU	RAM_START + 014h
FLAGS           		EQU	RAM_START + 016h
GOP             		EQU	RAM_START + 017h
RM1             		EQU	RAM_START + 018h
RM2             		EQU	RAM_START + 019h
RR1             		EQU	RAM_START + 01Ah
RR2             		EQU	RAM_START + 01Bh
_B0              		EQU	RAM_START + 01Ch
_B1              		EQU	RAM_START + 01Dh
_I               		EQU	RAM_START + 01Eh
_SAY             		EQU	RAM_START + 01Fh
_SAY1            		EQU	RAM_START + 020h
_SAY2            		EQU	RAM_START + 021h
_SAY3            		EQU	RAM_START + 022h
_SAY4            		EQU	RAM_START + 023h
_SAY5            		EQU	RAM_START + 024h
_SAYI            		EQU	RAM_START + 025h
_SAYI1           		EQU	RAM_START + 026h
_SAYI2           		EQU	RAM_START + 027h
_SAYI3           		EQU	RAM_START + 028h
_SAYI4           		EQU	RAM_START + 029h
_SAYI5           		EQU	RAM_START + 02Ah
_TEMP            		EQU	RAM_START + 02Bh
_TUS             		EQU	RAM_START + 02Ch
_PORTL           		EQU	 PORTB
_PORTH           		EQU	 PORTA
_TRISL           		EQU	 TRISB
_TRISH           		EQU	 TRISA
#define _PORTB_0         	 PORTB, 000h
#define _PORTB_2         	 PORTB, 002h
#define _PORTB_4         	 PORTB, 004h
#define _PORTB_1         	 PORTB, 001h
	INCLUDE	"DTMF12.MAC"
	INCLUDE	"PBPPIC14.LIB"

	PAUSE?C	0C8h

	LABEL?L	_BASLA	
	MOVE?CB	000h, _SAYI
	MOVE?CB	000h, _SAYI1
	MOVE?CB	000h, _SAYI2
	MOVE?CB	000h, _SAYI3
	MOVE?CB	000h, _SAYI4
	MOVE?CB	000h, _SAYI5
	MOVE?CB	000h, _TEMP
	MOVE?CB	000h, _TUS
	MOVE?CB	000h, _B1
	MOVE?CB	000h, _B0
	MOVE?CB	000h, PORTB
	MOVE?CB	005h, TRISB
	MOVE?CB	000h, PORTA
	MOVE?CB	00Fh, TRISA

	LABEL?L	_ana_dongu	
	CMPEQ?TCB	_PORTB_0, 001h, T1
	CMPEQ?TCB	_PORTB_2, 000h, T2
	LAND?BBL	T1, T2, _PORT_OKU
	CMPEQ?TCB	_PORTB_0, 001h, T1
	CMPEQ?TCB	_PORTB_2, 001h, T2
	LAND?BBL	T1, T2, _KAYDET
	GOTO?L	_ana_dongu

	LABEL?L	_PORT_OKU	
	PEEK?BB	PORTA, _TUS
	CMPNE?BCL	_TUS, 00Bh, L00001
	GOTO?L	_BASLA
	LABEL?L	L00001	
	ADD?BCB	_B1, 001h, _B1
	CMPEQ?BCB	_TUS, 00Ch, T1
	CMPEQ?BCB	_B1, 006h, T2
	LAND?BBW	T1, T2, T2
	CMPF?WL	T2, L00003
	MOVE?CB	000h, _B1
	PEEK?BB	PORTA, _SAYI5
	READ?CB	005h, _SAY5
	CMPNE?BBL	_SAYI5, _SAY5, L00005
	ADD?BCB	_TEMP, 001h, _TEMP
	LABEL?L	L00005	
	CMPNE?BCL	_TEMP, 006h, L00007
	MOVE?CB	000h, _TEMP
	TOGGLE?T	_PORTB_4
	TOGGLE?T	_PORTB_1
	MOVE?CB	000h, _SAYI
	MOVE?CB	000h, _SAYI1
	MOVE?CB	000h, _TUS
	MOVE?CB	000h, _SAYI2
	MOVE?CB	000h, _SAYI3
	MOVE?CB	000h, _SAYI4
	MOVE?CB	000h, _SAYI5
	LABEL?L	L00007	
	GOTO?L	L00004
	LABEL?L	L00003	
	CMPEQ?BCL	_B1, 001h, _BIRA
	CMPEQ?BCL	_B1, 002h, _IKIA
	CMPEQ?BCL	_B1, 003h, _UCA
	CMPEQ?BCL	_B1, 004h, _DORTA
	CMPEQ?BCL	_B1, 005h, _BESA
	GOTO?L	_OKU

	LABEL?L	_BIRA	
	PEEK?BB	PORTA, _SAYI
	READ?CB	000h, _SAY
	CMPNE?BBL	_SAYI, _SAY, L00009
	MOVE?CB	000h, _TEMP
	ADD?BCB	_TEMP, 001h, _TEMP
	LABEL?L	L00009	
	GOTO?L	_OKU

	LABEL?L	_IKIA	
	PEEK?BB	PORTA, _SAYI1
	READ?CB	001h, _SAY1
	CMPNE?BBL	_SAYI1, _SAY1, L00011
	ADD?BCB	_TEMP, 001h, _TEMP
	LABEL?L	L00011	
	GOTO?L	_OKU

	LABEL?L	_UCA	
	PEEK?BB	PORTA, _SAYI2
	READ?CB	002h, _SAY2
	CMPNE?BBL	_SAYI2, _SAY2, L00013
	ADD?BCB	_TEMP, 001h, _TEMP
	LABEL?L	L00013	
	GOTO?L	_OKU

	LABEL?L	_DORTA	
	PEEK?BB	PORTA, _SAYI3
	READ?CB	003h, _SAY3
	CMPNE?BBL	_SAYI3, _SAY3, L00015
	ADD?BCB	_TEMP, 001h, _TEMP
	LABEL?L	L00015	
	GOTO?L	_OKU

	LABEL?L	_BESA	
	PEEK?BB	PORTA, _SAYI4
	READ?CB	004h, _SAY4
	CMPNE?BBL	_SAYI4, _SAY4, L00017
	ADD?BCB	_TEMP, 001h, _TEMP
	LABEL?L	L00017	
	GOTO?L	_OKU
	LABEL?L	L00004	

	LABEL?L	_OKU	
	LABEL?L	L00019	
	CMPNE?TCL	_PORTB_0, 001h, L00020
	GOTO?L	L00019
	LABEL?L	L00020	
	GOTO?L	_ana_dongu

	LABEL?L	_KAYDET	
	PEEK?BB	PORTA, _TUS
	CMPNE?BCL	_TUS, 00Bh, L00021
	GOTO?L	_BASLA
	LABEL?L	L00021	
	ADD?BCB	_B0, 001h, _B0
	CMPEQ?BCB	_TUS, 00Ch, T1
	CMPEQ?BCB	_B0, 006h, T2
	LAND?BBW	T1, T2, T2
	CMPF?WL	T2, L00023
	MOVE?CB	000h, _I
	LABEL?L	L00025	
	CMPGT?BCL	_I, 00Ah, L00026
	TOGGLE?T	_PORTB_1
	PAUSE?C	0C8h
	NEXT?BCL	_I, 001h, L00025
	LABEL?L	L00026	
	PAUSE?C	0C8h
	MOVE?CT	000h, _PORTB_1
	MOVE?CB	000h, _B0
	WRITE?CB	005h, _TUS
	GOTO?L	L00024
	LABEL?L	L00023	
	CMPEQ?BCL	_B0, 001h, _BIR
	CMPEQ?BCL	_B0, 002h, _IKI
	CMPEQ?BCL	_B0, 003h, _UC
	CMPEQ?BCL	_B0, 004h, _DORT
	CMPEQ?BCL	_B0, 005h, _BES
	GOTO?L	_YAZ

	LABEL?L	_BIR	
	PEEK?BB	PORTA, _TUS
	WRITE?CB	000h, _TUS
	GOTO?L	_YAZ

	LABEL?L	_IKI	
	PEEK?BB	PORTA, _TUS
	WRITE?CB	001h, _TUS
	GOTO?L	_YAZ

	LABEL?L	_UC	
	PEEK?BB	PORTA, _TUS
	WRITE?CB	002h, _TUS
	GOTO?L	_YAZ

	LABEL?L	_DORT	
	PEEK?BB	PORTA, _TUS
	WRITE?CB	003h, _TUS
	GOTO?L	_YAZ

	LABEL?L	_BES	
	PEEK?BB	PORTA, _TUS
	WRITE?CB	004h, _TUS
	LABEL?L	L00024	

	LABEL?L	_YAZ	
	LABEL?L	L00027	
	CMPNE?TCL	_PORTB_0, 001h, L00028
	GOTO?L	L00027
	LABEL?L	L00028	
	GOTO?L	_ana_dongu
	END?	

	END
Yaşam anlamlandırıldıkça kutsaldır....

Tagli

Hocam bu PBP'nun ürettiği .asm uzantılı dosya aslında assembly kodu değil (ne olduğunu da anlayabilmiş değilim). IC-Prog ve benzeri programlar hex dosyasından disassembly yapıyor, onu koyarsanız belki yakalama şansımız olur. Normalde insanın kendi yazmadığı assembly kodunu anlaması zordur, hele derleyici kodunu anlaması neredeyse tamamen imkansızdır. Ama neyi nerede aradığımızı yaklaşık olarak biliyoruz, o yüzden kodu görmek istedim.

Aradığımız şey programın başlarında bir yerlerde CLRF 0x05 veya MOVLW 0x00 + MOVWF 0x05 ikilisi. Ve tabi bunlardan önce bir BSF 0x03,5 olması gerekir ki bank 2'de olduğumuzu anlayalım.

Öte yandan, şimdi farkettim de
MOVE?CB   000h, PORTB
MOVE?CB   005h, TRISB
MOVE?CB   000h, PORTA
MOVE?CB   00Fh, TRISA
bu bölüm (her ne kadar assembly kodu olmasa da) eğer çağrıştırdığı işi yapıyorsa TRIS ve PORT başlangıç ayarlarında sorun yok demektir.

16F628 denemesi farklı sonuç vermeseydi sorunun donanımda olduğunu düşünürdüm. Özellikle de A4 ucunun 16F628'de analog giriş olmaması, bu sebeple başlangıçta mecburen sıfır olması gibi bir ihtimali de ortadan kaldırıyor. Malesef aklıma şu anda elle tutulur birşey gelmiyor...  :roll:
Gökçe Tağlıoğlu

selvi

84 ve 628 de farkli sonuc vermesi 84 de config ayarlarini pbp ile yazilmis programlarda yazilmamasi ve 628 de config ayarlarin yazilmasiyla baglantili olabilir mi?
not:ilk mesajimda role baglanti ucunu  yanlislikla porta.4 olarak vermistim.  role baglanti ucu portb.4 ucudur.
Yaşam anlamlandırıldıkça kutsaldır....

mustafa_cmbz

çok mühim bir devredir ki şemaya veya basic kodlarına dair hiç bir şey göremedik...

selvi

oyle ozel bir calisma değil.genelde calismalar konulari anlamaya donuk.proteusdaki cizimi verdim. asagidaki linktedir. pbp kodlari karisik olur diye vermedim.  kodlar asagidaki sekilde:
http://www.dosyaupload.net/download.php?file=454sema.dsn
 
SAY	var	byte
SAY1	var	byte
SAY2	var	byte
SAYI	var	byte
SAYI1	var	byte
SAYI2	var	byte
TUS	var	byte
TEMP  var   byte
B1    var   byte
B0	var   byte
 I   VAR   BYTE

	pause	200
BASLA:	
	SAYI=0
	SAYI1=0
	SAYI2=0
	TEMP=0
	TUS=0
	B1=0
	B0=0
     PORTB=0
	TRISB=%00000101
	PORTA=0	
	TRISA=%00001111 

LOOP:
 
	IF  PORTB.0=1 AND PORTB.2=0  THEN  PORT_OKU 
	IF PORTB.0=1  AND PORTB.2=1  THEN   KAYDET 
GOTO LOOP   
 		
PORT_OKU:
	PEEK PORTA, TUS
	IF TUS=11 THEN
	 GOTO BASLA
	ENDIF
	B1=B1+1
	IF TUS=12 AND B1=3 THEN
	   B1=0
	   PEEK PORTA, SAYI2 
	   READ 2, SAY2
	   IF SAYI2=SAY2 THEN
	   TEMP=TEMP+1
	   ENDIF
         IF TEMP=3 THEN
		TEMP=0
             TOGGLE PORTB.4
	      TOGGLE PORTB.1
            SAYI=0: SAYI1=0: TUS=0:SAYI2=0  
	   ENDIF
	ELSE
	   IF B1=1 THEN BIRA
       IF B1=2 THEN IKIA  
	   GOTO	OKU
BIRA:
	   PEEK PORTA, SAYI 
	   READ 0, SAY
	   IF SAYI=SAY THEN
	   TEMP=0
	   TEMP=TEMP+1
	   ENDIF
	   GOTO	OKU
IKIA:  
	   PEEK PORTA, SAYI1  
	   READ 1, SAY1
	   IF SAYI1=SAY1 THEN
	   TEMP=TEMP+1
	   ENDIF
	   GOTO   OKU
	   ENDIF
OKU:    
	WHILE PORTB.0=1
	WEND 
	GOTO LOOP	   
KAYDET:
	PEEK PORTA, TUS
	IF TUS=11  THEN
	  GOTO BASLA
	ENDIF
	B0=B0+1
	IF TUS=12 AND B0=3 THEN
    FOR I=0 TO 10
   TOGGLE  PORTB.1
    PAUSE 200
    NEXT I
    PAUSE 200
    PORTB.1=0
	   B0=0
	   WRITE 2, TUS
	ELSE
	IF B0=1 THEN BIR
    IF B0=2 THEN IKI
	GOTO	YAZ
BIR:
	PEEK PORTA, TUS  
	WRITE 0, TUS
	GOTO  YAZ
IKI:
	PEEK PORTA, TUS 
        WRITE 1, TUS
      ENDIF
YAZ:    
	WHILE PORTB.0=1
	WEND           
GOTO LOOP
 
END
Yaşam anlamlandırıldıkça kutsaldır....

mustafa_cmbz

configleriniz nerede acaba hocam_?

birde şemayı benim sürüm eski olduğu içindir herhalde açamadım...


hocam bence artık protona geçmelisiniz...