Buenas estimados.
No estoy seguro que pensar, estoy creando un sistema con 3 antenas, una emisora, la otra repetidora, y finalmente la receptora.
Las 3 antenas están creadas con el siguiente hardware:
pic16f628A
PIC-IO Tarjeta de desarrollo para Microcontroladores PIC de 18 P (de olimex)
y la antena: Módulo Transmisor/Receptor RF 433Mhz (500Mts) HAC-UM96
La primera, al hacerle un contacto seco envía un string, y al parecer funciona sin problemas.
La segunda y tercera antena son las que me dan dolor de cabeza.
Estas dos antenas al conectarle energía, hay veces que funcionan bien, y otras que no funcionan, hasta desconectarles la fuente de poder un par de veces.
Y también muchas veces luego de un par de horas funcionando bien, o aveces minutos en el caso de la receptora, deja de funcionar.
Ideas de lo que puede estar pasando por-favor ?. Es un tema de hardware, de código o que ?
Adjuntare el código de la receptora, los otros dos códigos son bastante parecidos.
Saludos.
No estoy seguro que pensar, estoy creando un sistema con 3 antenas, una emisora, la otra repetidora, y finalmente la receptora.
Las 3 antenas están creadas con el siguiente hardware:
pic16f628A
PIC-IO Tarjeta de desarrollo para Microcontroladores PIC de 18 P (de olimex)
y la antena: Módulo Transmisor/Receptor RF 433Mhz (500Mts) HAC-UM96
La primera, al hacerle un contacto seco envía un string, y al parecer funciona sin problemas.
La segunda y tercera antena son las que me dan dolor de cabeza.
Estas dos antenas al conectarle energía, hay veces que funcionan bien, y otras que no funcionan, hasta desconectarles la fuente de poder un par de veces.
Y también muchas veces luego de un par de horas funcionando bien, o aveces minutos en el caso de la receptora, deja de funcionar.
Ideas de lo que puede estar pasando por-favor ?. Es un tema de hardware, de código o que ?
Adjuntare el código de la receptora, los otros dos códigos son bastante parecidos.
Saludos.
Código:
#include<16f628a.h>
#include<string.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES PUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //No brownout reset
#FUSES NOCPD //No EE protection
#FUSES HS
#use standard_io(A)
#use standard_io(B)
#use delay(clock=20000000)
#use rs232(baud=9600, parity=N, xmit=PIN_B2, rcv=PIN_B1, stream=a)
#byte portb=0x06
#byte rcsta=0x18
#byte rcreg=0x1A
#bit RCSTA_OERR=rcsta.1
#bit RCSTA_CREN=rcsta.4
#bit RCSTA_FERR=rcsta.2
#byte TRISA=0x85
#byte TRISB=0x86
#byte RCSTA=0X1A
//Funciones-------
void datos(void);
void clear_rda(void);
//----------------
#define bot_f4 pin_a4 //reles y contactos de la placa PIC-IO Tarjeta de desarrollo para Microcontroladores PIC de 18 P
#define bot_f2 pin_b0
#define rele_1 pin_a0
#define rele_2 pin_a1
#define rele_3 pin_a2
#define rele_4 pin_a3
char received=0;
char dato[15];
int cta_recibido;
int i=0;
unsigned int16 seconds = 0;
#INT_RTCC
clock_isr() //Interrupcion del timer0 pensando en enviar un mensaje constante de buen funcionamiento de la placa
{
set_timer0(19531);
++seconds;
if(seconds==700)
{
//printf("RCV-RKG\r"); //Al ver lo facil que se montan las señales, se decide dejar esta instruccion en silencio
seconds=0;
}
}
#int_rda
void rda(void) //Interrupcion para captar y almacenar los caracteres recibidos por puerto serial
{
received=fgetc();
dato[cta_recibido]=received;
cta_recibido++;
if(received==0xD)
{
cta_recibido=0;
}
}
void main(void)
{
delay_ms(1000);
printf("RCV-RKG\r");
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256 );
set_timer0(19531);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
TRISA=0b11110000;
TRISB=0b11010011;
enable_interrupts(GLOBAL);
enable_interrupts(int_rda);
enable_interrupts(int_rda);
delay_ms(500);
//enable_interrupts(int_rda);
output_bit(rele_1,0);
output_bit(rele_2,0);
output_bit(rele_3,0);
output_bit(rele_4,0);
clear_rda();
//while(received=!0x00)
while(1) //Al recibir datos por el puerto serial
{
if(dato[0]=='S'&&dato[1]=='U'&&dato[2]=='M'&&dato[3]=='A'&&dato[4]=='R'&&dato[5]=='_'&&dato[6]=='R'&&dato[7]=='P'&&dato[8]=='T')
{
//printf("SUMAR_RPT_OK\r");
output_bit(rele_1,1); //Se activa el rele
delay_MS (1000);
output_bit(rele_1,0);
for(i=0; i<9; i++) //Se limpia string
dato[i]=0x00;
cta_recibido=0;
clear_rda();
}
if(dato[0]=='R'&&dato[1]=='E'&&dato[2]=='S'&&dato[3]=='T'&&dato[4]=='A'&&dato[5]=='R'&&dato[6]=='_'&&dato[7]=='R'&&dato[8]=='P'&&dato[9]=='T')
{
//printf("RESTAR_RPT_OK\r");
output_bit(rele_4,1); //Se activa rele
delay_MS (1000);
output_bit(rele_4,0);
for(i=0; i<9; i++) //Se limpia string
dato[i]=0x00;
cta_recibido=0;
clear_rda();
}
enable_interrupts(int_rda);
delay_ms(500);
RCSTA=0b10010000;
//reset_cpu();
}
}
void clear_rda(void)
{
int dummy;
if(RCSTA_OERR==1)
{
RCSTA_CREN = 0;
RCSTA_CREN = 1;
}
if(RCSTA_FERR==1)
{
dummy = RCREG;
dummy = RCREG;
}
}
Última edición: