The RC-5 code from Philips is possibly the most used protocol by hobbyists, probably because of the wide availability of cheap remote controls for this protocol.
The protocol is well defined for different device types ensuring compatibility with your whole entertainment system.
Lately Philips started using a new protocol called RC-6 which has more features.
The protocol uses bi-phase modulation (or so-called Manchester coding) of a 36kHz IR carrier frequency. All bits are of equal length of 1.778ms in this protocol, with half of the bit time filled with a burst of the 36kHz carrier and the other half being idle. A logical zero is represented by a burst in the first half of the bit time. A logical one is represented by a burst in the second half of the bit time. The pulse/pause ratio of the 36kHz carrier frequency is 1/3 or 1/4 which reduces power consumption.
The drawing below shows a typical pulse train of an RC-5 message. This example transmits command $35 to address $05.
The first two pulses are the start pulses, and are both logical "1".
Please note that half a bit time already has elapsed before the receiver will notice the real start of the message.
Extended RC-5 uses only one start bit.
Bit S2 is re-assigned to command bit 6, providing for a total of 7 command bits.
The value of S2 must be inverted to get the 7th command bit though!
That way the first 64 commands remain compatible with the original RC-5 protocol.
The 3rd bit is a toggle bit.
This bit is inverted every time a key is released again.
This way the receiver can distinguish between a key that remains down, or is pressed repeatedly.
The next 5 bits represent the IR device address, which is sent with MSB first.
The address is followed by a 6 bit command, again sent with MSB first.
A message consists of a total of 14 bits, which adds up to a total duration of 25 ms.
Sometimes a message may appear to be shorter because the first half of the start bit S1 remains idle.
And if the last bit of the message is a logic "0" the last half bit of the message is idle too.
As long as a key remains down the message will be repeated every 114ms. The toggle bit will retain the same logical level during all of these repeated messages. It is up to the receiver software to interpret this auto repeat feature.
Philips has created a beautiful list of "standardized" commands.
This ensures the compatibility between devices from the same brand.
A very nice feature, often to be missed with other brands, is the fact that most devices are available twice in the table allowing you to have 2 VCRs stacked on top of each other without having trouble addressing only one of them with your remote control.
It is interesting to note that many of the defined devicetypes are already extinct for quite some time.
I can only show a limited list of standard commands, for this list is about all I know right now.
Address | Device |
$00 - 0 | TV1 |
$01 - 1 | TV2 |
$02 - 2 | Teletext |
$03 - 3 | Video |
$04 - 4 | LV1 |
$05 - 5 | VCR1 |
$06 - 6 | VCR2 |
$07 - 7 | Experimental |
$08 - 8 | Sat1 |
$09 - 9 | Camera |
$0A - 10 | Sat2 |
$0B - 11 | |
$0C - 12 | CDV |
$0D - 13 | Camcorder |
$0E - 14 | |
$0F - 15 | |
$10 - 16 | Pre-amp |
$11 - 17 | Tuner |
$12 - 18 | Recorder1 |
$13 - 19 | Pre-amp2 |
$14 - 20 | CD player |
$15 - 21 | Phone |
$16 - 22 | SatA |
$17 - 23 | Recorder2 |
$18 - 24 | |
$19 - 25 | |
$1A - 26 | CDR |
$1B - 27 | |
$1C - 28 | |
$1D - 29 | Lighting |
$1E - 30 | Lighting |
$1F - 31 |
Command | TV Function | VCR Function |
$00 - 0 | 0 | 0 |
$01 - 1 | 1 | 1 |
$02 - 2 | 2 | 2 |
$03 - 3 | 3 | 3 |
$04 - 4 | 4 | 4 |
$05 - 5 | 5 | 5 |
$06 - 6 | 6 | 6 |
$07 - 7 | 7 | 7 |
$08 - 8 | 8 | 8 |
$09 - 9 | 9 | 9 |
$0A - 10 | -/-- | -/-- |
$0B - 11 | Standby | Standby |
$0C - 12 | Mute | Mute |
$0D - 13 | Volume + | |
$0E - 14 | Volume - | |
$0F - 15 | Brightness + | |
$10 - 16 | Brightness - | |
$11 - 17 | Program + | Program + |
$12 - 18 | Program - | Program - |
$32 - 50 | Fast rewind | |
$34 - 52 | Fast forward | |
$35 - 53 | Play | |
$36 - 54 | Stop | |
$37 - 55 | Recording |