... Mek's creations and more

FM receiver with TV tuner with digital tuning

The article starts below the videos.

For a longer time already, when disassembling old TVs for parts, I was thinking if the tuner could be reused somehow. I searched on the internet and found out that some people had variable success, and there was even a diploma thesis about this topic. However, there is little to no information on the internet, or only scarce info here and there, but no complete write-up of practical usability. That's why this article was written.

In short, there are two kinds of tuners, divided by tuning type

  • analog - 0-33V is applied on one of the tuner pins, this is used to feed the internal varicaps
  • digital - or PLL tuners - the frequency is told to the tuner by I2C bus

This article covers digital tuners. The one I have is TUNER WSP (PLL) TAEA-G041D 30048475 609A0611. I found out that it is the same tuner (or replacement) as for example

  • KS-H-148E
  • UV1316
  • VESTEL 30048475

These tuners can tune frequencies from 50 MHz up to 850 MHz (rougly), which also covers the FM broadcast band. The receiver I am describing on this page, is limited to 87.5 MHz - 108 MHz (CCIR), because there is no FM broadcast on the other bands, and also different demodulators and filters would be needed for other modulations. However, the band can be easily adjusted to include the OIRT band, for example, by editing the ATmega88 code.

Pinout is standard among the manufacturers.

  1. AGC - this pin must have input from 0 to 4V (by potentiometer). Some stations are best received while AGC voltage is lower, other stations require full 4V.
  2. VT - tuning voltage output, not connected
  3. ADS - designation of tuner's I2C address, the address will be C2 if this pin is left unconnected
  4. SCL - I2C clock pin
  5. SDA - I2C data pin
  6. NC - not connected
  7. +5V - supply voltage
  8. ADC - not connected
  9. +33V - supply voltage (can be 29-35V)
  10. IF2 - symmetrical IF output, pin 2
  11. IF1 - symmetrical IF output, pin 1

Some ICs in my project require 12V, so this voltage is used as supply voltage of the whole project. 5V is made from this voltage simply by 7805 regulator. And 33V is made using a DC converter with MC34063 (in reality it's around 42V, stabilized to 33V). Current consumption of whole project is around 200 mA.

Some TV tuners have symmetrical IF output (two IF pins), some have asymmetrical IF output (only 1 pin), mine has two. IF frequency is from 33 to 40 MHz. For further processing, IF frequency of 10.7 MHz was needed. That's why I used NE612 that is specially designed for this. It takes an input, mixes it with the frequency of local oscillator, and outputs a difference of these frequencies. I used a 48 MHz crystal in local oscillator, because 48 - 10.7 = 37.3 MHz. Wiring of NE612 is according to the datasheet, except the input. There are some inductors in the datasheet, which are not explained at all. But I found out that it works also when the input is only connected directly through a 1 nF capacitor.

10.7 MHz output from NE612 is passed through a 10.7 MHz ceramic filter, and enters IF amplifier and FM demodulator in one chip, TBA120U, output from which is very weak, so I passed it into a simple amplifier with two transistors. Also different ICs can be used, for example A220D, A223D, K174УP1, or U829B, which do not require the amplifier, but then the schematic and PCB would have to be altered. But beware - TBA120T will not work.

The tuner is controlled by the Atmel ATmega88A microcontroller. It also cares about displaying the frequency, receiving IR codes, remembering saved frequencies, and other functions. The microcontroller is clocked by an 8 MHz crystal. I2C bus is abstracted by the i2cmaster library.

Fuses must be set like this: Extended: 0xF9, High: 0xD7, Low: 0xFF.

The receiver is controlled by 5 buttons:

  • F: +0,05 MHz
  • R: -0,05 MHz
  • FF: +0,5 MHz
  • RR: -0,5 MHz
  • PROGRAM: remembers current frequency into one of the 10 memory slots. After pressing this button, "P?" appears, and it is possible to return back by pressing this button again, or remember current frequency by pressing one of the pre-programmed buttons on remote control.

The receiver can be used with any remote control. I used a library named IRMP and on first use, it is necessary to pre-program (learn) the buttons of remote control we are going to use.

Buttons F and R must be pressed simultaneously to enter the "IR code learning" mode. "P0?" is shown on the display, and at this point we have to press the button "0" on remote control that we will use to switch to frequency saved at zero-th position. After that, more IR codes are requested, up to P9. At the end, IR codes for F, FF, R and RR are requested. At this point, pre-programming of IR remote is done. We can tune in to some station, press button PROGRAM, and after "P?" is shown, we press one of the buttons P0 to P9 that we have pre-programmed before. This way, we can save stations for all 10 memory slots.

IR sensor can be of type TSOP1736, TSOP2236 or any equivalent salvaged from old TV.

If you decide to build this project, the steps of bringing it to life are the following:

  1. Check the PCB if there are no unintended shorts
  2. Instead of ICs use DIP housings, connect the AGC potentiometer, do not solder the tuner yet, do not connect the display and IR sensor yet
  3. Connect power source (12V) and measure:
    • voltage on pin 7 of tuner (not soldered/connected yet) must be 5V
    • voltage on pin 1 of tuner must be from 0 to 4V and must change when turning the AGC potentiometer (try both end positions)
    • voltage between pins 4 and 6 of housing of MC34063 must be 12V
    • voltage between pins 3 and 8 of housing of NE612 must be 5V
    • voltage between pins 1/3/12 and 11 of housing of TBA120 must be 12V
    • voltage between pins 7/20 and 8/22 of housing of ATmega88A must be 5V
  4. Disconnect power source and seat MC34063 into its housing
  5. Connect power source (12V)
  6. Measure voltage on pin 9 of tuner, it must be around 33V
  7. Disconnect power source and seat ATmega88A, connect the display and IR sensor (beware of cable orientation)
  8. Connect power source (12V) and check the display. It should show "87.50".
  9. Disconnect power source and solder the tuner
  10. Connect an antenna to tuner
  11. Connect power source (12V) and check current, should be at most 200 mA
  12. Disconnect power source and seat NE612 a TBA120 into their housings
  13. Connect headphones or audio amplifier in the output terminal block
  14. Connect power source (12V) and check current, should be at most 250 mA, most possibly around 200 mA
  15. You should hear white noise from the headphones or speakers. If not, try increasing volume. If still no noise, try adjusting the coil near TBA120. If still nothing, probably wrong inductor and capacitor are used for the TBA120 phasing LC circuit. Try changing them for values that should resonate near 10.7 MHz
  16. Tune on a frequency that you know a strong station broadcasts on
  17. Adjust the inductor near TBA120 into position with strongest volume and lowest distortion.

By the way, at every point, current consumption should not be more than 250 mA (use an adjustable lab power supply with voltage and current indication).

At this point, initial setup of the receiver is done. To calculate correct values of the LC phasing circuit, use this web page. An LC meter is very useful, and it should measure also low inductances below 1 uH, and also Q factor of inductors. The inductor you use should have Q around 40, but it also worked for me with inductor of Q = 2. You can either use a ready-made inductor, or salvage it from old TV / radio, where there should be the inductor with appropriate Q. There is also the option of winding your own (and use only the core from another inductor), but to achieve good Q, a hf cable should be used, that is not sold by anyone. Since I had a suitable inductor salvaged from old TV, I didn't try this.

If something goes wrong, an SDR receiver (that is connected to a PC via USB) is a really great companion. Of course, it must tune down to 0 Hz, or use an up-converter. With an SDR, you can check the IF output of the tuner (around 38 MHz even without an up-converter), and the 10.7 MHz IF also, directly on your computer screen. On the 10.7 MHz frequency you can see the tuned station, which moves left or right when you tune, fading away as it is filtered by the ceramic filter. But beware - you must connect the signal via a 1nF capacitor to the SDR antenna input.

In the zip file you can download on this page, you will find:

  • datasheets of PLL tuners
  • KiCad project with schematic and PCB
  • Atmel Studio project with software for ATmega88A

Quality of reception is very good, and most importantly - the whole project contains only one variable LC circuit. All the "heavy lifting" is done by the TV tuner, which, as an industrial product, is 100% correctly tuned.

If you have some question or problem, don't hesitate to ask. You can use the comments form on this page.

I learned so much and really enjoyed experimenting while building this project. And, there comes the great aspect - I gave new life to a component from old TV that would otherwise end on a junkyard.

Update 9th December 2019: By fiddling with various other radios, I found out that the TBA120U has an unregulated AF output on pin 12, whereas a regulated AF output on pin 8. Originally, pin 8 was used in this construction, and pin 12 was connected to GND. This is now fixed both in the schematic and in the KiCad project in the package for download. Also I removed the deemphasis capacitor on the AF output because its presence caused that eventually connected stereo-decoder was not working.

Comments (17)

:} lol :D =) :o) :B 8-D :P :-)) :-< ;) :-/ :( :.( O.o ;o) :-* 8-| :-| 8)
Mek   19th February 2023 9:01 am
Hi Rudik,
try this:
For others, just open the project in Microchip Studio, change target AVR to atmega328p, then change constants BASE_FREQ and BASE_FREQ_MHZ to your liking, and hit Build. The resulting hex will be in the Debug subfolder.
I just did this and the hex file above is the result. Not tested, so without guarantee. Hopefully it will work. Have fun :)
Rudik   19th February 2023 5:35 am
Hi Mek, nice project for i looking for.
Could you help me to provide hex file for 66 - 108MHz, ported for ATmega8PU or Atmega328PU? thank you.
Boubik   18th August 2022 7:09 pm
Dakujem velmi si mi pomohol
Mek   18th August 2022 6:55 pm
108 MHz - 87,5 MHz = 20,5 MHz, to zodpoveda rozsahu hodnot 2905 - 2495 = 410. Teda 1 Mhz zodpoveda hodnote 410 / 20,5 = 20.
Chceme ziskat hodnotu pre 50 Mhz, co je o 37,5 MHz menej, ako 87,5 MHz.
37,5 MHz * 20 = 750.
Teda 50 MHz by malo zodpovedat hodnote 2495 - 750 = 1745.
A 150 MHz by malo zodpovedat hodnote 2905 + (150 - 108) * 20 = 3745.
Ak som sa teda nepomylil :)
Boubik   18th August 2022 5:12 pm
tak skusal som menit tie hodnoty na výpočet frekvencie podla trojclenky ale nesedí mi to mohol by si mi prosim ta vysvetlit ako to mám vypocitat nesedi mi to neviem ako na to
Mek   18th August 2022 3:50 pm
Ak to mas na breadboarde, komunikacia cez I2C pojde pomalsie, nez ked to das na plosny spoj... teda aspon tak to bolo v mojom pripade. Tipujem, ze to bolo kvoli slabsiemu kontaktu, neziaducim kapacitam, ruseniu a tak.
Boubik   18th August 2022 3:19 pm
Tak rozsah frekvencií sa mi podarilo uspešne zmeniť. Ešte by som chcel zistit ako sa dá zmeniť rýchlosť prepínania frekvencie tunera. Na môj vkus sa to prepína dosť pomaly
Mek   17th August 2022 9:42 pm
Boubik: v subore main.c su tri riadky:
#define BASE_FREQ 2495 // 87.50 MHz
#define BASE_FREQ_MHZ 8750 // 87.50 MHz
#define MAX_FREQ 2905 // 108.00 MHz
Z nich si uz isto dokazes vypocitat, ake hodnoty budu zodpovedat 50 a 150 MHz :)
Hex subor ziskas tak, ze skompilujes ten projekt so zdrojakmi v programe Microchip Studio (po starom sa to volalo Atmel Studio). Hex subor vznikne pod adresarom Debug v adresari projektu.
Boubik   17th August 2022 9:37 pm
Ako mám upraviť ten projekt keď chcem zmeniť rozsah frekvencií napríklad od 50MHz do 150MHz? Ako získam Hex súbor z toho projektu ?
marcos   6th April 2022 3:30 pm
muy buen proyecto, gracias por compartir. saludos desde argentina.
Leon de Marquay   2nd November 2020 8:15 am
Excellent montage, bien documenté...
Mek   7th October 2020 2:05 pm
Hi Krishchan,
if your tuner has the same pinout as described in this article, then I think it is 95% chance that it will work. Otherwise yes, you will have to study the datasheet.
Krishchan   7th October 2020 2:01 pm
By the way very informative article. I would like to know which synthesized tuner IC is used in your tuner. Is it a Texas instruments one?
Well I have a tuner with SN761678 from Texas instruments, and i would like to know whether the same I2C commands will work on my tuner too, Otherwise I would have to study the whole datasheet and all the commands with it.
Regards.. :)
Mek   22nd April 2020 4:39 pm
Hello Ujo,
the code is downloadable right here on this page, just click the Download button.
Ujo   22nd April 2020 7:54 am
Can you please send me that whole code to me please, here is my email
Mek   16th October 2019 10:01 pm
for other readers, I ran your post throught Google Translate:
Very good project and design, I made a spectrum analyzer 30 years ago with a television and used something similar to this project, all analogue, use a common tuner with varicap and voltage tuning, for the frequency use a frequency converter voltage, voltimetro lcd indicator, now I'm going to see if I try this project that has more accuracy in the tuning and more exact, without frequency shift to be pll,
My question from what I see, in one of the tuners I decided that I decided to replace a UV1316, so the PLL of that tuner is TSA5511-12, so the software would not go with other digital tuners, it is like this or you can use another soft to use another tuner, regards

My answer:
It does not have to be UV1316. Most of the tuners are compatible with UV1316, you can be 99% sure it is compatible if your tuner has the same pinout. You can confirm in the datasheet of your tuner. In the datasheet you can find also the I2C commands your tuner supports, and if it uses address C2 by default as UV1316 does, etc.
Yes, PLL tuners are much better than tuners with analog tuning, as the frequency doesn't drift.
I hope your project will be a successful one :)   16th October 2019 9:55 pm
Muy buen proyecto y diseño, yo me hice un analizador de espectro hace 30 años con un televisor y use algo parecido a lo de este proyecto, todo analogo, use un sintonizador comun con varicap y sintonia por voltaje , para la frecuencia use un convertidor frecuencia tension, indicador voltimetro lcd, ahora voy a ver si pruebo con este proyecto que tiene mas exactitud en la sintoniz y mas exacto, sin corrimiento de frecuencia al ser pll,
Mi pregunta por lo que veo , en uno de los sintonizador decis que decis como reemplazo un UV1316 , asi que el PLL de ese sintonizador son TSA5511-12, asi que el soft no andaria con otros sintonizadores digitales, es asi o se puede usar otro soft para usar otro sintonizador , saludos