Rf iletişimde bağlantı kopmasını algılama

Başlatan Evren Kılıç, 28 Ocak 2012, 14:14:18

Evren Kılıç

merhaba arkadaşlar,
aşağıda rf alıcı  kodları bulunmakta ama bu hali ile verici ile ileişimi kesildiğinde çıkış en son hangi komutu almış ise o şekilde kalıyor
ama ben iletişim kopmasında çıkışın low olmasını istiyorum örneğin verici devreyi kapattığımda veya mesafe nedeni ile iletişim kesildiğinde  KAPAT: etiketine gitmesini istiyorum bunu nasıl yapabilirim?

PORTA=0 
PORTB=0
TRISA=%00000001   'A portu A.0 giriş diğerleri çıkış yapıldı.
TRISB=%00000000   'B portu tamamı çıkış yapıldı.
'-----------------------------------------------------------------
@ DEVICE pic16F84A                      'işlemci 16F84a                               
@ DEVICE pic16F84A, WDT_on              'Watch Dog timer açık
@ DEVICE pic16F84A, PWRT_ON             'Power on timer açık
@ DEVICE pic16F84A, PROTECT_OFF         'Kod Koruma kapalı

'---------------------------değişkenler------------------------------
AL     VAR  BYTE
GIRIS  VAR  PORTA.0
LEDA   VAR  PORTB.0
ROLE   VAR  PORTB.1
'-----------------------------B A Ş L A N G I Ç ---------------------------   
CLEAR                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
PAUSE 100
PORTB=0  'tüm çıkışlar low seviyesinde
'-------------------------------------------------------------------------------   
BASLA:               
       SerIn2 GIRIS,396,[WAIT ("F","H","R"),AL]
       GOSUB CALISTIR
       GOSUB KAPAT
       PAUSE 100
       GOTO BASLA

CALISTIR:
          IF AL=120 THEN
          HIGH LEDA
          HIGH ROLE
          ENDIF
          RETURN
KAPAT:   
          IF AL=0 THEN
          LOW  LEDA
          LOW  ROLE
          ENDIF
          RETURN
   

END

est32

SERIN2 DataPin{\FlowPin},Mode,{ParityLabel,} {Timeout,Label,}[Item...]'e göre yapılırsa;
SerIn2 GIRIS,396,[WAIT ("F","H","R"),AL] satırı

SERIN2 GIRIS,396,5000,KAPAT,[WAIT ("F","H","R"),AL]' şekline çevrilirse 5 saniye veri gelmesi beklenir ve 5. saniye sonrası kapat etiketine gidilir.PBP de denemedim fakat protonda aynı işi yapan başka bir komut ile çalıştım. İstenirse bu süre yanlış bilmiyorsam 65535'e kadar çıkabilir(yaklaşık 1 dakika).

Evren Kılıç

BASLA:               
       SERIN2 GIRIS,396,5000,KAPAT,[WAIT ("F","H","R"),AL]
       GOSUB CALISTIR
       GOSUB KAPAT
       PAUSE 100
       GOTO BASLA
şeklinde yaptım fakat olmadı

est32

#3
BASLA:
        AL=0       
       SERIN2 GIRIS,396,5000,KAPAT,[WAIT ("F","H","R"),AL]
Şeklinde veri alınmadan önce değişkeni sıfırlamak gerek, yoksa önceki değer değişkende kalır.
****************
yalnız, kapat etiketine gidilirse sorun çıkar.Çünkü oradan da return komutu ile geri dönülmüş. yığın hatası verir program. programda yeniden düzenleme yapmak lazım.

est32

BASLA:
       AL=0               
       SERIN GIRIS,396,5000,KAPAT,[WAIT ("F","H","R"),AL]
       GOSUB CALISTIR
DEVAM:
       PAUSE 100
       GOTO BASLA

CALISTIR:
          IF AL=120 THEN
          HIGH LEDA
          HIGH ROLE
          ENDIF
          RETURN
KAPAT:   
          IF AL=0 THEN
          LOW  LEDA
          LOW  ROLE
          ENDIF
          GOTO DEVAM

Şeklinde dener misin?

Evren Kılıç

#5
denedim
bu şekilde kapa etiketine gitmiyor kodları şu şekilde denedim :
BASLA:
       AL=0               
       SERIN2 GIRIS,396,5000,KAPAT,[WAIT ("F","H","R"),AL]
       GOSUB CALISTIR
       
       IF AL=0 THEN
       GOSUB KAPAT
       ENDIF
DEVAM:
       PAUSE 100
       GOTO BASLA

CALISTIR:
          IF AL=120 THEN
          HIGH LEDA
          HIGH ROLE
          ENDIF
          RETURN
KAPAT:   
          IF AL=0 THEN
          LOW  LEDA
          LOW  ROLE
         
          ENDIF
          GOTO DEVAM

bu şekilde de olmuyor

est32

#6
dosyaları(isis ve proton) yükler misin bir de ben deneyeyim şunu?


est32

ben de çalıştıramadım, sakin kafa ile düşünmek lazım

halilgaliç

#9
benimde yıllar önce  bu sorun  basıma geldi söyle bir yol uygulamıştım.TX kısmında bir ısı bilgisini birde program içinde 1-0 olan bir değişken degeri yolladım.RX kısmında bu ısı degerini lcd gösterttim,1-0 olarak değişen değişken degerinin durumuna göre ledi yakıp söndürttüm .eger led sönük ise yada tanıyor ise rf den data gelmediği anlamna geliyor
yazılımı bulamadım ama genel olarak söyleydi;
-----------------tx--------------
VERI=1
SEROUT2 PORTB.2,16780,[254,ISI,VERI]
VERI=0
SEROUT2 PORTB.2,16780,[254,ISI,VERI]
-------------------RX-----------------------------------------
SERIN2 PORTB.1,16780,[WAIT(254),ISI,VERI]
IF VERI=1 THEN
HIGH PORTC.4
PAUSE 100
ENDIF

IF VERI=0 THEN
LOW PORTC.4
PAUSE 100
ENDIF

Evren Kılıç

aşağıdaki kodlar ile  5 saniye içinde veri alınmaz ise kapat2 etiketine gidilmesi gerekmiyormu bu kodlar neden çalışmıyorki?
BASLA:                

       SERIN2 GIRIS,396,5000,KAPAT2,[WAIT ("F","H","R"),AL]
         
       
       GOSUB CALISTIR
       
       GOSUB KAPAT
     
       PAUSE 100
     
       GOTO BASLA

CALISTIR:
          IF AL=120 THEN
          HIGH LEDA
          HIGH ROLE
          ENDIF
         
          RETURN
KAPAT:   
          IF AL=0 THEN
          LOW  LEDA
          LOW  ROLE
        ENDIF
         RETURN
         
         KAPAT2:
          LOW  LEDA
          LOW  ROLE
          GOTO BASLA
   

END

est32

ben de çözemedim, bugüne özel bir durum var galiba.
Derleyici mi, bilgisayar mı bir isyan dalgası, bir iş yavaşlatma,grev var ama kaynağını bulamadım hala. Bugün kendi yazdığım program da çalışmadı, nedir bu anlamadım. Bu program da bende işlemiyo, işlemci bu satırları dikkate almadan atlıyor;

IF TMM=0 THEN GOSUB VERICI_YAZ'gitmiyor işte
...
...
...
'**********************************************************************************************
VERICI_YAZ:
        PLL=EK_FRK/5
        FRK=EK_FRK
        TOGGLE PORTA.2'programın bu satıra geldiğini gözlemek için ama çalışmıyor işte
        I2COUT SDA,SCL,$C0,[PLL.HIGHBYTE,PLL.LOWBYTE,$8E]
        EWRITE 0,[PLL]
        DELAYMS 10
        RETURN
'**********************************************************************************************

ELZEMEFE

İNCLUDE  dosyasını eklediniz mi ardaşlar..


Mucit23

Alıntı yapılan: ELZEMEFE - 28 Ocak 2012, 23:52:25
İNCLUDE  dosyasını eklediniz mi ardaşlar..
İnclude dosyasından kastın nedir anlayamadım. İnclude dosyasındaki işlemler ve tanımlamalar ana programdada yapılabilir. İnclude ile programa hangi dosyayı ekiyeceksin. Daha doğrusu hangi dosyadan bahsediyorsun.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Powered by EzPortal