Autor Tema: Decodificando un protocolo IR y obteniendo direcciones y comandos.  (Leído 19997 veces)

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

Desconectado flacomaida

  • PIC10
  • *
  • Mensajes: 17
Re: Decodificando un protocolo IR y obteniendo direcciones y comandos.
« Respuesta #15 en: 19 de Diciembre de 2007, 07:56:45 »
Hola REdPic. Un favor. Me puedes enviar el LOGIC y como funciona?? Tambien ando en lo mismo. Hasta ahora trate de capturar la trama de un mando IR atravez de la placa de sonido con un editor de audio, idea de un amigo. Pero no se ve muy claro y tampoco el tiempo es preciso. Un abrazo...

Desconectado delmo

  • PIC10
  • *
  • Mensajes: 1
Re: Decodificando un protocolo IR y obteniendo direcciones y comandos.
« Respuesta #16 en: 06 de Abril de 2008, 14:27:21 »
he analizado el codigo de RedPic para aplicarlo a un decodificador Sony SIRC y le encuentro dos fallos, creo que de ahi lo de recger basura.
1º.- El 32avo bit nuncalo recive, ya que su trasicion de H_TO_L se corresponderia con el siguiete bit de start con lo que el timer se va de madre.
2º.- La variable start_recived una vez puesta a uno nunca se pone a cero.
En mi codigo alternativo en cambiado start_recived a int juego con el cambio de la señal de disparo y he añadido una variable nueva cuando se repite la pulsacion de la tecla. Obviamente los tiempos corresponden al SIRC. Tambien detecto errores y reinicio la trama.

// INTERRUPCION EXT por RB0 --

#int_ext
void ext_isr()                      // Obtengo datos de Timer0
   {
   if(start_recived==0)             //aun no estamos en el inicio de una trama
      {
      ext_int_edge(L_TO_H);
      star_recived=1;               // marcamos inicio de trama
      tt=get_timer0();              // cogemos timer para ver si
      if (tt>1740 && tt<1780)       // es la tecla repetida inervalos de 45ms
         {
         printf("\r\nTecla mantenida.\r\n");
         if (repe<10)
            ++repe;
         }   
      set_timer0(0x00);             // Iniciamos timer para no coger tramas a medias
      }
   else
      {
      tt = get_timer0();
      t = tt-tti;
      tti= tt;
      if (star_recived==2)
         {
         if(t>45 && t<50)              // Bit "0"
            {
            sbits[ntbits]='0';
            if(++ntbits==total_bits)   // Si he recibido 32 bits entonces hay dato
               {
               hay_dato=1;
               start_recived=0;
               ext_int_edge(H_TO_L);
               }
            }
         else if(t>68 && t<72)         // Bit "1"
            {
            sbits[ntbits]='1';
            if(++ntbits==total_bits)   // Si he recibido 32 bits entonces hay dato
               {
               hay_dato=1;
               start_recived=0;
               ext_int_edge(H_TO_L);
               }
            }
         else                          //error
            {
            start_recived=0;
            ext_int_edge(H_TO_L);
            }
         }
      else                             //error
         }
         if(t>115 && t<120)            // Detecto Start Bit
            {
            start_recived=2;
            limpia_bits();                // iniciamos nueva captura de bits
            }
         else
            {
            start_recived=0;
            ext_int_edge(H_TO_L);
            }
         }
      }
   }

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Decodificando un protocolo IR y obteniendo direcciones y comandos.
« Respuesta #17 en: 11 de Octubre de 2008, 12:40:11 »
hola chicos que tal?? Yo estoy inmerso en un programita que me permita utilizar un mando infrarrojo, del que sea tv,radio,..., para segun que funcion. Y llevo 3 o 4 dias trabajando con el receptor infrarrojos y ya he conseguido saber cual es el protocolo que utiliza. El protocolo que utiliza es RC5 de PHILIPS y los distintos pulsos con el mando vistos por el osciloscopio os lo pongo adjunto. Gracias al programa de Diego de TECNICAS EN C: MIDIENDO UN PULSO. 4º PARTE verifique que los tiempos y la frecuencia pertenecian a dicho protocolo.

Pero ahora tengo una duda como puedo hacer para que me muestre por pantalla mediante hiperterminal exactamente como en esta imagen:


es que me gustaria guardar en memoria las tramas y despues comparar con las que se han pulsado y llevar a cabo su funcion.

Yo lo he intentado con una interrupcion externa, cuando pulso una tecla el pic comienza mirar el RB0 cada 1,770 ms y mostrando por hiperterminal el estado del PIN pero no corresponde con la imagen del osciloscopio.

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Decodificando un protocolo IR y obteniendo direcciones y comandos.
« Respuesta #18 en: 17 de Octubre de 2008, 04:24:23 »
Redpic, igual es una tontería pero tengo una duda leyendo tú código de arriba de todo. Qué pasa cuando el timer pasa de 255 a 0? Si en tti tenías un valor 240 y el siguiente get_timer0() te devuelve 15, cómo lo interpretas?

 


Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5455
    • Picmania by Redraven
Re: Decodificando un protocolo IR y obteniendo direcciones y comandos.
« Respuesta #19 en: 17 de Octubre de 2008, 10:12:47 »
Hummmm .... no tengo ni idea. Ja, ja, ja, ja  :D :D :D :D

Hace dos años y dos meses que hice ese programa y no he vuelto a verlo ni utilizarlo ... imagino que podría ocurrir cualquier tipo de error absolutamente inesperado, curioso o incluso gracioso. Habría que estudiarlo.

¿Alguien se ofrece? (es broma) Si puedo le doy un vistazo a ver qué ocurriría,  :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Decodificando un protocolo IR y obteniendo direcciones y comandos.
« Respuesta #20 en: 27 de Enero de 2009, 02:05:57 »
Mil gracias redpic por tu trabajo, me viene de diez para lo q estoy haciendo. Sin embargo tengo una pequeña duda. Es necesario decodificar la trama? Si yo quiero q el circuito responda cuando apreto cierto boton del control, no puedo simplemente grabar lo q viene despues del encabezado, y despues quedarme a la espera de q se repita tal cual?
Gracias de nuevo!
PD: pienso usar el control remoto de un estereo pioneer, no se como sera el protocolo de este

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein