The RDS function used mostly in car stereos has been around for years to convey information digitally alongside with the broadcast. Information such as the name of the broadcasting station, the program, or current song, are only a few things that can be broadcast with RDS.

The RDS project described below, explains how I built a "homemade" RDS decoder in two different flavours: pc-based and microcontroller based. Credit goes naturally to Andreas Nilsson for writing the the microcontroller code. And on the pc based section (Approach 1), I should thank for having their software freely available on their website. Hope you get inspired and give it a try too! Some experience in electronics is not only recommended, but necessary if you don't want to blow up your stereo... Below you can see the RDS decoder under its development stage on a "project board". Actually only the right side of the board (including the LCD) belongs to the decoder, the messy stuff with all the cables belongs to another project. =) Note also the stereo on the left used to extract the RDS stream from.

  1. FM Mono (cheap, one speaker receiver, can NOT be used here)
  2. FM Stereo (This is the most common, and its the one used)
  3. FM Stereo with RDS (not much point in using a receiver already capable of RDS reception)

The RDS stream is found 57 kHz above the carrier wave, together with the multiplexed stereo signal and the mono signal. One of RDS decoder chip tasks is to filter out this incoming signal found around 57 kHz. The question one would ask himself is "So, where do I find this multiplexed signal, in a given radio receiver?". One location is at the input of FM-stereo demux chip, (FM decoder). "So how do I find the FM-demux chip?". Well...there are many manufacturers that make such chips, and sometimes even two identical chips can have different chip-numbers. I started by opening the radio and examining the radio section and noted down all the chip numbers that I could find. The radio is manufactured by Hitachi, so almost all the chips were their own (HA). It is very likely that you will find the same chips in other brands too. This is what I got: HA11226, HA11227, HA12413 etc... Then I used search engines on the internet to get a description of the chips from these chip-numbers. This is what some of the chips turned out to be:

HA11226 Dolby Noise Reduction
HA11227 FM Stereo MPX Decoder

The MPX Decoder chip is the one we are going to use! The next step is to try to locate the input pin on this chip. For this, there is nothing better than the chip manufacturer's product sheet, found just about always in PDF format. I tried searching in Google, with no luck. After a while I found a product sheet of an equivalent chip, which means that the only thing that differs from my chip is the chip-number. According to the product sheet the input pin (MPX IN) is pin number 2. Another pin you will need is the "ground" (GND) found just about anywhere in the radio. But I chose to solder my cable on pin number 7. These two cables were then made available outside of the radio through a small hole. You may also chose to incorporate the whole decoder inside the radio, if there is enough space.

RDS Decoder Chips

To make RDS decoding fit on a project board, you need some help with the most difficult part, namely: the actual filtering of the RDS data stream from the radio. Thanks to Philips and SGS-Thompson, there are two chips that do the job!

The two chips above are the most common. Personally I use the one from Philips. I will admit that the chips can be hard to get hold of. They cost roughly 5 euros each. But beware that depending on were you call, you will be "forced" to buy 1000 or more units or nothing at all. If you dont have any friend in the electronics business, you may try opening an old, broken?, RDS receiver locate the chip, and use that instead. These chips are basically the same in the sense that they receive a multiplexed signal as an input, process the RDS stream, and give the RDS DATA and RDS CLOCK as outputs on two pins. This is raw data. It still needs a lot of manipulation / processing to make any use of it. From a techies point of view this is were the actual decoding will take place. The RDS protocol will have to be studied, and from there write a program (easier) or build hardware (harder) that decodes the information from this raw data stream into an understandable form. The decoder chip just needs a few external components to work. I decided to use SMD components on a small PCB (see below) and have a small RDS decoder unit which is easily transferable between projects.

Approach 1 - PC based Decoder

If you want to make RDS decoding as simple as it gets, this is the approach for you, and it should satisfy most techies =) There is a windows based RDS decoding program out there provided by Esslinger. They recently released a second version of their program which is very good. If you read the documentation of the program you will see that all you need to do, is connect the RDS DATA and RDS CLOCK pins through a simple interface to the PC's COM port. This is described in detail in the software documentation. Instead of the classi MAX232 voltage converter they advise you to use a cheaper TTL IC, the 74LS14. So...time to connect our device to the computers COM port and start the RDS decoding program by Esslinger.

Approach 2 - MicroController based Decoder

Even a microcontroller is basically a small PC running a program. The advantage here of course is that its totally portable (using a battery) and its independent of a PC. On the other hand its a lot harder than the previous approach as can be seen from the picture below. The processing of raw RDS data will in this approach be handled by the Atmel's AT90S2313 microcontroller which is the "heart" of this project. The source code that does this processing was written by Andreas Nilsson. For copyright reasons only the machine code (HEX) file is made available used to program the device. The file will work for the above setup and display RDS info on a 4x20 line LCD. It will display PS (Program Service Name) on the top line and RT (Radio Text) on the remaining 3 lines. A 2x16 display could also be used, but then most of the RT will not be visible (if used at all by the radio station). The microcontroller runs at the incredible speed of 8MHz! Jokes apart...although it sounds slow, believe me that for such relatively "simple" tasks, eight million operations per second are more than enough.

The second chip is a very common MAX232 (or ICL232) which converts TTL levels (0 and 5V) to voltage levels handled by the COM port (-9V and 9V). An RDS broadcast used to its full potential contains so much information that it can not be displayed on a simple small LCD. Therefore correctly processed data is sent to the PC through this chip so that it can be further monitored on a computer screen with the appropriate software.

HEX file for Atmel 2313 / RDS Decoder written by Andreas Nilsson for his RDS decoder here. From what I understand the 2313 AVR chip has been discontinued. The code must probably recompiled for a new chip. Since the last time I dealt with this project was in 2002, I dont have any more info on this matter. DOS program for RS232 interface to microcontroller for RDS monitoring by Andreas Nilsson The trim-resistor is used to regulate the contrast of the display. You can even hook up a PLED display with green letters and black background, instead of the other way around with common LCDs. Be careful not to fry it with excessive current on the "backlight". I send around 20mA through it. Below is a screendump of a "quick n dirty" program I wrote to analyze the RDS TMC channel. You can see that most of the messages concern "roadworks".


DOS prog for monitoring RDS by Andreas Nilsson
Original RDS decoder files for AT90S2313 by Andreas Nilsson. Files only (no project) c_rds_original.rar
Ported version to AVR-GCC. MINI (ps) (NO uart, rt) FLASH=100%
ICC AVR V6 project files, source and HEX. FULL (uart, ps, rt) RDS_icc6.rar
ICC AVR V7 project files, source and HEX (FLASH 95%) FULL (uart, ps, rt) 4x20 LCD RDS_icc7.rar