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:
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:
Variante de 15 bits:
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 |
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.
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:
Realmente interesante y educativo, aora mi pregunta d ignorante; una vez tengas capturado la secuencia en el pc como un sonido, puedes emitirla?
@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.
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
Genial, espero ver mas cosas como estas en el blog. Tengo mi arduino listo para empezar a trabajar jejeje
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.
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
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 ???
Excelente información la encontrada aquí… La necesitaba para trabajar con mi nuevo proyecto… Muchísimas gracias y saludos desde Valencia-Venezuela… 😉
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)
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.
muchas gracias por tuaportación ,de excelente calidad