Comunicación para la transmision de datos entre PIC por RF

Hola, necesito que alguien me guie para realizar una comunicación entre dos PIC\'s 16f877, lo que pasa es lo siguiente: tengo dos pics uno como transmisor con un HM-T 915 Mhz y otro pic como receptor con un HM-R915 Mhz. Por el momento ya tengo la conexión de cada microcontrolador y su respectivo dispositivo y funciona correctamente, el transmisor mostrando con un lcd los datos del 0 al 100, pero el receptor como lo estoy reflejando con un lcd me muestran datos que no son yo me imagino que eso es a lo que se refieren como datos basura, pero el receptor al menos esta captando; todo esto ya lo conecte a un osciloscopio y lo que me muestra son dos señales con mucho ruido. Los componentes tienen una antena de de conejo que nos encontramos. En el programa estoy ocupando es en C y es el siguiente:

Transmisor
Código:
#include <16F877a.h>

#fuses XT, NOWDT
#use delay(clock=4000000)
#use rs232(baud=4800, xmit=pin_c6, rcv=pin_c7, bits=8, stop=1)
#define use_portb_lcd TRUE

#include <lcd.c>

int valor;
void main () {
   
   port_b_pullups(TRUE);
   lcd_init();//Inicialización del display
   while(1){
      for (valor=0; valor<=100; valor++){
         putc(valor);         //...se envía contenido de valor
         printf(lcd_putc,"\fEnviado %u", valor);   //Se muestra en pantalla información enviada
         delay_ms(1000);
      }
   }   
}

Receptor
Código:
//#include \\\\VBOXSVR\\compartida\\MedirDistanciaUltrasonico\\SensorUltrasonicoI2C.h
#include <16F877A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock= 4000000)
//#use i2c(master,sda=PIN_C4,scl=PIN_C3,force_hw,fast)
#use RS232(BAUD=4800,XMIT=PIN_C6,RCV=PIN_C7,BITS=8, stop=1)

#include <lcd.c>

#BYTE TRISA=0X85
#BYTE PORTA=0X05
#BYTE TRISB=0X86
#BYTE PORTB=0X06


int valor;

#int_RDA

void RDA_isr(){
        valor=GETC();
        delay_ms(500);
        bit_clear(PORTB,3);
        
}

void main() {
//int16 valor;
//int i;
   lcd_init();
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   while(True){  
      lcd_gotoxy(5,1);
      delay_ms(500);
      bit_set(PORTB,3);
      printf(lcd_putc,"recibiendo = %u ",valor);
   }
}
Al principio pensé que involucraba la distancia que tenían ambos para enviar datos pero ya los aleje y fue como el receptor comenzó a captar pero datos que no tenían nada que ver. Ojala y alguien me pueda aportar algo por favor se lo agradeceré de corazón ya que es para mi tesis y estoy super atorada en esto. En este proyecto no utilice los codificadores y decodificadores ya que me dijeron que esto lo hace el pic. GRACIAS ...
 
Última edición por un moderador:
Podrias adjuntar una foto con el circuito, pues estoy empezando con la comunicacion entre pic's por RF. Gracias!
 
Podrias adjuntar una foto con el circuito, pues estoy empezando con la comunicacion entre pic's por RF. Gracias!

Me parece que este tema ya se habia tratado, se dieron varias sugerencias, y fue moderado, en mi opinion es cuestion de invertir la polaridad de la entrada de datos del transmisor y receptor via software o hardware, el circuito no es mas que el modulo conectado segun la ficha tecnica. (directo del modulo al pic :D)
 
Hola buenas tardes. He venido aquí para que me puedan ilustrar e incluso para que me digan que estoy haciendo mal :cry: ya que tengo un trabajo que me tiene anclada ya unos meses, la situación es la siguiente:

Cuento con un sistema RF cuya frecuencia es de 315 MHz (son los que dejo adjuntos) y un PIC16F877 cuya función es enviar una secuencia de números del 0 al 100.Les dejo el programa a continuación. Es muy básica e incluso viene en el libro que estoy ocupando. El problema es que tengo el receptor y no detecta la información enviada. El transmisor tanto el receptor tienen un lcd cada uno; en el transmisor si se ve que esté funcionando el envío de datos por parte del PIC. Pero en el receptor el lcd muestra valores que nada que ver. Ya cheque por separado el transmisor y receptor con el kit de transmisores con sus codificador y decodificador (sin el pic) y si funcionan. Pero al momento de conectarle el pic deja de trabajar como debería. Por favor que alguien me oriente en esto, ya que es un trabajo importante y por mas foros que leo aun no he encontrado mi problema, además la mayoría de las personas que trabajan con estos componentes, les funciona de maravilla solo tienen problemas ya sea de la frecuencia, el filtrado del ruido, la antena, la distancia entre ellos e incluso el valor de los baudios que debe de ser mas baja (en mi caso lo probé con 1200). Y cuando conecto con un cable los dos circuitos si envía los datos como debe de ser. Les agradecería muchísimo sus opiniones y tomare en cuenta cada una de ellas. Muchas gracias. :)

COMUNICACIÓN RS232 ENTRE DOS PIC
PIC Tx


Código:
#include <16F877a.h>

#fuses XT, NOWDT

#use delay(clock=4000000)
#use rs232(baud=4800, xmit=pin_c6, rcv=pin_c7, bits=8, stop=1)

#define use_portb_lcd TRUE

#include <lcd.c>

int valor;
void main () {
   
   port_b_pullups(TRUE);
   lcd_init();//Inicialización del display
   while(1){
      for (valor=0; valor <= 100; valor++){
         putc(valor);         //...se envía contenido de "valor"
         printf(lcd_putc, "\fEnviado %u", valor);   //Se muestra en pantalla información enviada
         delay_ms(1000);
      }
   }   
}

COMUNICACIÓN RS232 ENTRE DOS PIC
PIC Rx


Código:
//#include "\\VBOXSVR\compartida\MedirDistanciaUltrasonico\SensorUltrasonicoI2C.h"
#include <16F877A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock= 4000000)
#use RS232(BAUD=4800,XMIT=PIN_C6,RCV=PIN_C7,BITS=8, stop=1)

#include <lcd.c>

#BYTE TRISA=0X85
#BYTE PORTA=0X05
#BYTE TRISB=0X86
#BYTE PORTB=0X06


int valor;

#int_RDA

RDA_isr()
{

        valor=GETC();
                
}

void main() {

   lcd_init();
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   while(True){  
      lcd_gotoxy(5,1);
      delay_ms(500);
      printf(lcd_putc,"recibiendo= %u ",valor);
   }
}
 

Adjuntos

  • TWS-BS-6_315MHz_ASK_RF_Transmitter_Module_Data_Sheet.pdf
    291.7 KB · Visitas: 83
  • RWS-374-3_315MHz_ASK_RF_Receiver_Module_Data_Sheet.pdf
    266.4 KB · Visitas: 32
Última edición por un moderador:
Este tipo de transmisores debido a su modulación ASK que utilizan presentan ese tipo de problemas. Para evitarlo se suele enviar la información "camuflada", es decir se codifica (generalmente en FM) y se envía, el chiste es no dejar el canal de transmisión sin envió de datos para que no se pierda la sincronización.
Te sugiero primero intentes enviar los datos a una velocidad más lenta y si no funciona cambiar el método de transmisión a uno que no sea RS232
 
Atrás
Arriba