Decodificando el Infrarrojo: SIRC

Sony desarrolló desde hace tiempo un protocolo de control serial por ancho de pulso, que usa para el control serial por cable de sus dispositivos, el protocolo SIRC (Serial InfraRed Control) no es más que su adaptación al infrarrojo.

En esta entrada veremos cómo es la estructura de este protocolo y cómo se codifica.

¿Comunicación Serial?

Al hablar de un sistema de comunicación digial serial nos referimos a que la información binaria, es decir en forma de unos y ceros, se transfiere bit por bit a través de un medio, y se recibe de la misma forma, esto trae la ventaja de usar un sólo cable en el caso de comunicarnos por niveles de voltaje, o en el caso del control remoto, por pulsos luminosos.

Cuando hablamos de un sistema de comunicación digital serial por ancho de pulso, nos referimos a que además de que la información se transmite de manera serial, ésta va codificada por medio de la longitud de los impulsos, ya sean estos de voltaje o luminosos. En este tipo de codificación por ejemplo, un impulso corto puede interpretarse como un 1 y uno largo como un 0, o viceversa.

La codificación es bastante importante para la comunicación serial, ya que permite al receptor determinar, sin lugar a dudas, que lo que está recibiendo es un 1 o un 0, e ir armando una palabra binaria, como podría ser, por ejemplo: 10110111.

El protocolo SIRC

En el caso que estamos estudiando, el protocolo SIRC utiliza un espacio de tiempo que podríamos llamar «fundamental» de 600µs (600*10-6s). La señal se envía en múltiplos de ese espacio de tiempo, que denominaremos simplemente T, de aquí en adelante.

Codificación

Bit de inicio
Todo protocolo de comunicaciones necesita algún indicador de «inicio» que le indique al receptor que se prepare a recibir datos, en este caso es un pulso de longitud 4T, es decir 2.4ms (2.4*10-3s).

Sólo Después de que se ha enviado este pulso van ordenados los demás pulsos mas cortos que significan 1’s y 0’s, es decir, la información útil.

Bit 1
Un bit 1 (alto, o verdadero), se codifica mediante un espacio (sin señal) de longitud T, y un pulso también de longitud T.

Bit 0
Un bit 0 (bajo, o falso), se codifica mediante un espacio (sin señal) de longitud T, y un pulso de longitud 2T igual a 1.2ms.

Es decir:

La codificación para los bits en SIRC

Como vemos es bastante simple diferenciar los 1’s de los 0’s y a los bits de inicio. Nos queda analizar la señal completa enviada por el control remoto.

Como se observa, la codificación en el protocolo SIRC es bastante simple, simplemente se limita a enviar pulsos de longitud T, 2T y 4T, lo que los hace suficientemente diferentes entre sí para ser fácilmente detectados en el receptor.

Pero no basta con conocer cómo se diferencia un 0 de un 1, también hay que saber en qué orden los envía el transmisor, en concreto el protocolo SIRC envía 12, 15 o 20 bits de información.

Estos bits se dividen en:
señal de inicio + 7 bits de comando + 5 u 8 bits de dispositivo + 8 bits adicionales (en la versión de 20 bits).

Variante de 12 bits:

sirc de 12 bits

Orden de bits en SIRC, variante de 12 bits

Variante de 15 bits:

SIRC de 15 bits

Orden de bits en SIRC, variante de 15 bits

Variante de 20 bits:

SIRC de 20 bits

Orden de bits en SIRC, variante de 20 bits

Entre los 7 bits de comando va la información del botón que ha sido presionado en el control remoto, codificada en binario natural y en orden de menos significativo a más significativo. Los números enviados serían:

Comando Enviado
Botón presionado
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 0
16 Chan +
17 Chan –
18 Vol +
19 Vol –

En la información de dispositivo va el número de dispositivo al que queremos controlar, como TV o VCR, sería:

Número Enviado Dispositivo
1 TV
2 VCR 1
3 VCR 2

13 Respuestas to “Decodificando el Infrarrojo: SIRC”


  1. 1 zerphan 1 febrero 2010 a las 15:32

    Hola, muchas gracias por la información apenas iniciare con mi codigo.
    1-Checare si sale invertida o no la señal del receptor (con el bit de start)porque me hace falta un osciloscopio xD
    2-Contare de cuantos bits es el protocolo de mi control sony, entre bit start y el bit start siguiente
    3-Manos a la obra…
    Espero no tener problemas. saludos.

  2. 2 denjohx 3 febrero 2010 a las 23:55

    Hola zerphan, un gusto.

    Y no necesitas un osciloscopio, con el sensor adecuado y tu PC puedes hacerlo fácilmente como lo he hecho yo, checa esto:

    Decodificando el Infrarrojo: Capturando la acción

  3. 3 Jandi 23 febrero 2010 a las 13:01

    Realmente interesante y educativo, aora mi pregunta d ignorante; una vez tengas capturado la secuencia en el pc como un sonido, puedes emitirla?

  4. 4 denjohx 23 febrero 2010 a las 23:38

    @Jandi: Bueno, no es que la señal en sí sea agradable de escuchar. pero emitirla sí que puedes.

    Si te refieres a emitirla por infrarrojos para activar a algún receptor pues también se puede, aunque para eso recomendaría mejor armar un circuito que lo haga, con un pic y quizá con un LM555 no sería muy difícil, o directamente intentar recrear la señal generándola desde 0 en la PC con algún programa de edición de audio o análisis de señales.

    La calidad de la señal capturada en la PC ya de por sí ha sufrido muchas pérdidas como para tan sólo reproducirla sin más.

  5. 5 cleto 25 marzo 2010 a las 8:41

    muy interesante e informativa to apreciacion respecto a la codicficacion del remoto infrarojo
    no siempre se encuentra algo asi, por lo general te dejan un link que aveces ni existe
    saludo desde jujuy argentina

  6. 6 Marcos 29 May 2010 a las 12:57

    Genial, espero ver mas cosas como estas en el blog. Tengo mi arduino listo para empezar a trabajar jejeje

  7. 7 Edwards Escares 16 agosto 2011 a las 8:14

    esta Información esta al revez…

    Bit 1
    Un bit 1 (alto, o verdadero), se codifica mediante un espacio (sin señal) de longitud T, y un pulso también de longitud T.

    Bit 0
    Un bit 0 (bajo, o falso), se codifica mediante un espacio (sin señal) de longitud T, y un pulso de longitud 2T igual a 1.2ms.

  8. 8 Ere 4 abril 2012 a las 11:26

    hola muy interesante tu post,tengo una dudototota, como lo reconoce mi pic, como señal analogica o digital??
    Apenas estoy adentrandome en la programacion y necesito saber como identificar cada pulso para poder programarlo, te agradeceria me sacaras de esta lagunota,gracias

  9. 9 Alejandro Vázquez Bravo 19 abril 2012 a las 23:19

    Me gustaría saber si sabe acerca de algún problema con la trama al enviar o con el receptor infrarrojo al momento de mandarlo por algún angulo raro o rebote contra la pared o un obstaculo ???

  10. 10 JoseJL 8 enero 2014 a las 16:20

    Excelente información la encontrada aquí… La necesitaba para trabajar con mi nuevo proyecto… Muchísimas gracias y saludos desde Valencia-Venezuela… 😉

  11. 11 eduardo alberto 28 junio 2014 a las 16:08

    alguien me puede ayudar?, mi programa basicamente consiste en esto cuando se da un flanco de subida, activo un contador, capturo el valor del contador y lo guardo, asi entonces solo abria dos posibles valores para el contador, sin embargo cuando lo llevo a la practica, aveces me salen hasta 4 vaalores en el contador. y se supone que solo deberian ser dos uno de cuando dura t y otro de cuando dura 2t (omito el primero que es el de 4t)

    • 12 denjohx 30 junio 2014 a las 21:21

      Dependiendo del lenguaje que uses. En assembler por ejemplo se puede lograr buena exactitud, pero mientras se vaya volviendo más fácil de programar, se pierde exactitud en cuanto a tiempos.

      Siempre vas a tener un desfase entre que cuentas, y que sensas, por lo que siempre vas a obtener valores diferentes, lo importante es que compares con rangos, no con números exactos, por ejemplo: cuando el contador esté entre 100 y 120, es un «1».

      También es más recomendable hallar una solución basada en interrupciones, para que tu pic pueda realizar otras tareas y al mismo tiempo detectar el infrarrojo, y también esta forma puede ser más exacta.

  12. 13 ilop 27 octubre 2014 a las 9:19

    muchas gracias por tuaportación ,de excelente calidad


Deja un comentario




Sobre el autor:

Denjhox, diseñador electrónico y desarrollador web freelancer.

Gusta de armar circuitos programables, robots, desarrollar aplicaciones web y utilizar software libre.

Archivo

Han pasado...

  • 38.135 visitantes

Licencia:

Creative Commons License
Esta obra está bajo una licencia Creative Commons.