Hola elreypic2, muchas gracias por la cooperación, aclaraciones, recuerda, que soy novato en todo esto (estoy aprendiendo) discúlpame si me equivoco.
1º) leí (Utilizando módulos RF de bajo costo) que me adjuntaste (es una exposición de un técnico nivel alto la tuya) entiendo que para entenderla y razonarla totalmente mi nivel es muy bajo. 2º) Copie los códigos finales, para el transmisor (código C) en un sketch de arduino, y el código final, parte del receptor (código C) en otro sketch. 3º) La libreria que tengo que usar con RF433MHz es la que aparece en los código C, ??? si fuera así donde la descargo !!.
4º) No se como incluir en los sketch tanto la entrada, digital y analógica en el trasmisor (que ira con el Mega 2560) y las correspondiente en el receptor (que ira con el Pro micro).
Adjunto los archivos ino
Gracias.
Un Saludo.
TRANSMISOR.
#include <12F629.h>
#FUSES NOWDT //No Watch Dog Timer Sin temporizador de vigilancia
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT Oscilador RC interno, sin CLKOUT
#FUSES NOCPD //No EE protection
#FUSES NOPROTECT //Code not protected from reading Código no protegido contra lectura
#FUSES NOMCLR //Master Clear pin used for I/O Clavija maestra utilizada para E/S
#FUSES PUT //Power Up Timer Temporizador de encendido
#FUSES BROWNOUT //Reset when brownout detected Reiniciar cuando se detecta una caída de tensión
#FUSES RESERVED //Used to set the reserved FUSE bits Se utiliza para configurar los bits FUSIBLES reservados
#use delay(clock=4000000)
#use rs232(baud=2400,parity=N,xmit=PIN_A1,bits=8,invert,STREAM=RFPORT)
#use rs232(baud=9600,parity=N,xmit=PIN_A4,rcv=PIN_A2,bits=8,invert,STREAM=RS232)
#byte TMR0=0X01
#byte INTCON=0X0B
#bit T0IF=INTCON.2
void SEND_DATA(BYTE txbyte)
{
int i,j,b,me;
b = txbyte;
for (i=0; i<2; i++)
{
me = 0; // manchester encoded txbyte
for (j=0 ; j<4; j++)
{
me >>=2;
if (bit_test(b,0))
me |= 0b01000000; // 1->0
else
me |= 0b10000000; // 0->1
b >>=1;
}
fputc(me,RFPORT);
}
}
void main()
{
int8 i, data_tx[32], lenght;
setup_comparator(NC_NC);
setup_vref(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_bit);
while (1)
{
lenght = 0; //Inicializa la longitud del frame
data_tx[lenght] = fgetc(RS232); //Recibe el primer dato
lenght++; //Incrementa el valor de la longitud del frame
T0IF = 0;
TMR0 = 0;
while (lenght<32 && !T0IF)
{
if (kbhit(RS232))
{
data_tx[lenght] = fgetc(RS232);
lenght++;
T0IF=0;
TMR0=0;
}
}
for (i=0; i<16; i++)
{
fputc(0xF0,RFPORT); //Envia 16 bytes de inicio
}
fputc(0xF8,RFPORT); //Envia bytes de reconocimiento
fputc(0xF8,RFPORT);
fputc(0xFA,RFPORT);
SEND_DATA(lenght); //Envia la longitud de frame
for (i=0; i<lenght; i++)
{
SEND_DATA(data_tx); //Envia los datos
}
}
}
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
RESEPTOR.
#include <12F629.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOCPD //No EE protection
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES PUT //Power Up Timer
#FUSES BROWNOUT //Reset when brownout detected
#FUSES RESERVED //Used to set the reserved FUSE bits
#use delay(clock=4000000)
#use rs232(baud=2400,parity=N,rcv=PIN_A1,bits=8,STREAM=RFPORT,invert)
#use rs232(baud=9600,parity=N,xmit=PIN_A0,bits=8,STREAM=RS232,invert)
int8 nib[2], i, dec1, rx_data, lenght, data_rx[32];
BYTE DECODE_DATA(int8 encoded) //decode function for manchester encoded data. This code is working fine. I checked it.
{
int8 enc, dec, pattern, i;
enc = encoded;
dec = 0;
for (i=0; i<4; i++) {
dec >>=1;
pattern = enc & 0b11;
if (pattern == 0b01) // 1
bit_set(dec,3);
else if (pattern == 0b10)
bit_clear(dec,3); // 0
else
return 0xff; // illegal code
enc >>=2;
}
return (dec);
}
void main()
{
setup_comparator(NC_NC);
setup_vref(FALSE);
fprintf(RS232,"RF Link\n\r"); //Envia el mensaje "RF Link"
while (1)
{
do
{
do
{
do
{
rx_data = fgetc(RFPORT); //Recibe el primer dato via RF
} while (rx_data!=0xF8); //Si el dato recibido no es 0XF8, continua recibiendo datos
rx_data = fgetc(RFPORT); //Recibe el segundo dato
} while (rx_data!=0xF8); //Si el dato recibido no es 0XF8, regresa al inicio y espera nuevo dato
rx_data = fgetc(RFPORT); //Recibe el tercer dato
} while (rx_data!= 0xFA); //Si el dato recibido no es 0XFA, regresa al inicio y espera nuevo dato
nib[0] = fgetc(RFPORT); //Recibe la primera parte baja de la longitud del frame a recibir
dec1 = DECODE_DATA(nib[0]); //Decodifica la parte baja de la longitud
nib[1] = fgetc(RFPORT); //Recibe la parte alta de la longitud
lenght = DECODE_DATA(nib[1]); //Decodifica la parte alta de la longitud del frame
lenght<<=4; //Posiciona la parte alta de la longitud
lenght |= dec1; //Ensambla la longitud del frame
for (i=0; i<lenght; i++) //Prepara para recibir los datos via RF
{
nib[0]=fgetc(RFPORT); //Recibe la parte baja del dato
dec1=DECODE_DATA(nib[0]); //Decodifica la parte baja del dato
nib[1]=fgetc(RFPORT); //Recibe la parte alta del dato
data_rx=DECODE_DATA(nib[1]); //Decodifica la parte alta del dato
data_rx<<=4; //Coloca el nible alto en su posicion correcta
data_rx|=dec1; //Ensambla el dato recibido
}
for (i=0;i<lenght;i++) //Prepara para enviar los datos recibidos
{
fputc(data_rx,RS232); //Envia el dato via RS232
}
}
}
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}