Picproje Elektronik Sitesi

DERLEYİCİLER => PIC C => Konuyu başlatan: meganeura - 23 Aralık 2013, 23:01:56

Başlık: CCS C'de RF iletişim
Gönderen: meganeura - 23 Aralık 2013, 23:01:56
Proje ödevim için uzaktan kumandalı araba yapmaya çalışıyorum. 16f877'ye bağlı L293D ile iki dc motor kontrol edilecek. En büyük sorunum RF ile iletişim nasıl programlanabilir 6 bitlik veriyi tek bitle nasıl gönderebilirim? Kaynak araştırdım ama bulamadım yardımcı olursanız sevinirim.

Yapmaya çalıştığım devre böyle birşey:
(http://u1312.hizliresim.com/1j/r/vu8qd.png)
Başlık: Ynt: CCS C'de RF iletişim
Gönderen: polleme - 23 Aralık 2013, 23:50:02
6 bitlik veriyi 8 bitlik tek bir sayı ile gönderebilirsiniz. İşlemci 8 bit olduğundan tek seferde 8 bit gönderebilir, seri port bunu bir seferde iletir.
Başlık: Ynt: CCS C'de RF iletişim
Gönderen: meganeura - 24 Aralık 2013, 00:05:25
Pek bilgili olmadığımdan doğru anlatamadım sanırım. Verici devrede 6 farklı buton var 6 farklı durumu tek pinde nasıl belirtebilirm. Sanırım çizdiğim devre yanlış alıcının RC7/RX girişine bağlı olması gerek.
Başlık: Ynt: CCS C'de RF iletişim
Gönderen: serhat1990 - 24 Aralık 2013, 09:16:56
Merhabalar 6 farklı buton olması sorun değil 8 bit = 1 byte'lık bir bilgi ile gönderebilirsiniz .
Bununda çok basit yolları var.B portunun durumunu herhangi bir değişkene atayın. Bu değişkeni karşı tarafa iletin. Karşı tarafın aldığı byte üzerinde işlemlerinizi tanımlayın.

Ayrıca zamanında paylaştığım örnekler bu konuda işinize yarayabilir .

https://www.picproje.org/index.php/topic,38490.0.html (https://www.picproje.org/index.php/topic,38490.0.html)

iyi çalışmalar saygılarımla ...
Başlık: Ynt: CCS C'de RF iletişim
Gönderen: meganeura - 24 Aralık 2013, 09:50:28
Çok teşekkürler ama sayfadaki hiçbir linkten faydalanamadım. Ya arşiv hatası diyor ya da dosya kaldırılmış.
Başlık: Ynt: CCS C'de RF iletişim
Gönderen: serhat1990 - 24 Aralık 2013, 11:42:53
Verdiğim linkte indirme linklerine bakın. Linklerin biraz altında RFDENEMESI.rar ve ccscdersleri.rar bölümüne tıklarsanız indirebilirsiniz. ARX - ATX bölümündeki link işinize yarayacaktır. ASK modüller ile haberleşme konusunda. İyi çalışmalar , saygılarımla ...
Başlık: Ynt: CCS C'de RF iletişim
Gönderen: LukeSkywalker - 24 Aralık 2013, 12:21:31
 Bu linkten (http://mikrodunya.wordpress.com/2011/11/08/udea-nin-rf-veri-iletimi-alanindaki-kucuk-devleri-atx-34-nrx-34/) udea rf modüllerin kullanımını öğrenebilirsiniz.
Başlık: Ynt: CCS C'de RF iletişim
Gönderen: meganeura - 27 Aralık 2013, 02:31:09
Yardımlarınız için tekrar teşekkürler verdiğiniz örneklerde işin içine adc, uart gibi farklı şeyler girmiş kafam iyice karıştı :-[ Yazdığım kodlar bu şekilde. Vericinin tx çıkışından kare dalga elde ediyorum ama alıcıda rda kesmesi oluşmuyor. Gönderdiğim şeyleri doğru okumasa anlarım preamble, öncü veri gibi birşeyler yapmam lazım. Anlamadığım şey alıcının rx girişinde değişiklik olduğunda hiç kesme oluşmaması.
verici:
#include <16F877A.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#use delay(clock=4M)
#use rs232(baud=600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
void main()
{
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   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);
   set_tris_b(0x00);
   set_tris_a(0xFF);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   while (1)
   {
   if(input(pin_a0)==0)
      {
      putc('q');
      delay_ms(1);
      }
   if(input(pin_a1)==0)
      {
      putc('a');
      delay_ms(1);
      }
   if(input(pin_a2)==0)
      {
      putc('w');
      delay_ms(1);
      }
   if(input(pin_a3)==0)
      {
      putc('s');
      delay_ms(1);
      }
   if(input(pin_a4)==0)
      {
      putc('e');
      delay_ms(1);
      }
   if(input(pin_a5)==0)
      {   
      putc('d');
      delay_ms(1);
      }
   }
}

alıcı:
#include <16F877A.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES WRT_50%                  //Lower half of Program Memory is Write Protected

#use delay(clock=4000000)
#use rs232(baud=600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

char veri;

#int_rda
void RDA_kesme()
{
   disable_interrupts(int_rda);
   output_b(0x0F);
   getc(veri);
   
   
}
void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   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(int_RDA);
   enable_interrupts(GLOBAL);
   set_tris_c(0xFF);
   set_tris_A(0x00);
   set_tris_b(0x00);

   while(1)
   {
      enable_interrupts(int_rda);
     
     
         if (veri=="q")
         output_a(0x02);
         if (veri=="a")
         output_a(0x01);
         if (veri=="w")
         output_a(0x0A);
         if (veri=="s")
         output_a(0x06);
         if (veri=="e")
         output_a(0x08);
         if (veri=="d")
         output_a(0x04);
   }
   
}
Başlık: Ynt: CCS C'de RF iletişim
Gönderen: yarenler42 - 02 Ekim 2015, 16:02:24
iyi günler arkadaşlar 2 yıl önce uğraştığınız çalışmalara ben de şu an dahil olayım istedim, tek başıma aylardır kurcalıyorum fakat beceremedim. yardım etmeniz mümkünmü, aşağıda kullandığım kodları paylaşıyorum.
verici:
#include <16F628A.h>
#device adc=16
#fuses INTRC_IO, NOWDT, NOPUT, NOPROTECT, NOBROWNOUT, NOMCLR, NOLVP, NOCPD

#use delay(clock=4M)
#use fast_io(a)
#use fast_io(b)

int m;
#use rs232(baud=900,parity=N,xmit=pin_B2,rcv=pin_B1,bits=8)

void main()
{
   set_tris_a(0x03);
   set_tris_b(0x00);
   output_a(0x00);
   output_b(0x00);
   
   delay_ms(100);
   
while(TRUE){           
            if(input (pin_a0)==1){
                                  delay_ms(39);while(input(pin_a0));
                                  putc(0b01010101);//   putc(0b00000000);   putc(0b11111111);
                                 
                                  putc('X');
                                  delay_ms(39);
                                  putc('A');                             
                                  delay_ms(10);output_toggle(pin_a2);delay_ms(239);
                              }
      if(input(pin_a1)==1){                     
                              delay_ms(39); while(input(pin_a1));
                              putc(0b01010101);//  putc(0b00000000);    putc(0b11111111);
                             
                                putc('X');
                                delay_ms(39);
                                putc('B');
                                delay_ms(10);output_toggle(pin_a3);delay_ms(239);
                              }
   }
}
alıcı:
#include <16F628A.h>
#device adc=16
#fuses INTRC_IO, NOWDT, NOPUT, NOPROTECT, NOBROWNOUT, NOMCLR, NOLVP, NOCPD

#use delay(clock=4M)
#use rs232(baud=900,parity=N,xmit=pin_B2,rcv=pin_B1,bits=8) 

#int_rda

int i;
char e;
char x;

void kesgel(){
              disable_interrupts(int_rda);return;
             }
                   
void main()
{                                             
   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);
   
   set_tris_a(0x00);
   output_a(0x00);
   
   enable_interrupts(int_rda);
   enable_interrupts(global);
   
   while(TRUE)           
   {enable_interrupts(int_rda);
    enable_interrupts(global);
                             
      if(getch()=='X') {  e = getch();
                        if(e=='A'){  kesgel();
                       
                                output_toggle(pin_a0);delay_ms(500);
                                output_toggle(pin_a0);delay_ms(500);
                                output_toggle(pin_a0);delay_ms(500);
                                output_toggle(pin_a0);delay_ms(500);
                                output_toggle(pin_a0);delay_ms(500);
                                    }
                        if(e=='B'){  kesgel();
                       
                                     output_toggle(pin_a1);delay_ms(239);
                                     output_toggle(pin_a2);delay_ms(239);
                                     output_toggle(pin_a3);delay_ms(239);
                                     }
                          }
     }
}
Başlık: Ynt: CCS C'de RF iletişim
Gönderen: tunayk - 03 Ekim 2015, 12:54:38
RF iletişim konusunda eğer konu başındaki şema ile çalışıyorsanız, hiç bir rf sinyali picin bacağına doğrudan gönderildiği gibi ulaşmazki picin bacağında doğrudan bir Rx kesmesi oluşsun.  RF sinyaller milivolt veya mikrovolt seviyelerinde oluşuyor. Anten ve yükseltici devre sayesinde anlaşılır bir hale gelir. Picin Rx bacağına bu değerde bir sinyal geldiğinde doğal olarak 0 olarak algılanır ve kesme oluşmaz. Bu işlem için hem verici hem de alıcı tarafından modüllerin kullanılması gerekli. (Sizin için RF katını tasarlamanın daha zor olduğunu varsayarak).

Modül kullandığınızda kullandığınız modülün yapısına göre bir  haberleşme yapısı kullanacaksınız.  Çoğunlukla modül kullandıktan sonra doğrudan rx - Tx bağlı imiş  gibi haberleşirsiniz.