[Aporte] - Librería para leer códigos de controles RF (PICs)

En otras oportunidades, hice el aporte de programas que permitían guardar códigos en un receptor de RF, pero modificarlos para quien no lo había hecho era un poco complicado y confuso LINK. Por lo que decidí realizar una librería que permita ser incluida de forma sencilla en los micros para que de esa forma el código para el usuario que la use sea los más sencillo posible. Adjunto la librería, un ejemplo de como usarla (solo detecta un código válido, no evalúa el código que lee) y un video donde se ve su funcionamiento.

C:
#include <12F683.h>

#fuses INTRC_IO,NoWdt,NoBrownout,Protect
#fuses NoMclr,noCpd,Put,NoIeso,NoFcmen

#use delay(clock=4000000)

#define datos PIN_A2       // Defino el pin donde ingresan los datos
#define led PIN_A1         // Defino el pin donde conecto el led

#include <receptor.c>      // Llamo a la librería

#use fast_io(A)         

unsigned int codigo[3];    // Vector donde se van a guardar el código del control

void main()
{
   set_tris_a (0b00000100);                               // Configuro el pin de datos como entrada
   configurarRx();                                        // Configura el timer1 a 1useg dependiendo de si trabaja con 4 u 8 MHz de oscilador interno
   while(TRUE)
   {
      if(obtenerCodigo(&codigo[0],&codigo[1],&codigo[2])){// Si hay un código válido en el receptor prendo el led
         output_high (led);                               // Código válido
      }
      else{
         output_low (led);                                // Código inválido
      }
   }
}

 

Adjuntos

  • Libreria - receptor.rar
    1.6 KB · Visitas: 74
Última edición:
En otras oportunidades, hice el aporte de programas que permitían guardar códigos en un receptor de RF, pero modificarlos para quien no lo había hecho era un poco complicado y confuso LINK. Por lo que decidí realizar una librería que permita ser incluida de forma sencilla en los micros para que de esa forma el código para el usuario que la use sea los más sencillo posible. Adjunto la librería, un ejemplo de como usarla (solo detecta un código válido, no evalúa el código que lee) y un video donde se ve su funcionamiento.

C:
#include <12F683.h>

#fuses INTRC_IO,NoWdt,NoBrownout,Protect
#fuses NoMclr,noCpd,Put,NoIeso,NoFcmen

#use delay(clock=4000000)

#define datos PIN_A2       // Defino el pin donde ingresan los datos
#define led PIN_A1         // Defino el pin donde conecto el led

#include <receptor.c>      // Llamo a la librería

#use fast_io(A)        

unsigned int codigo[3];    // Vector donde se van a guardar el código del control

void main()
{
   set_tris_a (0b00000100);                               // Configuro el pin de datos como entrada
   configurarRx();                                        // Configura el timer1 a 1useg dependiendo de si trabaja con 4 u 8 MHz de oscilador interno
   while(TRUE)
   {
      if(obtenerCodigo(&codigo[0],&codigo[1],&codigo[2])){// Si hay un código válido en el receptor prendo el led
         output_high (led);                               // Código válido
      }
      else{
         output_low (led);                                // Código inválido
      }
   }
}


Hola Juan Manuel, tengo una central de alarma, que funciona bien desde el teclado, pero no funciona desde el control remoto...el módulo de RF anda bien, al menos se ve que llega una trama, que va directo a un MCU ATMEL AT89S52, esto me hace suponer, que decodifican directamente con el MCU, porque no veo ningún decoder por ningún lado y porque la trama entra derecho al MCU (transistor de por medio)...Mi idea es poder recibir el código de los remotos y recuperar las funciones de "armado" y "desarme" de la central...La pregunta es si este código me puede servir para obtener el código de los controles y poder validarlos con otro micro...??? Te mando saludos y gracias por el aporte.
 
Última edición por un moderador:
La pregunta es si este código me puede servir para obtener el código de los controles y poder validarlos con otro micro...???

Si tu alarma usa "rolling code" no podrás hacer nada ya que el código cambia cada vez que se presiona una tecla -se destruye una vez enviado si se quiere ver así y no se vuelve a enviar-.

Compara varias tramas, presionando varias veces un botón y si cambia cada vez pues mala suerte sino puede que tengas posibilidades.
 
Gracias SWITCH...no cambia...tiene más de 20 años, creo que ni existia el "rolling code" en esos tiempos, jaja...no estoy seguro de eso...Lo que estoy haciendo ahora mismo, es cargar este código y efectivamente se enciende el LED testigo, cuando aprieto cualquier tecla de cualquier remoto...Lo curioso (o no) es que el led parpadea solo cuando no aprieto ninguna tecla (cuando aprieto prende de manera franca, continua) y en algunos casos queda latcheado ON...Basta con apretar nuevamente para sacarlo del LATCH y de nuevo empieza a parpadear solito...Con esto lo único que tengo confirmado es que sirve mi receptor (por lo menos esta sintonizado con el remoto) y que entran códigos válidos...JUAN MANUEL, publicó otro programa que graba el código recibido, quizás con ese puede leer la trama y después discriminarla, todavía no se me ocurre como...En fin, esperemos a ver que dice JM...Saludos.
 
Si el control tiene mas de 20 años entonces desarma uno y revisa que chip usa. Lo mas probable es que sea uno comercial de los conocidos e incluso posea los dipswitch o las pistas (medias lunas para soldar o no) para configurar el código.

Si lo anterior es cierto ya tienes el 80% del trabajo echo y hasta quizás no necesites un microcontrolador dependiendo que quieras hacer.
 
Efectivamente SWITCH, estos tienen los dipswitch para codificar, pero todo eso lo "bypasié" del lado del receptor que ahora es directamente un MCU...Usando el código de JUAN MANUEL, saque los códigos de varios controles, y después conociendo ya este dato, los cargué en un array[3] y listo...Anda super bien, sin fallas o falsos disparos, probé incluso con remotos de timbres inalambricos que tenía en desuso y andan bien, además que tienen más alcance que esos remotos de color "marrón" que venden ahora !!! Un GENIO JM...Anda de maravilla, como bien el mismo anticipa...Si alguna vez lee esto, le quiero dar las gracias porque me dejó patear el penal y sin arquero...Como El dice, se puede retocar la librería de su versión más reciente, armar configuraciones propias y no hay ningún problema con ello...GRACIAS JUANMA2468...!!!
 
Si tu alarma usa "rolling code" no podrás hacer nada ya que el código cambia cada vez que se presiona una tecla -se destruye una vez enviado si se quiere ver así y no se vuelve a enviar-.

Compara varias tramas, presionando varias veces un botón y si cambia cada vez pues mala suerte sino puede que tengas posibilidades.
Muchos mandos que veo yo por ahí de alarmas usan código fijo en cambio los mandos de puertas de garaje la mayoría usan Rolling-Code (HCS301), aunque los Rolling-Code la mitad de la trama es fija y la otra es "cambiante"
Si el control tiene mas de 20 años entonces desarma uno y revisa que chip usa. Lo mas probable es que sea uno comercial de los conocidos e incluso posea los dipswitch o las pistas (medias lunas para soldar o no) para configurar el código.

Si lo anterior es cierto ya tienes el 80% del trabajo echo y hasta quizás no necesites un microcontrolador dependiendo que quieras hacer.
Los mandos de alarma que me tienen coincidido son de código fijo puenteando las pistas para configurar el código.

Mi primer mando Rolling-Code que vi fue hace casi 30 años y llevaba un HCS301 a 433,92MHz.
Efectivamente SWITCH, estos tienen los dipswitch para codificar, pero todo eso lo "bypasié" del lado del receptor que ahora es directamente un MCU...Usando el código de JUAN MANUEL, saque los códigos de varios controles, y después conociendo ya este dato, los cargué en un array[3] y listo...Anda super bien, sin fallas o falsos disparos, probé incluso con remotos de timbres inalambricos que tenía en desuso y andan bien, además que tienen más alcance que esos remotos de color "marrón" que venden ahora !!! Un GENIO JM...Anda de maravilla, como bien el mismo anticipa...Si alguna vez lee esto, le quiero dar las gracias porque me dejó patear el penal y sin arquero...Como El dice, se puede retocar la librería de su versión más reciente, armar configuraciones propias y no hay ningún problema con ello...GRACIAS JUANMA2468...!!!
Es de bien nacido ser agradecido
 
Genio JUANMA...yo me armé un sistema para vagos con el código anterior, y ahora ya no me levanto del sillón ni a prender ni a apagar las luces de la terraza o de la calle, ni las del arbolito de navidad, que armé recientemente...le agregué un buffer a la entrada del decodificador y anda bárbaro...si en los próximos meses subo de peso más de 10 kilos, voy a tener que seguir como antes, mientras sillón y control remoto...mejor aporte 2022 del foro...gracias...!!!
 
@juanma2468, ¿y cómo habilito o deshabilito el receptor...???
¿Con alguna llave...???
No, no tiene sentido, llave no, pero si llamo a las funciones con el remoto, solo puedo deshabilitar, y el próximo llamado no me daría mi la hora...
¿O
se puede hacer de algún modo...???
 
Última edición por un moderador:
A que te refieres?
Genio JUANMA...yo me armé un sistema para vagos con el código anterior, y ahora ya no me levanto del sillón ni a prender ni a apagar las luces de la terraza o de la calle, ni las del arbolito de navidad, que armé recientemente...le agregué un buffer a la entrada del decodificador y anda bárbaro...si en los próximos meses subo de peso más de 10 kilos, voy a tener que seguir como antes, mientras sillón y control remoto...mejor aporte 2022 del foro...gracias...!!!
¿Qué chip tiene tu mando?
 
Última edición por un moderador:
Hola VICTOROU...me puse a leer la nueva librería de JUANMA, y hay 2 funciones nuevas que ponen el estado de RX en ocupado o libre...no se me ocurre como implementar el llamado a esas funciones desde el control remoto...no lo probé todavía, quizás estoy entendiendo mal el concepto, pero se me ocurre pensar que si uso una trama para ponerlo en OCUPADO, ya no será capaz de leer otra trama para dejarlo LIBRE, porque el receptor estará deshabilitado, por su condición de OCUPADO...hasta que no me ponga a toquetear y ver que hace, estoy suponiendo que anda así...descartaba una llave del lado del receptor, porque para eso no hace falta ninguna función, le corto la alimentación y listo...a ver que dice JUANMA.
 
Hola VICTOROU...me puse a leer la nueva librería de JUANMA, y hay 2 funciones nuevas que ponen el estado de RX en ocupado o libre...no se me ocurre como implementar el llamado a esas funciones desde el control remoto...no lo probé todavía, quizás estoy entendiendo mal el concepto, pero se me ocurre pensar que si uso una trama para ponerlo en OCUPADO, ya no será capaz de leer otra trama para dejarlo LIBRE, porque el receptor estará deshabilitado, por su condición de OCUPADO...hasta que no me ponga a toquetear y ver que hace, estoy suponiendo que anda así...descartaba una llave del lado del receptor, porque para eso no hace falta ninguna función, le corto la alimentación y listo...a ver que dice JUANMA.
Tienes razón, podría ser éso.
Voy probar a ver si se me ocurre algo.
Que chip usas en tu control remoto?
Que chip usas en tu receptor?
 
Quizás mandar trama válida y habilitar y con otra trama válida deshabilitar...ya que siempre interpreta tramas válidas...quien no use el código correcto no podría hacerlo recepcionar sino usa esta librería...hay que ensayar...yo use cuanto control remoto encontré en el cajón, los encoders SC2260, SC2262, PT2262, EV1527...lo único que recuerdo es que tuve que invertir la trama, porque yo envió desde LSB a MSB o al revés (no me acuerdo ahora, pero era al revés seguro) y son Fixed Code...no probé con Learning Code...!!!
 
Quizás mandar trama válida y habilitar y con otra trama válida deshabilitar...ya que siempre interpreta tramas válidas...quien no use el código correcto no podría hacerlo recepcionar sino usa esta librería...hay que ensayar...yo use cuanto control remoto encontré en el cajón, los encoders SC2260, SC2262, PT2262, EV1527...lo único que recuerdo es que tuve que invertir la trama, porque yo envió desde LSB a MSB o al revés (no me acuerdo ahora, pero era al revés seguro) y son Fixed Code...no probé con Learning Code...!!!
EV1527 es Learning Code y es Fixed Code
También se podría tocar el código para la parte fija de la trama de un Rolling-Code (HCS300).
Voy probar con unos receptores que tengo (PIC12F683 y PIC16F630)
 
Si, si podés leer la parte fija de la trama tiene que funcionar...no sabía que tenían una parte fija, jaja, por eso ni los probé, pero siendo así, podría intentar con los controles de los autos.
 
JUANMA, y como habilito o deshabilito el receptor...???
Las funciones de habilitar y deshabilitar, tiene sentido segun la aplicacion.
A veces es necesario dejar de recibir datos, ya sea por un tiempoo por definicion de las funciones.
Es allí donde entra en juego esas funciones.

no se me ocurre como implementar
Te doy un ejemplo simple;
En una alarma, al ingresar el codigo erroneamente, comienza a sonar la sirena, allí deshabilita el receptor, lo mantienes así por...unos segundos, y luego lo habilitas.

Otras formas ya estará en tu imaginacion.
 
No entiendo cuales son los problemas. El hardware del receptor siempre está activo y el proceso de la trama es por software. No hay bloqueo ni nada similar a menos que el software lo decida...
 
Atrás
Arriba