Problemas con modulos RF 433Mhz y 315Mhz

Saludos expertos
Tengo un proyecto de comunicacion bidireccional por lo que estoy usando dos modulos distintos de comunicacion, el problema consiste en que no he usado estos modulos antes y no me esta funcionando nada bien, los ejemplos que he encontrado dicen que solo se conectan los dispositivos directamente al RX y TX del PIC, si conecto las salidas rs232 por medio de cables directamente funcionan bien pero cuando uso los modulos no recibo nada solo interferencia, segun las instrucciones el rango de envio es a 4800 bauds, tambien he usado a 2400 bauds pero nada ha dado respuesta. si alguien tiene o ha tenido un problema similar me gustaria saber cual fue la solucion o si alguien tiene un manual o puede proveerme con un manual de como utilizar estos modulos, les estaria agradecido.

RF Link Receiver - 4800bps (315MHz)
RF Link Receiver - 4800bps (434MHz)
RF Link Transmitter - 434MHz
RF Link Transmitter - 315MHz
son de sparkfun.com
 
Programa los 2 pic, conecta la salida serial d euno a la entrada del otro, proba el programa que envie bien y que el otro pic reciba bien, si asi anda, saca el cable y proba con los modulos, tiene que andar, fijate que esten bien conectados y que esten cerca.
 
Saludos expertos
Tengo un proyecto de comunicacion bidireccional por lo que estoy usando dos modulos distintos de comunicacion, el problema consiste en que no he usado estos modulos antes y no me esta funcionando nada bien, los ejemplos que he encontrado dicen que solo se conectan los dispositivos directamente al RX y TX del PIC, si conecto las salidas rs232 por medio de cables directamente funcionan bien pero cuando uso los modulos no recibo nada solo interferencia, segun las instrucciones el rango de envio es a 4800 bauds, tambien he usado a 2400 bauds pero nada ha dado respuesta. si alguien tiene o ha tenido un problema similar me gustaria saber cual fue la solucion o si alguien tiene un manual o puede proveerme con un manual de como utilizar estos modulos, les estaria agradecido.

RF Link Receiver - 4800bps (315MHz)
RF Link Receiver - 4800bps (434MHz)
RF Link Transmitter - 434MHz
RF Link Transmitter - 315MHz
son de sparkfun.com

Buenos días. Estos módulos son como "El mecanismo del chupete" muy fáciles de manejar.
Los TX necesitan datos con niveles TTL, por lo que si estas introducciendo datos con niveles RS232 no te funcionarán y los receptores sacan los datos en niveles TTL por lo que tendrás que convertirlos a niveles RS232.
Otra cosa son las interferencias de otros de los muchos usuarios de estas frecuencias.
Saludos.
 
saludos biker2k3
gracias por tu pronta respuesta, esa prueba que me pedista ya lo habia realizado antes y con exito el problema es cuando substituyo el cable por los modulos.
alguna otra idea

saludos EB4GBF
gracias por responder, los modulos los estoy conectando directamente a los puertos de comunicacion serial de los pics, pero igual no funciona, no se que es lo que pasa, como dices tu deberian de ser de conectarse y usarse pero no se que es lo que esta pasando, ahora estoy probando con 1200 bauds pero nada..
alguna sugerencia
 
Última edición:
La frecuencia de trabajo de los módulos deben ser iguales osea si usas el RF Link Transmitter - 315MHz debes usar entonces el RF Link Receiver - 315MHz para que puedan comunicarse, yo realice uno con picbasic pro y protocolo serial con niveles lógicos tipo TTL y funciono perfecto, tienes que tener en cuenta que los voltajes de alimentación para el receptor pueden varias dependiendo de la distancia a mayor distancia mayor voltaje, creo que el mínimo es de 9V aunque puede que funcione a 5V pero muy serca, si puedes colocas las imágenes, fotos, de tu montaje para ver si tienes alguna mala conexión que no veas.
 
saludos reyvilla
estoy utilizando las parejas del 315Mhz, lo que estoy haciendo es enviando una "1" a 4800 bauds, cuando se recibe este uno se enciende un led por 100 ms luego lo apaga y si vuelve a recibirlo otra vez lo enciende, pero no esta pasando eso, si conecto con cables el sistema funciona muy bien. le tome fotos al circuito pero no veo ninguna opcion que me permita subir las imagenes pero si se que todo esta cableado correctamente tal y como dice la pagina de sparkfun, si me dicen como subir imagenes adjunto las foto gracias
saludos
 
Hola de nuevo RALD. La transmisión de datos por RF nos puede causar más de un dolor de cabeza.
Cuando conectas los PIC directamente te funciona bien, pero cuando intentas el enlace por RF te falla.
Ten en cuenta que esos Receptores estan recibiendo ruido constantemente y en la salida hay 0 y 1 cambiando constantemente.
Por razones de mi trabajo he visto esto muchas veces y los programadores han tenído, en ocasiones, verdaderos problemas para filtrar todo este ruido y quedarse solo con la señal útil.
En ocasiones pensamos que una transmisión de datos que por cable funciona perfectamente tambien va funcionar por RF, pero esto no es así ya que en RF y más en esas frecuencias hay muchos más usuarios.
Si tienes un Osciloscopio, monitorea la salida del Receptor, verás que está cambiando continuamente.
Para hacer la prueba pon el TX y el RX lo más cerca posible uno del otro, para minimizar las interferencias quita la antena del Receptor y a ver que pasa.
Te puede estar pasando que el software no responda bien a una entrada de datos muy aleatoria y no sea capaz de discriminar lo útil de la basura.
Los telemandos que funcionan en esta frecuencia funcionan normalmente bien ya que los datos que envian los transmiten varias veces y al final el receptor los entiende.
Supongo que estas utillizando la salida del pin 2 en el receptor...
Bueno espero que soluciones tu problema.
Saludos.
 
Última edición:
...pero no veo ninguna opcion que me permita subir las imagenes....si me dicen como subir imagenes adjunto las foto gracias
saludos

Para subir fotos, debes ir al botón que dice "Ir a avanzado", te abre una nueva página, y allí (mas abajo), hay una opción que dice "Gestionar Archivos Adjuntos", te abre una ventana emergente con opciones...

Saludos
 
saludos reyvilla
estoy utilizando las parejas del 315Mhz, lo que estoy haciendo es enviando una "1" a 4800 bauds, cuando se recibe este uno se enciende un led por 100 ms luego lo apaga y si vuelve a recibirlo otra vez lo enciende, pero no esta pasando eso, si conecto con cables el sistema funciona muy bien. le tome fotos al circuito pero no veo ninguna opcion que me permita subir las imagenes pero si se que todo esta cableado correctamente tal y como dice la pagina de sparkfun, si me dicen como subir imagenes adjunto las foto gracias
saludos

coincido con EB4GBF en cierta forma ya que si hay mucha basura rf en todos lados de echo yo utilice un led para poder verlo, el receptor tiene dos pines de dato normalmente uno de conecta al pic y el otro no se utiliza, yo conecte el que no se utiliza a un led a través de una resistencia de 300ohm para poder ver si recibía y si estaba funcionando de manera correcta el receptor, cuando energice el circuito el led de inmediato empezó a parpadear indicando que si estaba recibiendo las señales eso sin ni siquiera a ver enviado nada claro el led enciende algo tenue, ahora cuando le envié el dato el led encendió con mas potencia por unos instantes y luego quedo igual parpadeando. Yo por mi parte me quite el problema de interferencias y otras cosas, identificando la información enviada con un inicio y de esta manera recibí el dato sin ningún problema en el receptor incluso sin antena a 3 metros.

Yo te recomendaría primero hacer la prueba del led yo le llamo led testigo ya que es indicador de las señales que recibe el receptor RF.
Luego de eso autentificar las señales con un comando ASCCII o valor único para que al recibir las señales el pic receptor sepa que están hablando con el.

En mi caso que utilice PBP mi programa enviaba la señal asi:

Emisor:
SEROUT Pin,T2400,["A","b",10] 'señalizo con A y envio B.

Receptor:
SERIN Pin,T2400,["A"],VAR 'espero la señalizacion con A y guardo el siguiente carácter en VAR osea A.

Y de esta manera mantengo una comunicación bien aislada y segura ya que el receptor solo va a recibir cuando detecte esa señalizacion.
 
Saludos a todos y les estoy muy agradecido por la colaboracion.
estoy subiendo las fotos del circuito.
reyvilla lo que me siguieres ya lo he hecho y asi como lo describes me ocurre a mi, cuando envio el dato el led enciendo con mayor potencia.
tambien estoy adjuntanto el codigo de los pics para que puedan ver que es relativamente sencillo lo que trato de hacer y por si acaso hay algun error.
codigo de envio: (CCS)
PHP:
#include <16F882.h>

#device adc=10

#fuses INTRC,NOWDT,NOPROTECT,PUT,NOMCLR

#use delay(clock=8000000)
#use rs232(baud=4800, xmit=PIN_C6, rcv=PIN_C7)

#include <string.h>

#define led pin_A0
#define envio pin_A1
#define on output_high
#define off output_low

void main (){
   on(led);
   delay_ms(500);
   off(led);
   delay_ms(1000);
programa:
   while(input(envio) == 0){
      on(led);
      printf("1");
      delay_ms(100);
      off(led);
      delay_ms(100);
   }
   while(input(envio) == 1){}
   goto programa;
}

codigo de recepcion:
PHP:
#include <16F882.h>

#device adc=10

#fuses INTRC,NOWDT,NOPROTECT,PUT,NOMCLR

#use delay(clock=8000000)
#use rs232(baud=4800, xmit=PIN_C6, rcv=PIN_C7)

#include <string.h>

#define led pin_A0
#define envio pin_A1
#define on output_high
#define off output_low

void main (){
   char dato;
   on(led);
   delay_ms(500);
   off(led);
   delay_ms(500);
   while(true){
      dato = getc();
      if(dato == '1'){
         on(led);
         delay_ms(100);
         off(led);
      }else{
         off(led);
      }
   }
}
 

Adjuntos

  • imagenes circuito.rar
    502.5 KB · Visitas: 431
saludos
no he recibido respuesta por parte de alguien despues de ultimo post, alguien tiene alguna idea? se me acaba el tiempo y no logro hacer que funcione como se supone....
auxilio please!!!1
 
hola disculpa la demora la verdad que con lo del código no sabría con certeza, lo que no veo es la configuración de los pines cuales son entradas y cuales son salidas, por otro lado si te funciona en la simulación y recibe el dato y todo funciona bien, debería de funcionar en la practica a menos que tengas algo mal conectado si puedes poner una foto o algo no estaría demás.
 
Al fin como lograron solucionar el problema.Yo también tengo el mismo problema con los módulos RF LINK433, le ubique el led a la salida del receptor el led parpadea por las señales de interferencia y me la muestra en el led parpadeando,pero no sè en la parte de la programación poder corregir este error, si alguien sabe por favor me puede colaborar, dejo el código en el foro para que me puedan ayudar, gracias por la colaboración. :)

Código:
codigo del emisor:
#include <18f4550.h>
#fuses XT,NOWDT,NOPROTECT//,INTRC_IO
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, bits=8) 
#use fast_io(a)



void main()
{    
  // setup_oscillator(OSC_8MHZ);
   
   set_tris_a(0x0f);
  
  
  
   
   while (true)
   {
           
      if(input(pin_a0)==1)//si se oprime pulsador de a0 prende led
      {   
         putc(1); 
      }
      
      else
  
      {   
       putc(0); 
      }
      
      if (input(pin_a1)==1)
      {
      putc(3);
      
      }
      else
      {
      
      putc(2);
      
      }
      
       if (input(pin_a2)==1)
      {
      putc(5);
      
      }
      else
      {
      
      putc(4);
      
      }
      
       if (input(pin_a3)==1)
      {
      putc(6);
      
      }
      else
      {
      
      putc(7);
      
      }
      
      
     }
}

**************************************************************************

codigo del receptor:
#include <18f4550.h>  
#fuses XT,NOWDT,NOPROTECT//,INTRC_IO
#use delay(clock=4000000)
#use rs232(baud=9600, parity=N, xmit=PIN_C6, rcv=PIN_C7, bits=8)
#use fast_io(d)

int secuencia;

#int_rda 
void rda_isr() 
{  
   secuencia=getc();
   
   switch(secuencia)
      {
         case 0:
         {
            output_low(pin_d0);//apaga led
         }
         break;
         
         case 1:
         {             
            output_high(pin_d0);//prende led
         }
         break;
         
         case 2:
         {
            output_low(pin_d1);//apaga led
         }
         break;
         
         case 3:
         {             
            output_high(pin_d1);//prende led
         }
         break;
         
         case 4:
         {
            output_low(pin_d2);//apaga led
         }
         break;
         
         case 5:
         {             
            output_high(pin_d2);//prende led
         }
         break;
         case 7:
         {
            output_low(pin_d3);//apaga led
         }
         break;
         
         case 6:
         {             
            output_high(pin_d3);//prende led
         }
         break;
          
          
         
         

      }
}

void main() 
{  
  // setup_oscillator(OSC_8MHZ);
   
   set_tris_d(0x00);    
   output_d(0x00);
   
   enable_interrupts(int_rda); 
   enable_interrupts(global); 
    
   while(true);
}


Estare esperando alguna respuesta
 
Última edición por un moderador:
Saludos,

Al final opte por comprar los H12E/D con transmision de 4 bits. El problema es que cuando tratas de transmitir los dos modulos aunque son frecuencias diferentes el 315 se ve afectado la transmision del 433 lo que genera un error a la hora de transmitir. Inclusive transmitiendo con los H12 el error no lo logre conseguir por lo que me di povensido jeje.
si no vas a usar los H12 el codigo es sencillo solo envias los datos 8 veces y el receptor los compara 3 si los tres son iguales los muestra en el puerto X. Si no, los descarta y no muestra nada.
 
Hola señores, tengo un problema con el codigo de mis pic y modulos rf de 433mhz, se que hay varios ejemplos pero quisiera hacer funcionar algo tan simple como mi codigo y no puedo hacerlo osea el principal un contador tendria que enviar unos numeros y el receptor recibirlos pero cuando llegue un dato x por ejemplo el numero 1 me encienda un led , solo con ese numero los demas apagados. pero no funciona mi codigo :(

Utilizo CCS, y el receptor tendria que funcionar mediante una interrupcion

Gracias, ah adjunto el archivo fuente pero lo habia subido aqui Tengo problemas con el codigo de mi pic y modulo 433MHZ pero nose como agregarlo aqui ese archivo es complicado pero esta en ese lugar
 
Los módulos de RF están preparados para funcionar con una " repetición" de código, ya que tienen un sistema de AGC que ajusta el nivel de decision entre un 1 y uno DESPUES de haber recibido una secuencia de bits, lo que fija el nivel de señal. A partir de allí, decodificaran bien toda secuencia de unos y ceros recibidas, siempre que no no pase mucho tiempo, pues se descarga el condensador del AGC y vuelve al estado inicial.
Adicional mente tienen otros problemas pero para solucionar este, se puede transmitir algo inicial que no se reciba o decodifique erróneamente, y que sirva para iniciar la comunicación..Saludos.
 
pero el codigo del receptor y transmisor estan bien? posea hay dos archivos uno Auxiliar(receptor) y otro principal(transmisor), estan bien escritos?
 
El código del RS232 si funciona directo, esta bien. Pero el receptor "pierde " los primeros bits, hasta que se carga el capacitor del AGC. Hay que usar código que "desperdicie" el primer caracter, para poder recibir bien el siguiente. Suerte-
 
Ahi cambie el programa transmisor y receptor, pero tengo un inconveniente enciende cuando quiere el led del receptor!!.
yo coloque un boton pulsador y un led en el transmisor que el led se enciende cuando preciono el boton asi lo tengo de testigo eso, bueno eso lo hace perfecto, pero el led del receptor enciende cuando quiere y si lo hace no se mantiene o se apaga o se queda encendido cuando suelto el boton. Porque sera eso?
Por Favor me Ayudan con el programa, o capaz esta todo bien y es la prueba en el protoboard nose?? yo le puse a transmisor y receptor antena de 16cm y lo estoy alimentando todo a 5V, por si preguntan puse a 12V el transmisor pero hace lo mismo.

TRANSMISOR:::
#include <16F819.h>
#device ADC=10
#use delay(internal=2MHz)
//#use standard_io(B)

#define tx1 PIN_A2
#define rx1 PIN_A3

#use rs232(baud=4800,parity=N,xmit=tx1,rcv=rx1,bits=8,stream=PORT1,FORCE_SW)

#ZERO_RAM
int cont;
void main()
{
port_b_pullups (0xff);
// putc(0x11);
// putc('B');

//Bucle infinito.
while(TRUE)
{
//Se envía cuatro veces la "A" con un intervalo de 100 ms.
// for(cont=0; cont<2; cont++)
// {
// putc(0x11);
// delay_ms(100);
if(!input(PIN_B3))
{
putc('A');
output_high(PIN_A1);
while(!input(PIN_B3)) delay_us(50);
//delay_ms(100);
}
// }

//Se hace una pausa de un segundo.
// delay_ms(1000);

//Se envía cuatro veces la "B".
// for(cont=0; cont<2; cont++)
// {
// putc(0x11);
// delay_ms(100);
if(input(PIN_B3))
{
putc('B');
output_low(PIN_A1);
//delay_ms(100);

}
//}
// delay_ms(1000);
}

}


RECEPTOR::::

#include <16F819.h>
#device ADC=10
#use delay(internal=2MHz)
#use FIXED_IO( B_outputs=PIN_B7,PIN_B6,PIN_B5,PIN_B4,PIN_B3,PIN_B2,PIN_B1,PIN_B0 )
#define IA1 PIN_A1
#define tx1 PIN_A2
#define rx1 PIN_A3
#define OB0 PIN_B0
#define OB1 PIN_B1
#define OB2 PIN_B2
#define OB3 PIN_B3
#define OB4 PIN_B4
#define OB5 PIN_B5
#define OB6 PIN_B6
#define OB7 PIN_B7

#use rs232(baud=4800,parity=N,xmit=tx1,rcv=rx1,bits=8,stream=PORT1,FORCE_SW)

#INT_EXT
#define LED PIN_B0
#define DELAY 1000

//Se define una variable de tipo CHAR. Aquí se almacenará el caracter recibido.
char dataIN;

void main()
{
while(true)
{
if(kbhit(PORT1)) //Aquí se evalúa si se ha recibido un dato en PORT1.
{
//Se lee el PORT1 por medio de la función fgetc y se almacena en dataIN.
// if(getc(PORT1)==0x11)
dataIN = getc(PORT1);
// else
// dataIN=0;

//Si dataIN es igual al caracter A, entonces se enciende (se pone en alto)
//LED, la línea B0 del PORTB del 16F628A (PIN_B0).
if(dataIN=='A')
{ output_high(LED); delay_us(100);}

//Si dataIN es igual al caracter B, entonces se apaga LED.
if(dataIN=='B')
{output_low(LED);delay_us(100);}
}
}
}
 
Estoy realizando un proyecto de comunicación en la empresa donde trabajo, es un proyecto propuesto por mi jefe.
Consta básicamente, que 4 transmisores se puedan comunicar con 1 receptor por medio de radiofrecuencias.
Ya realicé eso, la señal que se manda es un bit para encender un led, y el receptor pueda identificar cual de los 4 transmisores es el que manda la señal.
Tengo 4 pics transmisores con 4 modulos transmisores por rf, todos estos están comunicados a un pic receptor con un modulo receptor.
Adjunto foto

Proyecto1.PNG
Se aprecian 2 transmisores (T1 y T2) con sus respectivos modulos del lado izquierdo, del lado derecho está el receptor (U2) con su respectivo modulo.
Las resistencias con los push buttons son los bits que se mandan al receptor, y este por medio del pic, enciende el led dependiendo de cual transmisor se haya activado.
Mi problema es que solamente puedo transmitir una señal a la vez, cada transmisor está en diferentes canales, por ejemplo, para el T1 está en el canal 1, para el T2 en el canal 2 y así.
Por ejemplo, yo tengo el receptor en el canal 1, y si quiero mandarle alguna señal por el canal 3, no se visualiza, tengo que cambiar el receptor al canal 3 para poder visualizar que me están enviando una señal desde ahí, yo quiero que sea simultaneo, que no importe de donde me manden la señal, pueda ver que transmisor es, sin estar cambiando de canal manualmente.
Tal vez necesite un scaner, que esté escaneando los canales constantemente para que no pierda ninguna señal, pero no sé como realizar eso.
El modulo que estoy usando es un modulo RF de 433 MHz.
 
Atrás
Arriba