Building a Transverter From a TV Frontend

Modern TV tuners use a compact chip that integrates a VHF/UHF preamp, a Gilson mixer, a PLL oscillator and various IF amplifiers on a silicon. The commonly used TV IF at 36.15 MHz is close enough to the 10 m Amateur band so that it might be possible to re-tune the IF to let’s say 28.6 MHz. One of those examples is the MAX3543 chip from Maxim-IC. Its frequency range (47MHz to 862MHz) conveniently covers the 6m, 2m, 1.25m and 70cm Ham bands. It came to my mind that those TV tuner ICs might be used as an easy to build 70cm to 10 m linear transverter to hang on a balloon as a repeater.

Mouser Electronic sells a reasonably priced development kit for the MAX3543 that contains the whole infrastructure around the chip on a PCB. Notably the IF filter is made by a LC bandpass (not a SAW filter) which makes it easy to replace some 0402 capacitors in order to re-tune the IF to 28.6 MHz. I have simulated a replacement band pass filter with LTSpice and found the following usable values:

TransverterBPF

The PLL on the chip needs to be programmed through an I2C interface. The controller board that comes with the kit is unusable on a Linux development environment due to a proprietary USB protocol so I decided to go directly on a microcontroller. I still had a JeeNode kit lying around which was easy enough to make it a 3.3 V I2C master. I even replaced the ceramic resonator with a 8 MHz crystal and loaded the following short Arduino code on it:


/*
* MAX3543
* Simple user settings for the MAX3543 Development board transfered to the tuner through I2C
* (C) 2013 Thomas Krahn KT5TK thomas@tkrahn.com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/

#include <Wire.h>                         // I2C Master

#define MAX3543_ADDR           0x61       // 7 bit I2C address of the MAX3543
// (ignoring the r/w bit by a 1 position right shift
// because this is handeled by the Arduino library)
#define LED_PIN         13

int MAX3543_register[0x16];

void setup()
{
pinMode(LED_PIN,OUTPUT);
Blink(LED_PIN,2);                     // show it's alive
Wire.begin();                         // initialize I2C lib as the master
Init_MAX3543();                       // Setup MAX3543
delay (3000);
Blink(LED_PIN,3);
}

void loop()
{
// Re-initialize transverter periodically
delay (30000);
Init_MAX3543();

// Todo: Send some morse code id beacon

}

void Init_MAX3543()
{
// Download the MAX3543 EVKIT Software from
// http://www.maximintegrated.com/design/tools/applications/evkit-software/index.cfm?EVKit=885
// It installs fine with wine though I didn't get the USB stuff to work with Linux.
// Use the SW key 119170 unless you have your own one.
// Make all your settings in the GUI and then save them with Settings > Save > New
// The hex values of all registers are saved in the file UserSettings.ini
// Simply transfer them here:
MAX3543_register[0x00] = 0x4D; // VCO
MAX3543_register[0x01] = 0x39; // NDIV
MAX3543_register[0x02] = 0x8D; // FRAC2
MAX3543_register[0x03] = 0x0A; // FRAC1
MAX3543_register[0x04] = 0x3F; // FRAC0
MAX3543_register[0x05] = 0xD4; // MODE
MAX3543_register[0x06] = 0x00; // TFS
MAX3543_register[0x07] = 0x02; // TFP
MAX3543_register[0x08] = 0x00; // SHDN
MAX3543_register[0x09] = 0x0B; // REF CFG
MAX3543_register[0x0A] = 0x17; // VAS CFG
MAX3543_register[0x0B] = 0x43; // PWRDET CFG1
MAX3543_register[0x0C] = 0x01; // PWRDET CFG2
MAX3543_register[0x0D] = 0x00; // FLTR CF ADJ
MAX3543_register[0x0E] = 0x00; // ROM ADDR
MAX3543_register[0x0F] = 0x00; // IRHR
MAX3543_register[0x10] = 0x80; // ROM READ
MAX3543_register[0x11] = 0x77; // VAS STATUS
MAX3543_register[0x12] = 0x35; // GEN STAT
MAX3543_register[0x13] = 0x56; // BIAS ADJ
MAX3543_register[0x14] = 0x40; // TEST1
MAX3543_register[0x15] = 0x00; // ROM WRITE

Wire.beginTransmission(MAX3543_ADDR);
Wire.write(0x00); // Start register

for(int r = 0; r < 0x16; r++) // write all register parameters sucessively
{
Wire.write(MAX3543_register[r]);
}
int errorcode = Wire.endTransmission();          // Send to the slave

delay(500);

if (errorcode > 0)
{
//Serial.print(errorcode);
}
}

void Blink(byte led, byte times) // poor man's GUI
{
for (byte i=0; i< times; i++)
{
digitalWrite(led,HIGH);
delay (400);
digitalWrite(led,LOW);
delay (175);
}
}

To power the whole system up I only needed a 3.3 V LDO regulator and two pots set to 3.0 V each to supply the RFVGC and IFVGC voltages on the dev board. This already made a working transverter. I only added a HabAmp in order to improve the receive sensitivity and I may add a RF6886 PA for an increased output (in case I get that working on 28.6 MHz). The Transverter works in inverting mode. That means if you transmit LSB on 70 cms it can be heard as USB on the 10 m Band.

DSCN2659

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s