Autor Tema: leer control remoto infrarrojo  (Leído 2862 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado martin12as

  • PIC10
  • *
  • Mensajes: 36
leer control remoto infrarrojo
« en: 27 de Agosto de 2014, 08:54:01 »
bueno, les cuento lo que estoy haciendo. tengo un control de esos para manejar luces rgb que se ven en todos lados, como el de la imagen.



el protocolo que utiliza el control remoto es uno de panasonic como el de la imagen




compre un receptor infrarrojo para conectar al pic que era el único que pude conseguir pero no me supieron decir el modelo. por lo tanto no se cual es la frecuencia exacta que trabaja



por otro lado también me compre un foto transistor que tiene la forma de un diodo led común y lo soldé a un cable de micrófono para conectar a la placa de sonido de la pc y ver los comandos del control remoto

y por ultimo después de probar varios códigos diferentes este es el que mejores resultados me da, pero aun asi me parece que algo esta funcionando mal, como que faltaran datos

Código: [Seleccionar]
#int_ext
void ext_isr() {

   if(bandera)
   {
      set_timer0(0);
      bandera=0;
   }
   else
   {
      t=get_timer0();
      bandera=1;
      printf("\r\n%d",t);
   }

}

los resultados cuando oprimo el primer boton son estos

106
8
8
17
17
17
17
8
8
8
17
8
17
17

el 106 seria el bit de start, los 8 serian ceros y los 17 unos. Pero son solo 13 bit, cuando supuesta mente tendría que recibir 32.

y esta es una imagen de lo que veo en la pc cuando aprieto ese botón, incluso hice un programa que detecte todos los francos y mida todos los tiempos pero siempre recibo la misma cantidad de bits



alguien me puede ayudar a entender que esta pasando? puede ser que el receptor no sea el correcto? o tengo algo mal en el programa?

 otro problema que tengo, pero sospecho que es algo del control remoto, es que varia el start bit dependiendo de varias cosas, lo normal es 106, pero a veces manda números aleatorios, en algunos botones la primer vez lo manda bien y después lo manda mal, en otros botones manda intercalados uno bien y uno mal, en otros botones lo manda bien solo si se presiono antes algún otro botón especifico

muchas gracias desde ya.


acá dejo también el programa completo

Código: [Seleccionar]
#include <16f886.h>
#fuses INTRC_IO,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NODEBUG,NOWRT
#use delay(clock=8000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)


int1 bandera;
int8 t;


#int_ext
void ext_isr() {

   if(bandera)
   {
      set_timer0(0);
      bandera=0;
   }
   else
   {
      t=get_timer0();
      bandera=1;
      printf("\r\n%d",t);
   }

}

void main() {

   disable_interrupts(global);
   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256);

   set_tris_b(0b00000001);
   set_tris_c(0b10000000);
   
   printf("\f\r\n");
   
   ext_int_edge(H_TO_L);
   bandera=1;
   t=0;
   
   enable_interrupts(int_ext);
   enable_interrupts(global);

   for(;;);
}





 
« Última modificación: 27 de Agosto de 2014, 08:56:55 por martin12as »

Desconectado martin12as

  • PIC10
  • *
  • Mensajes: 36
Re: leer control remoto infrarrojo
« Respuesta #1 en: 28 de Agosto de 2014, 01:12:34 »
otra duda que tengo es sobre este codigo

Citar
#int_ext
void ext_isr() {

   // Obtengo datos de Timer0
   tt = get_timer0();
   t = tt-tti;
   tti= tt;

   // Si he recibido el Start Bit puedo guardar
   if(start_recived==1){
      // Bit "0"
      if(t>40 && t<50){ sbits[ntbits]='0'; }
      // Bit "1"
      if(t>85 && t<90){ sbits[ntbits]='1'; }
      // Si he recibido 32 bits entonces hay dato
      if(++ntbits==total_bits){
         hay_dato=1;
      }
   }

   // Detecto Start Bit
   if(t>525 && t<530){
      start_recived=1;
      limpia_bits();
   }
}

que esta en esta pagina: EXPERIMENTOS : INFRARROJOS

el tema con ese código es que no reinicia nunca el timer, y no se como hace para que no desborde, o que accion realiza cuando desborda..

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: leer control remoto infrarrojo
« Respuesta #2 en: 28 de Agosto de 2014, 04:56:24 »
Ahora estoy fuera y no puedo darte una respuesta adecuada, a ver si después en casa me dejan leer tu post con tranquilidad y vemos qué se puede hacer  :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado martin12as

  • PIC10
  • *
  • Mensajes: 36
Re: leer control remoto infrarrojo
« Respuesta #3 en: 29 de Agosto de 2014, 11:48:48 »
al final creo que era por el printf dentro de la interrupción ext, seguro no daba el tiempo para hacer eso, ahora hice un buffer y después lo muestro y logro capturar los 32 bits, sin embargo me vendría bien si pudieras explicar como funciona tu programa sin reiniciar el timer.

yo hago esto:
Código: [Seleccionar]
#int_ext
void ext_isr()
{
   t=get_timer0();
   set_timer0(0);
   ...
   ...
   ...
}

y tu haces esto:
Código: [Seleccionar]
#int_ext
void ext_isr() {

   // Obtengo datos de Timer0
   tt = get_timer0();
   t = tt-tti;
   tti= tt;
   ...
   ...
   ...
}