Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: akasya - 06 Mayıs 2008, 20:44:32

Başlık: rf modül yardım
Gönderen: akasya - 06 Mayıs 2008, 20:44:32
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...
Başlık: rf modül yardım
Gönderen: ferdem - 07 Mayıs 2008, 00:10:28
#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.
Başlık: rf modül yardım
Gönderen: akasya - 07 Mayıs 2008, 01:41:23
@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
Başlık: rf modül yardım
Gönderen: Cetinal - 07 Mayıs 2008, 17:46:22
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
Başlık: rf modül yardım
Gönderen: ferdem - 08 Mayıs 2008, 00:17:31
Umarım bu yazı size yardımcı olur:
atx-arx RF Modüllerinizi Test Edin! (http://www.fatiherdem.net/icerik.asp?yer=gst&id=60)

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