Buenas... he visto que en el foro ya se ha hablado de estos módulos, pero son hilos muy viejos y posiblemente tengan mucho polvo encima ya... jejeje...
he creado este tema para ver si me podéis echar una mano con unas placas que estoy montando... se trata de comunicar dos pics mediante estos módulos de RF, TX:
http://www.selectronic.fr/includes_selectronic/pdf/AUREL/TX-SAWSZ_UM.PDF y RX:
http://www.proghard.com/doc/datasheet/aurelBC-NBK.pdf.
Os comento lo que he estado haciendo:
He montado las dos placas y primero las he comunicado entre ellas a través de la UART conectándoles RX-TX TX-RX directamente con cables y funcionan correctamente

Y ahora viene lo malo... al instalar los módulos ya no hace nada

he seguido las especificaciones del fabricante, he variado las velocidades de transmisión, ahora estoy probando con 300bps y no funciona, le he puesto los condensadores de desacople como indica.
aquí está el código del emisor:
Envía los caracteres "H" "O" "L" "A" por el puerto serie al pulsar un pulsador.
//Codigo del TX con módulo AUREL
#include "16F877.h"
//Configuramos el reloj a 4MHz
#use delay(clock=4000000)
#include "lcd.c"
//Configuramos los parámetros del puerto RS-232
#use rs232(baud=300,parity=N,bits=8,stop=1,xmit=PIN_C6,rcv=PIN_C7)
#byte porta=0x05
#byte portb=0x06
#byte portc=0x07
#byte portd=0x08
//Configuramos los fuses adecuados
#fuses NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
void borrar_lcd()
{
lcd_gotoxy(1,1);
printf(lcd_putc," ");
lcd_gotoxy(1,2);
printf(lcd_putc," ");
lcd_gotoxy(1,1);
}
//Programa principal
void main(void)
{
set_tris_b(0b01111111); //Configuramos el puerto B de entrada de B0-B6
set_tris_a(0b11111111);
lcd_init();
printf(lcd_putc," MODULO TX ");
while(TRUE)
{
if(!bit_test(porta,0))
{
borrar_lcd();
while(!bit_test(porta,0)){}
printf("H");
delay_ms(500);
printf("O");
delay_ms(500);
printf("L");
delay_ms(500);
printf("A");
delay_ms(500);
lcd_gotoxy(1,1);
printf(lcd_putc,"H O L A");
delay_ms(1000);
}
}
}
y aquí el código del receptor:
Cuando se activa la interrupción de recepción del puerto serie, mira a ver si corresponde con las letras "H" "O" "L" "A", y las va mostrando por el LCD.
/*
Codigo del RX con módulo AUREL
Enviamos un caracter por el puerto serie y lo muestra por el LCD.
Programa para testear la comunicación entre módulos inalámbricos AUREL
*/
#include "16F877.h"
//Configuramos el reloj a 4MHz
#use delay(clock=4000000)
#include "lcd.c"
//Configuramos los parámetros del puerto RS-232
#use rs232(baud=300,parity=N,bits=8,stop=1,xmit=PIN_C6,rcv=PIN_C7)
#byte porta=0x05
#byte portb=0x06
#byte portc=0x07
#byte portd=0x08
//Configuramos los fuses adecuados
#fuses NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
char dato=32,dato1=32,dato2=32,dato3=32,dato4=32;
#int_RDA
void RDA_isr(void)
{
if(kbhit())
{
dato=getc();
}
}
void borrar_lcd()
{
lcd_gotoxy(1,1);
printf(lcd_putc," ");
lcd_gotoxy(1,2);
printf(lcd_putc," ");
lcd_gotoxy(1,1);
}
void main()
{
lcd_init();
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
printf(lcd_putc," MODULO TX ");
delay_ms(500);
borrar_lcd();
while(TRUE)
{
if(dato=='H')
{
dato1=dato;
}
if(dato=='O')
{
dato2=dato;
}
if(dato=='L')
{
dato3=dato;
}
if(dato=='A')
{
dato4=dato;
}
lcd_gotoxy(1,1);
printf(lcd_putc,"%c %c %c %c", dato1,dato2,dato3,dato4);
}
}
yo supongo que es problema de ruidos, pero en el código ya desecho los datos que no me interesan, y dudo que tooooodos los bytes que me llegan estén mal.
También he estado leyendo que es aconsejable una codificación manchester, pero de todas formas algo tendría que estar recibiendo. aahhh, y he probado con dos módulos distintos y me sucede lo mismo, por lo que descarto que sean los módulos.
Gracias y un saludo...
PD: otra cosa, de vez en cuando van saliendo los caracteres por pantalla en el receptor sin yo haber pulsado el botón de enviar datos, como si por casualidad el ruido que le llega fuese justamente el dato que espera...
