Hola, yo estoy usando esos modulos de 433mhz para conectar entre si pequeños modulos con pic16f823 y el pic16f884. con el compilador CCS.
Hay que considerar varias cosas. si todo esta bien les pude sacar mas de 50 metros de distancia.
Primero que si usas el puerto serie UART, la linea TX mientras no se usa, que no transmitis, flota a 1. y eso hace que el modulo que
trasmite esta todo el tiempo emitiendo RF. (portadora) eso no es bueno, y si usas mas de un modulo no podes por que se va a pisar entre si.
Eso lo resolví agregando un cable a un pin del pic que apaga el transmisor mientras no se usa. Pero si estas experimentando y solo usas dos modulos no importa.
Segundo usa 1200 baudios ideal, a 2400 todavia funciona, pero idealmente mejor a 1200b. otras velocidades no me dieron buen resultado.
Tercero, el modulo del receptor, al ser receptor regenerativo, mientras no hay uso esta todo el tiempo tirando ruido blanco. o sea vas a recibir basura todo el tiempo.
Lo que fuera que vas a emitir tiene que tener un encabezado, para que el receptor sepa que le esta llegando el dato y pueda discriminarlo de la basura al azar que llega todo el tiempo.
Cuarto, al momento de emitir hay que preparar lo que se llama un preambulo, es para acomodoar el receptor, si no siempre vas a perder los primeros caracteres que recibis.
Lo que yo hago es lo siguiente.
Envio muchos numeros unos y ceros, 10101010 asi para preparar el receptor.
luego hay que hacer una pequeña pausa, ensaye que esa pausa conviene que fuera de 20 milisegundos. ni mas ni menos. y es importantisimo.
poner la pausa o no me cambio de recibir como máximo 5 o 7 metros a funcionar mas de 50 metros de distancia.
la pausa hace que el UART se enganche perfectamente al próximo caracter.
luego de eso mandas un numero que identifica tu paquete, y despues los datos que quieras enviar.
en la rutina del receptor tenes que estar verificando ese numero, y cuando llega empieza a tomar lo que viene a continuacion, que son los dátos útiles.
Te paso la rutina que estoy usando como ejemplo para que saques las primeras lineas en donde manda el preambulo. (hasta el put(0x58) ; )
que es la parte importante para que ande bien.
y luego bueno, segun lo que quieras hacer. cualquier duda avisa.
void emite_paquete (void) {
output_high (portadora); // enciende el transmisor.
output_high(led_azul);
putc(0x55); // preambulo
putc(0x55); // preambulo
putc(0x55); // sincronismo
delay_ms(20); // en la practica 18ms tomando lo que come el buffer de hardware
putc(0x58); // 01011000 palabra clave (esto es lo que va a esperar el receptor para empezar a decodificar)
putc(version_protocolo); // 0x30 versión del protocolo (usar los 4 bits bajos)
putc(largo_TX); // cantidad de bytes enviados
putc(largo_TX ^255); // cantidad de bytes enviados
for (int i=0;i<largo_TX;i++) putc(cu);
putc(0xff);
putc(crc_TX);
delay_ms(40); // tiempo para que se vacíe el buffer UART por hardware.
output_low (portadora); // apaga el transmisor.
output_low(led_azul);
recepcion_enable = true; // enciende el receptor
contador_paquetes_enviados++;
}