htm=bot/remoto.htm ok bot/remoto.htm RC5: Codigo Philips para mandos a distancia.

RC5: Codigo Philips para mandos a distancia.


Cada BIT del código RC5, se compone de un pulso ON y otro OFF, el segundo es una ausencia de señal durante 888.864 usec, y el pulso ON no se transmite como un pulso continuo sino que consta de 32 pulsos generados a una frecuencia de 36 Khz, y por lo tanto de una anchura de 27.78 usec.

Esta parte es irrelevante durante la recepcion, pues es filtrada por el receptor TSOP1736. Este chip genera pulsos de  888.89 usec o más, e invierte el resultado, por lo que su salida está normalmente a 1, y se pone a cero para cada pulso ON.


En el código RC5, un BIT 1 se codifica por medio de un pulso OFF seguido de un ON, mientras que un BIT 0 es un pulso ON seguido de un OFF. Así, se emplean 1.778 milisegundos para transmitir un BIT.

Cada palabra se compone de 14 bits, cuyo significado se verá más adelante, lo importante es que el primer BIT es siempre un 1, y se usará para sincronizar la lectura de los BITs porteriores.


Entre dos palabras consecutivas de 14 bits, hay un espacio de casi 89 msec de tiempo en el que no se transmite nada.

Este espacio, en conjuncion con el primer BIT   transmitido, se usará para sincronizar la recepción.


Un TSOP1736 nos permite hacer un receptor de mando a distancia con muy pocos componentes.

En chip tiene tres patas, dos para la alimentación y la tercera es la salida serie.

Conviene desacoplar la alimentacion del TSOP1736 usando una resistencia de 100 hom y un condensador de 4.7 uF.

La patilla marcada Out es una salida compatible TTL, y puede atacar directamente una entrada de un PIC o tambien un pin del puerto paralelo de un PC. Si se va a usar el puerto serie, será necesario adaptar los niveles de tension.

La salida de señal está invertida, de modo que permanece normalmente a nivel alto y pasa a nivel bajo cuando se reciben pulsos del mando a distancia. Esta salida ha filtrado los pulsos de 36 KHz, y por lo tanto produce pulsos de una anchura de 888 usec y mayor, tal como se muestra en el gráfico "Standard Data Philips Word"   (pero invertidos respecto a este gráfico).

Entre palabra y palabra, la salida permanece a nivel alto tal como se muestra en el gráfico "Cycle time for word repeat" (de nuevo invertido).


La palabra de 14 bits que forma el código RC5 se desglosa del siguiente modo:

  • 2 bits de valor _uno_ que sirven para sincronizar el comienzo de cada palabra del código RC5. Adicionalemnte, el segundo bit puede tener un valor _cero_ expandiendo con eso el número de códigos posibles.
  • 1 bit de secuencia que vale alternativamente _cero_ y _uno_ cada vez que el ususario pulsa un botón. Es decir, si el usuario pulsa un botón del mando a distancia y lo mantiene pulsado durante un tiempo, se recibe varias veces el mismo código de 14 bits sin cambios en este bit. Si el usuario suelta el botón y lo vuelve a pulsar, el valor de este bit cambia. 
  • 5 bits que codifican hasta 32 tipos diferenctes de mando a distancia. Es decir, cada tipo de mando (TV, VCR, ...) emite un valor distinto en estos cinco bits. En particular, los mandos de TV emiten los cinco bits con valor _cero_.
  • 6 bits que codifican el comando, hasta 64 códigos distintos que se pueden ampliar a 128 si el segundo bit de sincronizacion (al comienzo de la palabra) pasa a valor _cero_.

Software decodificador RC5.

Hemos usado un PIC 16F84 para decodificar los códigos de un mando a distancia Philips, un TSOP1736 se encarga de producir una salida serie tal como se muestra en los gráficos "Standard Data Philips Word" y  "Cycle time for word repeat", aunque invertida respecto a estos gráficos.

La salida del TSOP1736 la hemos conectado al pin INT/RB0 del PIC, hemos activado la interrupcion con el flanco descendente de este PIN (que corresponde al falco ascendente de los gráficos). Usamos el temporizador para calcular los tiempos entre interrupciones.

El código fuente se puede obtener descargando el compilador PicSC, en el fichero _rc5.h