RDS FM radio

Part of a professional RDS radio project

Similar projects worth following
My employers had an FM/AM radio that lacked RDS, so I was set to work investigating how to to make a radio that would compete with our competition - a Denon TU-1500RD radio. I surveyed the cost of many off-the-shelf displays, and custom displays, and concluded that we would have to buy a great many displays to drive the price down.

However, I did enjoy investigating the RDS radio to see how it worked.

The controller was a mask-programmed and Z80 based, so there was no way to explore the firmware. The tuning was done by a LC72131, and the display controller was an LC75711NE. Both well documented. The RDS demodulator chip (SAA6569T) extracts the RDS clock and data signals from the MPX signal.

I programmed a small Atmel microcontroller to turn the RDS bitstream into hex characters and RS232 data, for easy processing by a PC.

The microcontroller does the things the PC does not have time to do, namely monitor the RDS clock and data signals.

The first step was to write some RDS decoder software code in plain C for a console application using stdio, which is much simpler than a full Windows application. This decoded the files and sent decoded information to an output file. This software worked okay. The files contain data like this:

00C201 0101FC 027671 035261
00C201 01E1E1 026173 03C2A1

The second step was to write a Windows front end which would display the decoded information. I created a dialogue based application with buttons that opened one of eight inputs. Another button starts a timer which triggers the PC to read data at a regular rate (one block every 64ms) and decode that data. If RDS data has such as the station name or radio text has been changed, that is updated in the appropriate windows.

Within the application, the software tasks are carefully sectioned. As much of the software is written in a plain C module, for ease of porting. The bits for display and supplying the raw data are machine-specific so it is okay to have these in the Windows modules.

The I/O stream is created by the windows createfile function. Not only does this create files, but also make other things look like files. My application has a button that tells the software to open a com port as an RDS data source instead of the pre-recorded files. Other devices include sockets and named pipes, so theoretically it would eventually be possible for a PC to analyse RDS data (live or recorded) from a radio on the other side of the planet.

The project came to a halt when the company laid off many people, but it was a lot of fun until then.

Toshiba TMP87CM71F datasheet.pdf

Microcontroller. Instruction set is "reminiscent" of the Z80 but the ROM is mask programmed and cannot be read without major effort. The on-chip VFD driver is not used in this radio.

Adobe Portable Document Format - 4.89 MB - 02/02/2019 at 16:04



AM/FM PLL Frequency Synthesizer. In case you want to take over the tuning.

Adobe Portable Document Format - 400.38 kB - 02/02/2019 at 16:03



Data sheet for the LC75710NE, LC75711NE, and LC75712E VFD controller chips. They differ only in the character set. LC75710NE for USA and Japan, LC75711NE and LC75712E for Europe.

Adobe Portable Document Format - 506.50 kB - 02/02/2019 at 15:01



Disassembled, with comments from what I remember. Pleased that I managed to understand the listing and largely remember what it was doing. The task is fairly simple, you should be able to port it to other micros if you wish. I only chose the AVR chip because I could program it through a printer port and 74LS245 buffer, and it had a hardware UART.

plain - 8.43 kB - 01/13/2019 at 23:47



The microcontroller code as a hex file. Most if it is blank (FF hex) leaving about 160 bytes of code

x-hex - 5.26 kB - 01/13/2019 at 20:33


View all 8 files

  • OCR parts list and controller pinout

    Keith07/07/2018 at 15:37 0 comments


    Managed to OCR the parts list, and found there are complete lists for two slightly different versions. 

    I listed them side by side in a spreadsheet and put in columns of cells to compare the two.

    This helped spot quite a few errors. For example, Google thought capital J was 3 many times.

    C126 has two entries, either an error or it is two capacitors piggy backed. I need to have a look inside my set.

    Most parts are the same, with minor variations depending on national radio standards and whether the unit has RDS or not. 

    The controller has many pins that are not used. This is good news if wishing to take over control with an alternative computer e.g. Raspberry Pi. The pushbutton switches are not a digital x-y matrix, they later a resistor chain to produce voltages that are read by ADC input of the MPU. If you want to read them, you will need to measure voltages. 

View project log

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates