A Remote-Control Extender for TiVo, using a PSoC

Edwin Olson, eolson@mit.edu, 5/5/2003

I wanted to make a remote control extender so that I could control my TiVo from another room.

There are zillions of remote control extender circuits out there, but I wanted to do something different. I also wanted to use as few components as possible.

My basic circuit is a sharp ir detector module (available from digikey, search for 'photo ic') which outputs the demodulated infrared signal. I send this information upstairs to a cypress PSoC which remodulates it. (PSoCs are neat because they have a lot of different functionality but are small and cheap... even if I don't use the functionality of a PSoC, it's nice to know that if I need to make the design more complicated later on for some reason that I can probably just tweak the code on the PSoC rather than redesign the circuit.) My initial version of the PSoC simply generated a 40KHz waveform and AND'ed it with the output of the IR receiver module. That's it-- basically the PSoC was acting like a 555.

The receiver and emitter unit are connected by a 4 conductor RJ-11 cable. I only use 3 conductors: +5V, GND, and the output of the IR receiver. The emitter unit provides power to itself and the receiver unit, using a 7805 and a random wall wart I had lying around.

Right away, the design worked fine with the remotes for my TV and other stereo components, but I couldn't get the damned thing to work for the TiVo. Occasionally a button press would get through, but it was unusable.

I tried finding the TiVo's carrier frequency online, but didn't have any luck. I eventually had to go pick up a photodetector and measure it myself. The TiVo remote I had was just about 38KHz, but it seemed to be a bit irregular-- probably a very cheap modulator inside.

After adjusting the carrier frequency to 38KHz, the TiVo still didn't respond to its remote very often. Bummer!
The top channel is the output of the IR reciever module. The bottom channel shows the output of a raw photodiode--i.e., a measurement of what the remote is actually emitting. Note how the IR receiver module takes about 60uS to go low and about 200uS to go high.

It turns out that the sharp IR receiver module tends to distort the signal. Using the output of the module to generate another IR signal results in a signal noticeably different from the original. There are two distortions in the receiver module: the amount of time it takes for the module to notice that the carrier has started, and the amount of time it takes for the module to notice that the carrier has stopped. If these two time periods were the same, then there would be no distortion-- the original signal would simply be delayed by a fixed amount. Unfortunately, these time periods are very different.

I measured that the time it takes for the module to detect a carrier is about 60uS. That seems about right since the period of the carrier is 26uS. It takes about 2 fully cycles for the detector to notice.

I measured that the time it takes for the module to notice that the carrier is no longer present is about 200uS. This is a very long time, almost 8 cycles of the carrier!

My solution was to recode the PSoC just a bit-- whenever I see the beginning of a new pulse from the IR detector, I don't actually start producing a carrier for about 100uS. (Yes, I should have delayed about 140uS, but I coded up 100uS first and it seems to work.) If you think about it, delaying the beginning of the pulse does exactly undoes the distortion. The remote is now very reliable. I'm glad I had the PSoC, because it was easy to add the delay. A 555 timer wouldn't have been as flexible.

I guess the TiVo has a particularly sensitive ("picky") IR receiver. As I said, other devices in my house worked just fine without the extra work. Oh well.


Back to Ed's Notes Index

This page (C) 2003-2004 by Edwin Olson, eolson@mit.edu. All Rights Reserved. Feel free to link to this page, but do not copy it or its figures.