In my everyday life I listen to the radio a lot. Some days ago, my home FM receiver din;t want to cooperate with me. It would turn on or off by it self, change the station etc. Most probably a switch contact must be dirty. I decided to take it apart and thoroughly clean it. When I tried to unscrew it, I saw that it is using safety screw and it needs a 20+ centimeter (8+ inches) screw driver. It seemed easier to me to design and make a new FM radio receiver, than go search and buy an appropriate screw driver…
I opened my drawer with the various parts from home appliances and found two digitally controlled tuners. One it was from an old TV and FM PC card, from Philips (controlled via I2C bus), and one tuner from and old home HI-FI receiver, with no markings. I decided to use the second one. The presence of TV signal to the first, discouraged me a bit.
Upon taking apart the tuner, I saw it uses two Sanyo (now ON Semi) integrated circuits. To LC72131M witch is PLL Frequency Synthesizer and the LA1837M, witch is a single chip AM/FM tuner ic. LC72131 in order to communicate with it environment, uses a Sanyo SPI like bus. Sanyo calls it CCB (Computer Control Bus). Since it resembles to an SPI bus it is really simple to be implemented in software (Bit Banging).
The problem was that the tuner was completely anonymous. No markings no nothing. It uses a 15 pin header connector, without any infos on the pins. I grubbed my multimeter and started reverse engineering the pins. After some minutes (with the help of the integrated circuits datasheet) I knew what every pin’s function is. After that it came to me the model of the HI-FI I had removed the tuner, found its schematic diagram over the internets, and confirmed my findings.
I grubbed an AVR development board (Arduino UNO), witch utilizes an ATmega328p micro (it is an overkill for this project), a 16×2 liquid crystal display and started building the circuit. I an hour or so, I had started writing the code (in plain C) in Code::Blocks. In the afternoon I had a working code capable of sending commands to the tuner and tune it in stations. Next day I had a fully functional FM radio receiver with a display for the frequency, Stereo mode, and PLL tune indicator. It is controlled by three dip switches. Two for increasing and decreasing the frequency and one for manual or automatic tuning.
All the files (photos, datasheets, schematic, code) for this project are available on my GitHub page HERE. For this implementation I have not enabled the AM capabilities of the synthesizer and the tuner, as I don;t care for AM stations. It is fairly easy though for someone to enable it. The code is well documented.
I might continue adding features. Memory storing for my favorite stations, IR control etc.