This site will look much better in a browser that supports web standards, but it is accessible to any browser or Internet device.

Using a DTV tuner with a TiVo to receive HDTV broadcasts on an SD TV

Before proceding, please understand that the instructions below require a hacked TiVo. I assume you've read the TiVo Hack FAQ and you have shell access to your TiVo and TiVoWebPlus is installed. These instructions also utilize the dbsetx utility, written by one of the OzTiVo members.

I recently purchased a Zenith DTT900 (aka Insignia NS-DXA1) using a $40 DTV coupon for a standard definition TV I have hooked up to a Series1 standalone TiVo with a lifetime subscription. However, I found that while the converter box works well, there is no TiVo support for such boxes. After doing some research and trial and error I was able to get it to work using the method described below. This procedure is known to work with the Zenith DTT900/DTT901 and the Insignia NS-DXA1/NS-DXA1-APT). If you have a different model converter box it will use different remote codes, so you'll have to do a little research and experimentation to get the TiVo to control it.

To make the DTV converter box useful work we require two basic things:

Guide data
Without program guide data for the channels a TiVo is little more than a glorified VCR.
A way to control the converter box
The TiVo needs to be able to change channels on the converter box so that it can record shows as scheduled.

STEP ONE: finding usable guide data

The HD channels are not listed in the standard over the air channel lineup. For me, the easiest thing was to choose a digital cable lineup from the local cable company which includes the local HD stations. In my case, the Comcast "digital cable basic" lineup included all the HDTV stations I can pick up. Check your local cable providers for lineup info.

If your cable provider doesn't carry your local HD channels, you may be better off using data from one of the satellite providers (e.g. DirecTV or Dish).

Don't worry about the channel numbers that the lineup uses. We'll map them to the correct values later. All that matters at this point is that the guide data includes your HDTV locals.

STEP TWO: controlling the DTV box

The Zenith/Insignia DTV converters are made by LG and use the LG remote codes. While the TiVo IR code database does include support for an LG-branded DirecTV tuner, those codes aren't available if you are using a cable lineup. To map the LG codes into the Zenith cable converter configuration, run my dtt900_add script on the TiVo. If your TiVo's IR database includes the LG remote code, it will be added to the Zenith configuration and support for the Enter key will be added. If your TiVo doesn't have tge LG remote code, the script will overwrite the values in Zenith remote code 10013. This will make it possible for the TiVo to control the DTV box using a cable lineup. This step is optional if you are going to be using a DirecTV lineup.

STEP THREE: re-run guided setup

Begin guided setup (from the setup menu) and select the lineup you have chosen. If it is a cable lineup, select the appropriate cable provider. If it is a satellite lineup, select your satellite provider.

If you are using a DirecTV lineup, select an LG satellite receiver controlled via IR. If you chose a cable lineup, select a Zenith cable box with code number 10075 (or 10013 if your TiVo lacks the LG remote code). Be sure to select the option that specifies three digit channel numbers and the option to use the "enter" key after sending the channel number.

At the end of guided setup, select the HDTV versions of your local stations as channels you receive and remove the rest. You may see the same local channel listed multiple times. Either choose the one with a "DT" suffix or choose the highest-number non-DT channel. Don't worry that the channel numbers don't match the DTV converter, we'll take care of that in the next step.

STEP FOUR: remapping channels

Once you have finished guided setup it is time to make the TiVo properly control the DTV box. The first problem you'll have is that the DTV converter uses channels such as 2-1 (for channel 2, subchannel 1) which will not correspond to the guide data. Furthermore, there is no - key on the TiVo remote. Fear not, we'll work around this shortly. For now, just make a note of which HDTV channels you can receive. You'll need to know their call signs as well as the channel and subchannel number. The display button on the DTV remote is helpful here.

There are two ways to remap the channel: via the TiVoWebPlus ChannelMap module, or by customizing a tcl script you then run on thre TiVo.

TiVoWebPlus ChannelMap Method

To remap the channels in the lineup to match the channel numbers the DTV box needs, browse to TiVoWebPlus and select System->ChannelMap, which should be http://yourtivo:80/listchan where yourtivo is the IP address of your TiVo. If you are running TiVoWebPlus on a port other than port 80 you'll need to use the appropriate the port number.

For each HDTV station that you receive, click its call sign to edit the channel info. For instance, in Baltimore, WMPTDT is the HDTV version of the local PBS station. On the DTV box, WMPT is channel 22 with three subchannels. If we change WMPTDT to channel 221 in the channel list, it will correspond to 22-1 on the DTV box. Don't input the -, the DTV converter will still work without it. Remapping channels via TiVoWebPlus is a slow process but you probably don't have too many of them to remap. After you have everything mapped correctly, click the "Save Current Channel State" button to save your updated channel list for later recovery, then click the "Commit Changes To Active Channels List" button to commit the changes to the active list. You should see output similar to the following:

Applying change for WMARDT 22 (Was 210) object 29026/2545
Applying change for WMARDT3 23 (Was 204) object 29026/2542
Applying change for WBALDT 111 (Was 211) object 29026/2546
Applying change for WBALDT2 112 (Was 208) object 29026/2544
Applying change for WJZDT 131 (Was 212) object 29026/2547
Applying change for WMPTDT 221 (Was 200) object 29026/2540
Applying change for WMPTDT2 222 (Was 220) object 29026/2550
Applying change for WMPTDT3 223 (Was 201) object 29026/2541
Applying change for WBFFDT 451 (Was 213) object 29026/2548
Applying change for WBFFDT2 452 (Was 206) object 29026/2543
Applying change for WNUVDT 541 (Was 214) object 29026/2549
Save this info, you may find it useful if a lineup change occurs. After the changes have been committed, you should see the updated channel numbers in the TiVo guide and the "channels I receive" list.

Remapping channels via script

First off, you'll need to know the station call sign (or name) of each HDTV station you receive. This must be the call sign that TiVo uses for the station, which may be different from what the DTV converter uses. Typically, these have a DT suffix, followed by a number in the case of secondary sub-channels. For example, in my lineup, these are (among others), WJZDT, WBFFDT, and WBFFDT2. You can find these by browsing the list of channels you receive on the TiVo itself or via TiVoWebPlus. Next, fetch a copy of my channel_map script and edit the top portion that has the mapping of call sign to channel number. Remember to include the sub-channel as the last digit of the channel number. For instance, in Baltimore, WMPTDT is the HDTV version of the local PBS station. On the DTV box, WMPT is channel 22 with three subchannels. I map WMPTDT to channel 221 which corresponds to 22-1 on the DTV box. Once you've customized the script for your location, upload the script to your TiVo and make it executable by running chmod 755 channel_map and execute it by running ./channel_map. You should see output such as:
WMARDT 210 -> 22
WMARDT3 204 -> 23
WBALDT 211 -> 111
WBALDT2 208 -> 112
WJZDT 212 -> 131
WMPTDT 200 -> 221
WMPTDT2 220 -> 222
WMPTDT3 201 -> 223
WBFFDT 213 -> 451
WBFFDT2 206 -> 452
WNUVDT 214 -> 541
Once the script completes the channels will be remapped. The script method is handy since you can re-run it any time a lineup change reverts your channels to their original values. Note that channel_map assumes you are using a cable lineup for your DTV channels. If you are using a satellite lineup you'll need to modify the script.

STEP FIVE: Profit!

If you haven't already done so, plug the IR blaster in to the back of the TiVo and orient the emitter such that it is right over the IR sensor on the DTV converter. If you shine a flashlight at the face of the DTV converter, you should be able to make out the IR sensor between the center LED and the channel buttons.

With the IR blaster in place you should be able to control the DTV box with the TiVo remote and have guide data that matches your HDTV locals. Be sure to disable auto-off on your DTT900 to prevent it from going to sleep when the TiVo may need to talk to it.

Troubleshooting

DTV converter control problems

I experienced significant interference with the stock TiVo IR blaster. By replacing the TiVo-supplied IR blaster with a stick-on IR blaster I had from an IR extender package and it worked much better. Another approach is to make an IR fort. There are some tips on doing this here.

Help, my remapped channels were reverted!

You will find that your changes are undone the next time there is a lineup change, which can occur pretty frequently with Comcast's digital lineups.

If you used the script method to remap your channels, simply re-run the channel_map script.

If you used the TiVoWebPlus ChannelMap method, you can restore your old setting by clicking the "Restore Channel Map from Saved" button in the ChannelMap TiVoWebPlus module and committing the changes to the active channel list. Alternately, if you have the output from a previous run, you can write a script to do the changes. For example, given the following output:

Applying change for WMARDT 22 (Was 210) object 29026/2545
Applying change for WMARDT3 23 (Was 204) object 29026/2542
Applying change for WBALDT 111 (Was 211) object 29026/2546
Applying change for WBALDT2 112 (Was 208) object 29026/2544
Applying change for WJZDT 131 (Was 212) object 29026/2547
Applying change for WMPTDT 221 (Was 200) object 29026/2540
Applying change for WMPTDT2 222 (Was 220) object 29026/2550
Applying change for WMPTDT3 223 (Was 201) object 29026/2541
Applying change for WBFFDT 451 (Was 213) object 29026/2548
Applying change for WBFFDT2 452 (Was 206) object 29026/2543
Applying change for WNUVDT 541 (Was 214) object 29026/2549
We can use the following bash script to make the changes using dbsetx:

#!/bin/bash

/var/hack/bin/dbsetx 29026/2545 Number 22    # WMARDT
/var/hack/bin/dbsetx 29026/2542 Number 23    # WMARDT3
/var/hack/bin/dbsetx 29026/2546 Number 111   # WBALDT
/var/hack/bin/dbsetx 29026/2544 Number 112   # WBALDT2
/var/hack/bin/dbsetx 29026/2547 Number 131   # WJZDT
/var/hack/bin/dbsetx 29026/2540 Number 221   # WMPTDT
/var/hack/bin/dbsetx 29026/2550 Number 222   # WMPTDT2
/var/hack/bin/dbsetx 29026/2541 Number 223   # WMPTDT2
/var/hack/bin/dbsetx 29026/2548 Number 451   # WBFFDT
/var/hack/bin/dbsetx 29026/2543 Number 452   # WBFFDT2
/var/hack/bin/dbsetx 29026/2549 Number 541   # WNUVDT

I have hacked up a simple program that watches the tvlog file and will run /var/hack/bin/channel_map when the logs indicate that a lineup change has occurred. A Series 1 binary is also available. The program runs as a daemon so you should run it from your rc.author file.

Alternately, if you have the cron daemon installed on your TiVo, you can run the script every half hour, before programs are generally scheduled using the following crontab line:

24,54 * * * * /var/hack/bin/channel_map >/dev/null 2>&1
NOTE: There is a bug in the TiVo 3.1 software that will cause the event switcher to become unresponsive after a number of script runs. As a workaround, you can install Martijn Van Oosterhout's evtswitchfix.

Further Reading

There is a wealth of great information in the OzTiVo wiki as well as the NZTiVo site.

If you need to add custom IR codes to control your DTV converter box, you can use the ozTiVo IrSliceCreator to generate codes for your DTV converter. They also have a page with more details about this.