Modern LCD TVs often have built-in media players which make them great candidates for stand-alone media art players, the main problem is how do you make the TV play the media file on power-up? Most require intervention using the remote, going through menus, etc.
To solve this problem I designed a simple IR recorder that can work with ANY IR device.
The circuit records in real time, so the timing of the playback is identical to the recording.
It measures and saves the carrier frequency of the IR signals, so ANY carrier between 30 and 60 Khz. will be recorded and replicated accurately.
It records and replays the exact number of cycles in each IR burst, so the fidelity of the output is excellent.
It is totally code-agnostic, it just records the signals and replicates them exactly.
It can record many HOURS within one record session.
Multiple different remotes can be recorded within one session, even with totally different protocols and carrier frequencies.
I started the design process pondering how I could record the waveforms and save the data in the most efficient manner that would still be compatible with the many different protocols.
Recording the IR signals:
Firstly, I needed to capture the optical signal, I use a simple IR photo-transistor. Integrated IR receiver modules are not an option because of the wide range of carrier frequencies that I need to receive. This does require that the remote be very close to the device to get enough signal, but it's simple and works well.
Looking at the general concept of IR control codes you see a theme: Bursts of IR at a specific carrier frequency with varying coding schemes, the bursts tend to be at least 6 cycles or more, and the time between bursts is variable. Most data packets begin with a long burst that is intended to keep the AGC system in the receivers happy. The basic data rate is usually around 500 Bps.
The scheme for recording the data relies on simple run-length encoding, time between bursts is recorded in 16 bit words pushed into the FLASH memory, bursts are encoded as number of cycles in the burst, at the current carrier frequency. Dead-time between bursts is measured with Timer 0, running at 125 Khz, which gives 8 us timing resolution.
Of the 16 bits in each word, the two MSB's determine the meaning of the word:
1) Delay value
2) Number of burst cycles
3) Carrier frequency (period)
4) END OF RECORD marker.
You must know and reproduce the correct carrier frequency. Carrier frequencies vary from 30 to 56 Khz. Using Timer 1 running at 16mhz, I measure 4 periods of the input signal to average the period, this value gets saved and used until the next 'time-out', therefore a different remote with a different frequency can be sampled in the same recording session.
The entire timing engine runs using interrupts for the most predictable timing latency, data words are pushed into a FIFO buffer and saved into the external FLASH memory by a piece of mainline code, this ensures that the memory write cycles can keep up with bursts of data, stuffing the buffer into memory during the delays between IR bursts.
I am very pleased with the results of this effort, I will be using this simple piece of hardware as a solution for a bunch of media art projects.