16f877a 433 Mhz RF

Başlatan hasankomur, 27 Ekim 2013, 11:38:26

hasankomur

Hayırlı günler,

Yazmış olduğum verici ve alıcı kodları aşağıdaki gibidir. İsis te çalışıyor fakat board üzerinde çalıştıramadım. Şunu fark ettim ki alıcı modüldeki anten ile yanındaki gnd bağlantısı kısa devre. Böyle mi olması gerekiyor? RF iletişiminde printf("...\r"); ve gets(...); gibi fonksiyonları kullanamıyor muyuz? Yani gönderilen veri integer mı olması gerekiyor?

verici:
#include <16f877a.h>    
#fuses XT,NOWDT,NOWRT,NODEBUG,NOCPD,NOLVP,NOPUT,NOBROWNOUT,NOPROTECT
#use delay (clock=4000000) 
#use rs232 (baud=1200,xmit=pin_c6, rcv=pin_c7, parity=N, stop=1)
void main ()
{
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   while(1)
   {
     //printf("100\r");
     putc(100);
   }

}   


alıcı:
#include <16f877a.h>     
#fuses XT,NOWDT,NOWRT,NOPUT,NOCPD,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP,NODEBUG
#use delay (clock=4000000) 
#use rs232 (baud=1200,xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1)
//char rf[80];
int rf;
#int_rda  
void serihaberlesme_kesmesi ()
{
   disable_interrupts(int_rda);
   output_high(pin_c5);
  // gets(rf); 
   rf=getc();
   if(rf==100)
   output_high(pin_b0);
   output_low(pin_c5);
}

void main ( )
{  
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
    enable_interrupts(GLOBAL);  
  
    while(1)
    {
    enable_interrupts(int_rda); 
    }
}

ferdem

#1
Antenle gnd kısa devre olmamalı, olursa yayın olmaz. Integer şartı yok, printf de kullanılabilir... Forumda RF haberleşme ile ilgili çok başlık var, o başlıklarda sorunuza cevap teşkil edecek detaylı ve yeterli bilgi bulabilirsiniz. Kolay gelsin.

hasankomur

Alıntı yapılan: ferdem - 27 Ekim 2013, 11:47:28
Antenle gnd kısa devre olmamalı, olursa yayın olmaz. Integer şartı yok, printf de kullanılabilir... Forumda RF haberleşme ile ilgili çok başlık var, o başlıklarda sorunuza cevap teşkil edecek detaylı ve yeterli bilgi bulabilirsiniz. Kolay gelsin.

Teşekkürler ben de hatanın orada olduğunu düşünüyordum. Lehimlerken oldu galiba. İsis te integer bilgi gönderdiğim de çalışıyor fakat string bilgi gönderemedim.

protezdiyot

#3
DEVRE ŞEMALARINI VE KODLARI PAYLAŞABİLMENİZ MÜMKÜN MÜ?

Edit : Mesajlarınızı küçük harf kullanarak yazın - Analyzer

hasankomur

#4
Alıntı yapılan: protezdiyot - 29 Ekim 2013, 21:45:58
DEVRE ŞEMALARINI VE KODLARI PAYLAŞABİLMENİZ MÜMKÜN MÜ?

Edit : Mesajlarınızı küçük harf kullanarak yazın - Analyzer
Şuan tam olarak bitmedi. Bitince paylaşabilirim.

mesaj birleştirme:: 30 Ekim 2013, 09:32:31

Sorun alıcı modüldeymiş. Yeni bir rf alıcı-verici modülüyle birkaç uygulama yaptım. Fakat istediğim şekilde çalıştıramadım. Mesela uyandırma sorunu. Aşağıdaki gibi bir kod yazdığımda rf uyanmıyor. Vericideki while döngüsünde sürekli bir veri yazdırdığımda çalışıyor. Ayrıca alıcı devresini çalıştırdığımda kesmede aktif ettiğim pin_c5 pini verici çalışmadığı halde çıkış veriyor.

Verici:

#include <16f877a.h>    
#fuses XT,NOWDT,NOWRT,NODEBUG,NOCPD,NOLVP,NOPUT,NOBROWNOUT,NOPROTECT
#use delay (clock=4000000) 
#use rs232 (baud=1200,xmit=pin_b0, rcv=pin_b1, parity=N, stop=1)

void rf_uyan()
{
putc(0b01010101);
printf("20\r");
}
void main ()
{
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
  
   while(1)
   {
   if(input(pin_a0))
   {
   output_high(pin_b7);
   delay_ms(1000);
   rf_uyan();
   printf("100\r");
   printf("300\r");
   printf("400\r");
   output_low(pin_b7);
   }
   }

}   



Alıcı:

#include <16f877a.h>     
#fuses XT,NOWDT,NOWRT,NOPUT,NOCPD,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP
#use delay (clock=4000000) 
#include <stdlib.h>
#use rs232 (baud=1200,xmit=pin_c6, rcv=pin_c7, parity=N, stop=1)
char rf[80];
int i;
int16 rf1=0,servo=0;
#int_rda  
void serihaberlesme_kesmesi()
{
   disable_interrupts(int_rda);
   output_high(pin_c5);
   gets(rf); 
   rf1=atol(rf);
   if(rf1==20)
   {
   gets(rf);
   rf1=atol(rf);
    }
   output_low(pin_c5);
}

void main ( )
{  
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
    enable_interrupts(GLOBAL);  
    output_b(0);
    //output_low(pin_c5);
    while(1)
    {
    enable_interrupts(int_rda); 
    if(rf1==100)
    {
   output_high(pin_b0);
    }
    if(rf1==300)
    {
   output_high(pin_b1);
    }
    if(rf1==400)
    {
     output_high(pin_b2);
    }
   
  
  
    }
}