verici-alicida sorun

Başlatan selvi, 17 Nisan 2009, 17:22:53

selvi

1 verici ve 2 alicidan olusan devre yaptim.2 alici yan yana kalmasi gerekiyor.2 alicidan biri infrared sinyal yolluyor.2.alicida ir dedektor var.ir sinyalin kesilmesine gore ir dedektor olan alici her sinyal kesildiginde bunu sayi degiskeni atip bunu sayiyor.
vericiden bir butonla her 2 aliciyi aciyorum.vericiden alicilara -her aliciya ayni degerler-5 tane farkli bilgi yolluyorum.1.alici bu bilgileri aldiginda ir ledi calistiriyor.ir dedektor olan 2.alici bu bilgilerle ir dedektoru aktiflestiriyor.  
 vericiden 2.bir butonla ir dedektor lu aliciya bir sayac degeri gonderiyor.
 vericiden bir butonla ir dedektorlu aliciyi ve ir sinyal yollayan aliciyi kapatmak icin kullandim.
artik alicilar bildigimiz karsilikli 10m de karsilikli koulmus vaziyettedir.artik ir sinyalin farkli bir cisim  tarafindan kesildiginde ir dedektor bu sinyal kesilmelerini sayiyor.vericiden ir dedektore gondergimiz sayac degeri sinyal kesilme sayisina esit oldugunda alarm caliyor. (sayac=sayi oldugunda)
  ben yukarda belirttigim sekilde denemeler yaptim.yer yer sorunlar cikiyor.ir dedektorlu devreye gondergim sayac degeri sinyal kesilme(sayi degeri) sayisina esit olmasina ragmen alarm calmiyor. bu durumda vericiden kapat butonuna basarak alicilari kapatiyorum.ir dektorlu alicinin beslemesini kesip tekrar besleme verdigimde calisiyor.bazen ust uste bir kac deneme yaptim sorun cikmiyor.bazen ustte belirttigim sorun yasaniyor
 zaten devrelerde verciden butonlara basildiginda alicilarda ledler var.bu ledlerle devrelerin acilmasi,kapanmasi ve sayac degerin ir dedektorlu aliciya yollandiginda led bu durmlara karsilik yaniyor.sorun yasandigi durumda bile vericiden gelen bilgilere gore led yanmasina ragmen belirtigim sorun yasaniyor.
  bu bahsettigim sorun simulasyonda yasanmiyor.gercek devrede yasaniyor.3 tane program oldugu icin karisik gelebilir.istenirse programlari gonderebilirim.

ek bir bilgi daha vereyim.yukarda bahsettigim sisteme iliskin.1 verici ve 2 alicidan oluyor.alicilardan birinde infrared led ve birisinde ir dedektor(TSOP1738) var.yani 2 alici bildigimiz karsilikli konulan iki devre.verici sadece alicilari aktiflestiriyor ,ir dedektorlu alici devreye sayac degeri yolluyor ve istendiginde alicilari kapatiyor.
eklemek istedigim durumda: ir dedektorlu devrenin pic e yuklenmis programinda usart ve rb0 kesmesi kullanildi.belirttigim sorunu cozemeyince 2 pic islemcisini kullandim.usart kesmesini bir pic e rb0 kesmesine diger pic e yukledim.bu durumda bahsettigim sorun yasanmiyor.bu sefer fazladan bir pic entegresi ve devre karti cok buyuyor.
sorunun usart ve rb0 kesmesini ayri pic lere yuklenince sorunun ortadan kalkmasi neye yorumlanabilir.
Yaşam anlamlandırıldıkça kutsaldır....

selvi

asagidaki program ir dedektorlu alici programidir.sorunun bu kisimda olabilme ihtimali yuksek.cunku mevcut durumda bir tek islemci kullandim.bir onceki mesajlardan bahsettigimsorundan kaynakli rb0 kesmesi icin bir islemci usart kesmesi ici bir islemci olamak uzere 2 pic kullandim.bu durumda sorun ortaya cikmiyor.istikrarsizligin kaynagi rb0 kesmesinden kaynakli gorunuyor.
    tam net değilim.fakat mevcut durumda adsagidaki programi kullaniyorum.rb0 kesmesi icin kismi degisikler yaptim.ornegin:programin basinda INTE=0 seklinde ifade kullandim.alici acilmayana kadar rb0 kesmesini aktif değil.cunku programin basinda INTE=1 oldugunda aliciyikapattigimhalde PORTB.6=1 oluyor.inte=0 olmasina ragmen portb.6=1 oluyordu(normalde rb=1 olmasi icin rb0 kesmesinin olusmasi gerekir.inte=0 iken rb0 kesmesinin olusmamasi gerekiyor).en son " IF INTE=0 THEN BIRAK"  seklinde loop dogusunde bu tanimlama yaptigimda alici kapatildiginda bu sorun ortadan kalkiyor.
  fakat onceki mesajlarimda bahsettigim sorun azalmasina ragmen yer yer oluyor.biraz bicim  degistirerek tabi.

 
@ DEVICE pic16F628 'islemci 16F628A 
@ DEVICE pic16F628, WDT_OFF 'Watch Dog timer kapali 
@ DEVICE pic16F628, PWRT_ON 'Power on timer acik 
@ DEVICE pic16F628, PROTECT_OFF 'Kod Protek kapali
@ DEVICE pic16F628, MCLR_ON 'MCLR pini kullaniliyor. 
@ DEVICE pic16F628, XT_OSC 'Dahili osilatör kullanilmayacak
@ DEVICE pic16F628, LVP_OFF
@ DEVICE pic16F628, BOD_OFF

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 25  ' 9600 baud 4mhz de
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

SYMBOL GIE  =INTCON.7   'genel interruptlarý açýyor
SYMBOL PEIE =INTCON.6   'peripheral interruptlarý açýyor
SYMBOL RCIE =PIE1.5     'USART Recive interrupt enable bit
SYMBOL RCIF =PIR1.5     'USART Receive interrupt flag bit
SYMBOL INTE=INTCON.4    'RB0  interrupt enable bit
SYMBOL INTF=INTCON.1    'RB0  interrupt flag bit

RCIE=1
PEIE=1
INTE=0
GIE=1
ON INTERRUPT GOTO KESME 

OPTION_REG=%11000000   
CMCON=7
TRISB=%00000011
TRISA=%00100000
PORTB=0

 AL        VAR  BYTE
 TEMP    VAR  BYTE
 SAYAC  VAR  BYTE
 SAYI     VAR  BYTE 
 RB        VAR  BIT
 US        VAR  BIT
 K          VAR  BYTE 
 RB=0:US=0:K=0:SAYI=0:SAYAC=0:TEMP=0:AL=0
 
LOOP:
IF INTE=0 THEN  BIRAK 'rb0 kesmesinde kaynakli sorunlarin onune gecmek icin ek bir tedbir
IF RB=1 THEN
RB=0
PAUSE 9    
IF PORTB.0=1 THEN  'rb0 kesmesi olustuktan 9ms sonra halen sinyal kesik ise sayi degerini 1 artir kesik değilse kesme parazitten kaynaklidir
SAYI=SAYI+1
IF SAYAC<>0 AND SAYAC=SAYI THEN 'vericiden gonderilensayac degeri ile sinyalkesilme adedi esit ise islem yap 
PORTB.3=1 
PAUSE 500
PORTB.3=0
SAYI=0
ENDIF
PORTB.6=1
PAUSE 400
PORTB.6=0
ENDIF
ENDIF
BIRAK:
IF US=1 THEN
US=0
       IF  AL=73   THEN        'aliciyi acma
        PORTB.4=1
        PAUSE 500
        PORTB.4=0
        INTE=1:SAYAC=0:SAYI=0
       ENDIF
KAPAT:   
        IF  AL=233  THEN    'aliciyi kapatma
        INTE=0:RB=0:SAYAC=0:SAYI=0
        PORTB.6=1
        PAUSE 500
        PORTB.6=0
       ENDIF
       if  AL<>73 AND AL<>233  then  'vericiden gonderilen sayac degeri
       SAYAC=AL 
       FOR K=0 TO 6
         PORTB.6=1
         PAUSE 100
         PORTB.6=0
         PAUSE 100
         NEXT K  
       endif
       ENDIF
GOTO LOOP
;---------USART KESME-----------
DISABLE
KESME:
GIE=0 'tüm interruptlar? kapat yani INTCON.7=0
IF INTF=1 THEN
RB=1
INTF=0 'kesme bayrag(? s?f?rlanacak)
GOTO CIK
ENDIF 
HSERIN 1,BIR,[WAIT("ARA"),AL  ]
TEMP=RCREG
RCREG=0
TEMP=0
US=1
GOTO CIK
BIR:US=0
CIK:
RCIF=0
GIE=1 'Yani INTCON.7=1 kesmeleri açt?k.
RESUME
ENABLE 
END
Yaşam anlamlandırıldıkça kutsaldır....

OG

selvi uzun uzun kodları yapıştırıyorsun ama anlaşılır olması için neden code tag kullanmıyorsun

kodların
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

selvi

cevap beklerken bazi denemeler daha yaptim.en son ulastigim sonuclar sunlar:onceki mesajda verdigim ir dedektorlu alici programinda tsop1738 in cikisi rb0 ucuna bagli.ir sinyali(ir sinyalini yayan 2.alici devreden ir ledleri sinyal yayiyor) bir cisim tarafinda kesildiginde rb0 kesmesi olusuyor ve bu durumda "sayi=sayi+1" tanimlamasina gore sayi degeri 1 artiyor.bazen vericiden 1 bilgisi yolladigimda yani ir dedektorlu devreye sayac=1 degeri yolluyor."if sayac=sayi then" oldugunda alarm calmasi gerekiyor.bazen calmadigini gozledim.
 bunun da vericiden al=73 bilgisi yollandiginda alicda sayi=sayi+1 kosulunda sayi=1 degerini aliyor(sanki bazen alici acildiginda rb0 kesmesi olusarak sayi degerini 1 artiriyor) .ben sonradan vericiden sayac =1 degerini yollasamda if sayac=sayi then kosulu gerceklesmiyor.her sinyal kesilme durumunda sayi degeri artiyor.sayac degeri 1 oldugu icin kosul gerceklesmiyor.bazen sayac degeri olarak 2 bilgisini yolluyorum.bu sefer sinyal bir kere kesildiginde alarm caliyor.buda aliciyi acarken sayi degerin 1 degerini almis oldugunugosteriyor.
 bu sorun yer yer yasaniyor.ortalama dogru calisiyor.tabi istikrarli bir durum olmadiginda kullanim degeri olmuyor.
  yukarda ifade ettigim sey kisaca aliciyi acarken(yani sayac degerini gondermeden) bazen sayi degerinin 1 artmasi(yani rb0 kesmesinin bir sefer olusmasi)bu sorunu nasil  giderebilirim.
Yaşam anlamlandırıldıkça kutsaldır....