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

Başlatan Evren KILIÇ, 28 Ocak 2012, 23:08:37

Evren KILIÇ

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
[email]evren1623@hotmail.com[/email]

OG

Bu komuttan sonuç almak istiyorsan şöyle yap. Wait i kaldır ve tek karakter al. Karakteri de ASCII karşılığı olarak decimal/binary/hex değerini al.

http://www.asciitable.com/

F = 70
H = 72
R = 82

x ==> byte

BASLA:               

       SERIN2 GIRIS,396,5000,KAPAT2,[x]  '' burada 5sn data bekler gelmezse KAPAT2 ye gider
if x<> 70 then BASLA  ''' 5sn içinde data geldi ama bu data F mi (70), bu da WAIT ("F") yerine geçer. F değilse BASLA ya doner, yani F bekler.

       SERIN2 GIRIS,396,5000,KAPAT2,[x]
if x<> 72 then BASLA

       SERIN2 GIRIS,396,5000,KAPAT2,[x]
if x<> 82 then BASLA

gibi.



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

Evren KILIÇ

#2
dediğiniz şekilde de  denedim olmadı aynı soruya ETE hocanın yorumu şu şekilde oldu,

" SERIN komutları hem Proton da hemde PBP da karşıdan bilgi gelmez ise programı orada bloke ederler. Her ne kadar komutun kullanımında bir Timeout (zamanaşım) değeri ve etiketi verilmiş ise de komut bu sisteme uygun çalışmamaktadır. Bu işin tek çaresi Usart kullanmaktadır. "

bu durumda rf haberleşmede bu kontrolü yapamıyoruz
[email]evren1623@hotmail.com[/email]

OG

ETE Hoca da, ben de şunu unuttuk. Serin komutunun çakıldığı yer timeout değil de, çakıldığı yer şu.

396 değeri TRUE 2400 hızda çalışma demektir.

TRUE 8N1 yapısı şu,


image hosting jpg


image hosting jpeg



değilmi.

İşte bu yapının anlamını açarsak, data alımından, başlamadan önce hattın voltajı H konumunda olmalı. H değil ise hiçbirşekilde timeout fonksiyonu iş görmez.

Başlangıçta H olan hattı serin ile okumaya başladığınızda verdiğiniz süre sınırı kadar START BIT yani ilk LOW a inişi bekler. Hat zaten başlangıçta LOW da ise bu işlem gerçekleştirilemez.

O sebeple ben SERIN komutunu vermeden önce genelde şöyle yaparım.

h_bekle:
IF GIRIS = 0 THEN h_bekle

'' ve H gelince geçilen bu satırların ardından
SERIN2 GIRIS,396,5000,KAPAT2,[x]

derim.

Bu durumda hat LOW da gereğinden fazla bekliyorsa program o döngüde uzun zaman kaybeder. Buna engel olmak için de

w_1 ==> word



h_bekle:
w_1 = 0
h_bekle_2:
pause 1
'' veya pauseus x
w_1 = w_1 + 1
if w_1 > falan_deger then surayagit
IF GIRIS = 0 THEN h_bekle_2

deyip orada istemediğim kadar beklemesine de engel olurum.

Sonra ardından SERIN komutu gelir.

Bu şekilde hiçbir problem çıkmıyor.


Bir hatırlatma, iletişim TRUE değilde INVERT yapılıyorsa başlangıçta H değil L beklenir. Çünkü INVERT demek TRUE'nun yapısının aynen tersdüz edilmesi demektir. 1 değerleri 0, 0 değerlerinin 1 olması demektir. Başka farkı yok.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OG

Ayrıca iletişim ortamı RF olunca alıcıyı kararlı hale getirmek için, TX'den başlangıçta fazladan 101010101010... treni yollamayı unutmayın.
10101010 = 170 veya
01010101 = 85 demektir.

Ardı ardına birkaçtane 170 veya 85 boşu boşuna gönderilir. RX alıcı bu palsler ile sağlıklı çalışan bir noktaya çekilmiş olur (AGC).
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.