rf modül ile serin2 problemi

Başlatan Lütfi AYYILDIZ, 02 Nisan 2008, 19:23:05

Lütfi AYYILDIZ

Arkadaşlar rf modüllerle çalışırken alıcı kısım sürekli olarak vericiden veri almak için beklemede kalıyor.
serin2,rx,396,[wait("ab"),veri]
dediğimiz andan itibaren veriyi almadıkmı PIC imiz kilitleniyor. Ben başka işlemlerde yapmak istiyorum örneğin bir ledi açıp kapatmak gibi.Ete hocam usart kullanımıyla ilgili bir örnek vermiş ama bu rf modüllerle işe yaramıyor. Sizce bu sorunu nasıl çözebiliriz.?

eee1984

wait dediğin için o ilgili datayı almadan devam etmeyecektir
sende soyle yap wait kullanma  komutun soyle olsun

etiket:
serin2 porta.0,396,[data1,data2]

if(data2=true)

sunları yap yok yanlış sa goto etiket e git dogru okuayana kadar bu dongu devam edecekti datayı dogru alırsa program devam edecektir ;)

kabaca boyle yapılabilir

harun_11

arkadasim eger pic c biliosan sana orda yaptigim ve kesin sonuc aldigim yontemi gondereyim.ben bu sistemle istedigim datayi gonderebiliorum...

Lütfi AYYILDIZ

Biraz C biliyorum. Benim data alıp göndermede bir problemim yok, alıcı kısmın data alırken kilitlenip kalmaması,kısmi olarak çözdüm ama kodlarınızı incelemek isterim

harun_11

daha once burda fatih adli arkadasim yazmisti ben de onun sayesinde ogrendim.alicinin kitlenmesi olayi hakkinda bilgim yok ama.ben karşı taraftaki alıcıya bu sekilde gonderiorum ve hicbir sorunda yok.ustelik 80 karakter gonderdigim halde bile.siz bi inceleyin.Sistemde çift alıcı vericimi kullanıosunuz peki?
verici ksımı:
putc(0b01010101);ön bilgi
putc('h');
putc(0x94);
alıcı:
if(getc()=='h')//eğer alinan h'ye esit ise
{gelen=getc();// veriyi al
      if(gelen==0x94){istediginiz ornegin output_high(pin_c1);}
benim sistemim bu sekilde ve gayet iyi..
projeni soylermisin daha dogrusu tam olarak ne yapmak istiyosun?

bymrz

arkadaşlar bir de pic bsicte serin2 komutuyla bilgi alırken zaman aşımı var bunu deneyeniniz oldu mu hiç? ve çalışıyo mu düzgün bi şekilde...?

SERIN2  PORTA.1,396,500,MAIN,[WAIT ("A"),byte1,byte2]  

kod tam olarak bu şekildemiydi emin değilim ama, normalde burda 500 ms bekleyim bilgi gelmezse maine gitmesi gerekiyor.

bunu deneyeniniz var mı?

Lütfi AYYILDIZ

wait kısmını kaldırırsanız çalışır, ama bu şekilde çalışmaz ve çalışmıyorda.
Çözüm olarak;
RX:
SERIN2 RFRX,396,5,CIK,[DATA1,DATA2,DATA3]
IF DATA1=("A") AND DATA2=("B") THEN
DATA3=.....
...
...
...
DATA1=0:DATA2=0:DATA3=0
ENDIF
GOTO RX
CIK:
...
...
GOTO RX

verici kısmında da veriyi 5-6 defa ard arda göndermeniz gerek.Ben bu şekilde çözdüm.

eln07

Merhaba bende yeni sayılıım bu pic işlerinde böyle bi çalışmam olmuştu paylaşmak istedim.
eğer alıcın başka bir işle uğraşmıyorsa bu yöntem işe yarıyor ama eğer başka şeyle uğraşıyorsa usart ve kesmeleri kullanman lazım.

include "modedefs.bas"

RxData var byte
Loop:
Serin Portb.0,N1200,["XXX"],RxData 'xxx'i bekle ve sonrasınıRxDataya koy
if RxData > 0 Then Analiz 'Gelen veri 0 dan Büyük olacağı için
Goto Loop                    

Analiz:
if RxData = xxx Then Burayagit ' Gelen datayı karşılaştır ve uygula
RxData = 0   'yanlış data gelirse yazmacı sıfırla
Goto Loop

Burayagit:
high Led          'ledi yak
RxData = 0      'yeni veri için yazmacı sıfırla
Goto Loop        ' loop a geri dön.
End

işine yararsa ne mutlu.
kolay gelsin..

i-rot

analiz kısmını kendi alıcıma yerleştirdim teşekkürler