Even that we can not see or hear infrared, we can feel it at our skin temperature sensors.
Lots of things can generate infrared, anything that radiate heat do it, including out body, lamp, stove, oven, car's engine, car's tires, hot asphalt and rocks, plants, even the hot water at the faucet.
The massive use of IR LEDs at TV/VCR remote controls and other applications, brought infra-red diodes and transistors (emitter and receivers) at very low cost at the market.
To allow a good communication using infra-red, and avoid those "fake" signals, it is imperative to use a "key" that can tell the receiver what is the real data transmitted and what is generated by the surrounding environment. As an analogy, looking eye naked to the night sky you can see hundreds of stars, but you can spot easily a far away airplane just by its flashing strobe light, even if that blinking light is dimmer than the stars light. That strobe light is the "key", the "coding" element that alerts us.
Similar yo the airplane at the night sky, the room where the TV is installed may have hundreds of tinny IR sources, our body, the lamps around, even the hot cup of tea. A way to avoid all those other sources, is generating a key, like the flashing airplane. So, remote controls use to pulsate its infrared in a certain frequency. The IR receiver module at the TV, VCR or stereo "tunes" to this certain frequency and ignores all other IR received. The best frequency for the job is between 30 and 60kHz, the most used is around 36kHz. It works exactly as a radio receiver tunning to a specific station. In this case, the receiver tune to the IR "radio" at 36kHz, and ignores the rest. Your cup of hot tea generates IR, but not at 36kHz, it is flat and plain IR emission, and then, ignored by the TV IR receiver.
So, remote controls use the 36kHz (or around) to transmit information. InfraRed light emitted by IR Diodes is pulsated at 36 thousand times per second, when transmitting logic level "1" and silence for "0".
To generate a 36kHz pulsating infrared is quite easy, more difficult is to receive and identify this frequency. This is why some companies produce infrared receives, that contains the filters, decoding circuits and the output shaper, that delivers a square wave, meaning the existence or not of the 36kHz incoming pulsating infrared.
It means that those 3 dollars small units, have an output pin that goes high (+5V) when there is a pulsating 36kHz infrared in front of it, and zero volts when there is not this radiation.
A square wave of approximately 27uS (microseconds) injected at the base of a transistor, can drive an infrared LED to transmit this pulsating light wave. Upon its presence, the commercial receiver will switch its output to high level (+5V).
If you can turn on and off this frequency at the transmitter, your receiver's output will indicate when the transmitter is on or off.
Those IR demodulators have inverted logic at its output, when a burst of IR is sensed it drives its output to low level, meaning logic level = 1.
The TV, VCR, and Audio equipment manufacturers for long use infra-red at their remote controlers. My first color TV in 1976 used an ultrasound (not infrared) remote control.
To avoid a Philips remote control to change channels in a Panasonic TV, they use different codification at the infrared, even that all of them use basically the same transmitted frequency, from 36 to 50kHz. So, all of them use a different combination of bits or how to code the transmitted data to avoid interference.
Some standards were created. As illustrative material, we will only show one of them, the one used by Philips, even that we can cover the other ones in the future.
First of all, Philips adopted or created the RC5 standard that uses fixed bit length and fixed quantity of bits.
Each time you press a button at the Philips remote control, it sends a train of 14 bits, 1.728ms per bit, the whole train is repeated every 130ms if you keep the button pressed
Each bit is sliced in two halves. The left and right half has opposed levels. If the bit to be transmitted is one (1), its left side is zero while its right side is one. If the bit to be transmitted is zero (0), its left side is one while the right side is zero.
It means that the second half of the bit is actually the same meaning of the bit to be transmitted, as you can see at the shaded blue right side of the bit as on, means bit transmitted = 1.
If you want to measure the correct logic level directly from the Receiver Output, you should measure at the first half of the bit.
The correct interpretation, is that it changes level exactly at the middle of bit time. At the IR Receiver output a bit Zero changes level from Low to Up, while a bit One changes level from Up to Low.
There are a minimum quantity of incoming 27Еs pulses to the demodulator understand it is at the right frequency and then drop its output. The quantity of pulses used at the Philips remotes are 32 pulses per each half of the bit, 64 pulses per bit. So, a bit "0" to be transmitted it means 32 square pulses of 27Еs each, then 32 x 27Еs of silence. The bit "1" is the opposite, 32 x 27Еs of silence followed by 32 square pulses of 27Еs.
Our job here will be to decode the receiving of the waveform at the demodulator output. We could observe the direction of the changing at the middle of the bit, if going down, means bit 0, going up, means bit 1. But it is easy to sample the middle of the first half of the bit, so it directly tells us what is the bit state, as we will see next in this text.
The Philips remote control sends 14 bits in sequence as you can see below. (I am sorry to need to use more than your monitor width for the next picture, but it is to better view it).
The first two bits, #1 and #2, are called ACG calibration. They are "ON" level, and serve to calibrate the IR Receivers Auto Gain Control.
In the Philips remotes, the bit #3 is the CHECK bit, every time you press a key at the remote, even pressing repeatedly the same key, this bit flips state. This feature is interesting. Suppose you pressed number "1" at the remote (trying to select channel 15 at TV) and holding it for 2 seconds, then your other hand just blocks the InfraRed signal. The TV would receive two trains of pulses, generated by your hand breaking a long train in two. Other systems would understand transmission of two keys "1" selecting channel "11", but this do not happens in the Philips system. This bit flips state every time you press a key, so blocking the signal with your hand doesn't change this bit, so the TV will understand that still the same key pressed. To select channel "11" you should press key "1" really twice.
5 bits, #4 to #8, are used for SYSTEM ADDRESS, or to identify which kind
of device should execute the COMMAND bits. For example, TV set uses
ADDRESS ZERO. Bit #8 is the Less Significant Bit.
The next 6 bits, #9 to #14, are used for COMMAND information to the device selected at the ADDRESS bits. Bit #14 is the LESS SIGNIFICANT BIT, and it is last transmitted.
STOP key uses COMMAND #54 (36h in hexadecimal), bits #9, #10, #12 and #13
should be ON, bits #11 and #14 should be OFF.
system can be automated if using the chips:
During inactivity (no Infrared present) the output of the Infrared receiver is UP (bit zero).
You can connect the IR receiver output to any input port pin or interrupt pin of your microcontroller, and keep polling it or prepare the interrupt routine to trigger your reading after the first low level sensed.
When you press a key at the remote, it transmits the train of pulses, and your microcontroller will receive bit #1 first. It will be sensed right after the middle of the bit when it changes from high to low level to means bit "1". This is the first time that your microcontroller will "see" the incoming IR signal.
You don't need to decode those first two bits, not even the CHK bit (except if you want to control as the TV do and described above), so you can skip those 3 bits and start to receive the ADDRESS bits. To do that, you need to skip 2.75 bits time, and you will be exactly at the middle of the right level of the first ADDRESS bit to be read (non inverted level).
So, upon sensing the first low level, your software should wait 4.752 milliseconds and then start to read the next 11 bits spaced 1.728ms each. The first 5 bits are Address and the next 6 bits are Command, logic correct level, LOW = 0, HIGH = 1.
To make sure your software is waiting the correct timing, you need to use a dual channel oscilloscope, and this procedure to adjust your software:
bit reading routine use an available microcontroller port pin and generate
a fast pulse UP and DOWN, then use one scope channel to display this
pulse, and the other scope channel to show the incoming signal from the
receiver. Press and hold key number ZERO at the remote, and
sync the scope to show a complete wave form, don't worry with timing. The
fast 11 pulses should always be in place of those RED
down arrows at the figure 8 above. It means that the "bit reading"
software routine will reading exactly in the middle of the correct bit
Your software will need to have two timing delays, the first to wait 4.752ms and the second to wait 1.728ms. Adjust the timing loop from the 4.752ms until the first fast pulse happens exactly as indicated above. Then adjust the 1.728 ms timing delay in such way that the last fast pulse (#11) bit reading happens exactly at the middle of the low part of the last bit (#14).
Check all other bits and fast pulses, they should be all matching ok. Small errors would be accepted since the reading would be happening in the middle of the bit, few errors for more or less is not a problem, but it is better to be the most possible in the middle of the low level of each bit. This is why you should adjust your 1.728ms timing routine looking at the last data bit and fast pulse, if they match somehow ok, all the other bits should be ok too.
Remember that any other remote key will generate a different pattern and it can confuse you. Use always key number ZERO for this software calibration.
Once you find the correct timing delays, you can replace the FAST pulse instructions with NOPS (check your chip instruction set to keep the same clock count wasted), or keep the fast pulse there just for fun, so you will be able to recheck it in case of problems.
Reading the 11 bits is easy. Just shift them left into a 8 bits register and ignore the high order 2 bits #7 and #6 (AND 03Fh instruction), keep only the COMMAND last 6 bits... You will not want to decode the ADDRESS bits, are you? The TV remote control will always send Address Zero, you know that, right?
Here few examples of the complete waveform (14 bits) at the Receiver Output:
at the right are the command in hexadecimal
If you want to include some safety (recommended), check bits #7 and #6 for ZEROS, if it is a Philips TV remote. You can also not use the 4.752ms delay, instead, wait only 3/4 of a bit time, and then start to read from the bit #2. You will suppose the first one was a "1" and the second should be a "1" too, if not, discard them, wait 60ms and activate reception again, you should sync correctly at the beginning of the next train of pulses. But even this way, you could read wrongly a "1" bit followed by another if the reading start anywhere in the middle of the train.
To make sure your controller is never starting to read the train in the middle, you can discard the first reading always after a long silence (half second or more), so you will make sure that the second reading will be in sync. To do that, after idling for more than half second, enter in a special sync routine and upon sensing the first LOW level bit (can be the real first or not), wait 60ms and jump to the real receive routine and start to monitor the Receiver output again. It means that the first train will be used just to make your receive routine to engage in a correct timing to read the second train of pulses.
that there is a delay of 105ms between pulse trains, so doesn't matter
which LOW bit you sensed, waiting 60ms will put your reception routine
in the middle of the silence between pulse trains, allowing it to sync
at the first bit of the next train of pulses.
8051 ASSEMBLY CODE
; TRANSMITTER CONFIGURATION:
IRDATA DATA 010H ; Memory to store IR code received
; Reset Decoder Output High
Wagner Lipnharski (firstname.lastname@example.org)