udea alıcı verici yardım

Başlatan akasya, 22 Nisan 2008, 18:26:13

akasya

Arkadaşlar merhaba, udea atx-34 ve arx-34 modüllerini çalıştırmaya çalışıyorum. Udeanın sitesinden uygulama notlarını inceledim. Atx-34 Arx-34 ile veri iletimi ve alımı örneğini inceledim ve kodu ccs ile yazıp çalıştırmaya çalıştım, ancak henüz proteusta kabloyla bağladığımda bile düzgün çalıştıramadım. Öncelikle 0x55 preamble, sonra 0x00 ve 0xff senkron veri gönderip ardından asıl veriyi göndermeye çalıştım.
yazdığım kod şu şekilde

*******************verici kodu***********************
#include <16F877A.H>
#fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOWRT, NODEBUG, NOCPD
#use delay(clock=4000000)
#use rs232(baud=2400, xmit=PIN_B7)

void main()
{

while(1)
{
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x55);
putc(0x55);

putc(0x00);
putc(0x00);
putc(0x00);
putc(0x00);
putc(0x00);

putc(0xff);
putc(0xff);
putc(0xff);
putc(0xff);
putc(0xff);

putc(0x33);
}
}

*********************alıcı kodu**********************
#include <16F877A.H>
#fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOWRT, NODEBUG, NOCPD
#use delay(clock=4000000)
#use rs232(baud=2400, rcv=PIN_B6)

int say1=0;
int say2=0;

void fivebyte0();
void fivebyte1();
void read();


void main()
{

while(1)
{fivebyte0();}
}

void fivebyte0()
{
while(1)
{
 if(getc()==0x00)
{say1++;
 if(say1>=5)
 {say1=0;}
 fivebyte1();}
}
}

void fivebyte1()
{
while(1)
{
 if(getc()==0xff)
{say2++;
 if(say2>=5)
 {say2=0;}
 read();}
}
}

void read()
{
if(getc()==0x33)
{output_high(pin_c1);
delay_ms(500);
output_low(pin_c1);}
}

kodlar bu şekilde bu haliyle alıcıda c1 ledi yanıyor ancak 0.5snde bir değil
if(getc()==0x33) komutunda 0x33 e değil de başka bir değere eşitlediğimde led yanmıyor bu haliyle çalışıyor sandım ancak

if(getc()==0x33)
{output_high(pin_c1);
delay_ms(500);
output_low(pin_c1);}

komutunun altına

else{output_high(pin_c2);
delay_ms(500);
output_low(pin_c2);}

eklediğimde bu sefer c1 değil c2 ledi yanıyor yani bu da kodun düzgün olmadığını gösteriyor. Özellikle udea alıcı vericileri çalıştırmış arkadaşlar yardımcı olursa çok sevinirim, acaba senkronizasyon için başka eklemeler mi yapmalıyım, bekleme komutları mı koymalıyım, lütfen arkadaşlar biraz uzun oldu ama gerçekten yardıma ihtiyacım var...

morcali

pic osilatör devresi için ne tür osilatör kullandın. kristal mi?
Kadir

morcali

eğer kristal kullanmadıysan alıcı-verici senkronizasyonunu yakalaman çok zor. Bir de rf üzerinden göndereceğin kodlar sabit mi yoksa değişken mi?

Ben aşağı yukarı 1 aydır uğraştığım bu senkronizasyon olayını daha yeni çözdüm fakat devremde kristal osilatör kullanmamıştım. pic 12f629 dahili rc osilatörünü kullanmıştım.

Verici devreyi udeanın kataloğundaki gibi programladım.

Alıcı devrede ise, verici preamble gönderirken timer1 üzerinden ardarda 10 kez birbirinin aynı 1 veya 0 süresini ölçerek elde etttiğim bir katsayıyı kullanarak rf haberleşme frekansını hesaplattım.
Kadir

morcali

yazdığın mesajı iyi okumadan cevap yazmıştım kusura bakma. rf haberleşmede hazır rs232 kodlarını kullanmasan daha iyi olur diye düşünüyorum.
Kadir

ranadilara

hazır rs232 kodları kullanılmazsa her komuttan sonra bekleme süreleri mi eklemek gerekir

morcali

seri iletişim için gerekli baud rate'i sağlamak bekleme süreleri koyabilirsin. Bekleme sürelerini de çok hassas ayarlamalısın. Baud rate'in kaç olduğu önemli değildir alıcı ile vericinin senkronizasyonu yani aynı baudda çalışması önemlidir. Udea nın veri sayfalarında maksimum ve minimum baud rate'lar verilmiş. Bu arlıkta olduğu sürece rf modüller çalışıyor.
Kadir

aliveli

rf haberleşme için düz yazı yerine bilgi göndereceksen hazır modulatör kullanmanı öneririm pt2262 pt2272 gibi