I am picking lots of cable modems out of the trash these days. Many of them contain discrete tuner units that will convert any frequency between 20MHz and 1GHz to a 44MHz IF.
This is what the guts of one of these typically looks like:
I have been collecting these modems for a while without really having a good purpose but I have started doing some experiments that may yield some useful applications:
In some of my experiments with software defined radio I have problems with strong adjacent signals that are interfering with my reception of certain frequencies. Most SDR’s are not great at handling strong and weak signals at the same time.
Normally you would use a pre-select filter to remove unwanted signals before feeding them to your receiver but if these are close to the ones you want these filters get impractical.
Another method is to convert the frequency band of interest to a different set of frequencies where filtering becomes more practical. This is exactly what the cable modem tuners do and even better they usually comes with a really sharp filter designed to work at their intermediate frequency. I removed one of these filters and did some analysis:
It looks like you can get around 40dB attenuation just 2MHz away from the pass band! In comparison my interfering signals are around 6MHz away.
All the extra components on the test board are due the fact that my test equipment has 50 Ohm impedance and the filter some much higher value (2,7kOhm ish).
Communicating with the tuners
The tuners uses IIC to set the conversion frequency. Luckily almost all IIC tuners uses the same protocol as this chip. Here are the highlights:
NOTE: Different tuners may have different IIC address. I use this Arduino sketch to find it.
All the ‘N’ bits are a 15 bit word that specifies the internal LO frequency in terms of channels. The channels are usually 62.6kHz but can be programmed to different values by the RD1 and RD2 bits. (note: RD1-2 often has different effect different from tuner to tuner, default usually get you 62.5kHz). The band select bits activate different circuitry for different bands inside the tuner. Usually only one should be set at a time.
LO = 44MHz, RX 145MHz,
LO= 44Mhz + 145MHz = 189MHz
N = LO/62.5kHz = 3024
The output of the tuner, with the filter connected, will allow you to receive 142-148MHz as 41-47Mhz.
Hooking up the circuit
On the output of the tuners you will usually find a amplifier circuit after the filter to compensate for filter loss and control the signal level for the connected circuitry, in my case the SDR. This amplifier can usually be sawed out of the cable modem board as a complete unit. By looking at the datasheet for the amplifier or by just applying good guessing the voltages and connections can be easily found.
Depending on the tuner unit different voltages may be needed. Some tuners require a fixed 33V tuning voltage apart from the 3.3 or 5V supply voltage. Also an analog AGC (gain set) voltage between 0 and 3V are usually required. These values can either be found in the datasheet for the (tuner, if available, or by simply measuring before sawing the cable modem to bits.
These are the connections usually needed:
Supply (3.3 or 5V), sometimes additional 24-33V for internal tuning.
AGC voltage. can be made with a potentiometer between supply to gnd
SCL, SDA IIC data lines.
Operating the tuner
I wrote this Arduino sketch that allowed controlling the tuner over a serial. The protocol is simply: the character ‘ * ‘ (Asterisk) followed by 4 binary bytes corresponding to the 4 control bytes in the tuner. The IIC address is hard coded in the Arduino sketch.
To generate the control data I wrote this program (sorry windows only). It communicates with the Arduino and allows you to poke around the registers.