rf modül yardım

Başlatan akasya, 06 Mayıs 2008, 20:44:32

akasya

merhaba arkadaşlar, udeanın rf modüllerini kullanmaya çalışıyorum, modülleri basit bir kodla çalıştırabildim, ancak asıl çalıştırmak istediğim kod B portunda değişiklik olduğunda kesme fonksiyonun içinde putc() kullanarak veri iletebilmek, ancak bunu bir türlü başaramadım, öncelikle basit olarak şunu denedim

****************verici****************

#include <16F877A.H>
#fuses XT,NOWDT,NOPROTECT,BROWNOUT,PUT,NOLVP
#use delay (clock=4000000)
#use rs232 (baud=600, xmit=PIN_C6)

void main()
{
enable_interrupts(int_RB);
enable_interrupts(GLOBAL);
set_tris_b(0xFF);

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(0xdd);
putc(0xcc);

}
}

#int_RB
void kesme()
{
 putc('y');
}


*****************alıcı**************

#include <16F877A.H>
#fuses XT,NOWDT,NOPROTECT,BROWNOUT,PUT,NOLVP
#use delay (clock=4000000)
#include <lcd.c>
#use rs232 (baud=600, rcv=PIN_C7)

/*****************************degiskenler****************************/


int say1=0;
int say2=0;
int i=0;
char x;

void read()
{
if(getc()==0xdd)
{if(getc()==0xcc)
{ x=getc();}
}
}

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


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

void main()
{

setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı


while(1)
{
   fivebyte0();

   if(x=='y')
   {output_high(pin_a2);
    delay_ms(500);
    output_low(pin_a2);
    delay_ms(500);}
}
}


ama çalıştıramadım, acaba hata nerde, illa while1()'in içinde mi veri göndermem lazım, yardımcı olursanız çok sevinirim...

ferdem

#int_RB
void kesme()
{
 putc('y');
}


yerine

#int_RB
void kesme()
{
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(0xdd);
putc(0xcc);

putc('y');
putc('y');
putc('y');

}


olarak dener misiniz? Vericideki "while" içini de silebilirsiniz, yani bu deneme uygulamanız için sonsuz döngüye gerek yok. Sadece kesme gelince kesme alt programı çalışsın yeter. İyi çalışmalar.

akasya

@ferdem

dediğiniz gibi de denedim aslında

*****************verici**************
#include <16F877A.H>
#fuses XT,NOWDT,NOPROTECT,BROWNOUT,PUT,NOLVP
#use delay (clock=4000000)
#use rs232 (baud=600, xmit=PIN_C6)

char data;

void byte_yolla(data)
{
 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(data);
 putc(data);
 putc(data);

}
void main()
{
   enable_interrupts(int_RB);
   enable_interrupts(int_timer1);
   enable_interrupts(int_timer0);
   enable_interrupts(int_timer2);
   enable_interrupts(global);

   
   set_tris_b(0x10);

   while(1)
   {
   
   }

}

#int_RB
void kesmeAltFonk()
{
  data='a';
  byte_yolla(data);
}


*********alıcı kodu*****
#include <16F877A.H>
#fuses XT,NOWDT,NOPROTECT,BROWNOUT,PUT,NOLVP
#use delay (clock=4000000)
#include <lcd.c>
#use rs232 (baud=600, rcv=PIN_C7)

/*****************************degiskenler****************************/


int say1=0;
int say2=0;
char x;

void read()
{
 x=getc();
 if(x=='a')
 {output_high(pin_a2);
  delay_ms(500);
  output_low(pin_a2);}
}

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


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

void main()
{

setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
lcd_init();

while(1)
{
   fivebyte0();   
}
}


lakin yine rf modüllerde tık yok:(( yardımcı olabilirseniz çok sevinirim

Cetinal

peki modülsüz çalışıyormu kablo ile bağlantısını yapın deneyin birde öyle
m0odüller keymark ise eğer vericiye 3V vermek gerekir bu herkesin başına gelen bir durum bende dahil :D

ferdem

Umarım bu yazı size yardımcı olur:
atx-arx RF Modüllerinizi Test Edin!

Bir bakın bakalım, olmazsa yine düşünürüz. İyi çalışmalar.