Software apps and online services
Update Mar/2021: this is version 2.5 of my DSP Project Radio Receiver with several improvements in software and hardware. Now comes with new features like RDS for FM, non-volatile memory to store the frequency / band even when the Arduino is turned off, MW band for Europe with 9kHz spacing, direct access button for the FM band, button with UP / DOWN to select the LW/MW/SW bands, buttons with dual function (short / long press), reorganization of the screen layout, less noise at reception and easier to use the receiver. It also includes the design and Gerber files of a breakout PCB for using the IC Si4732-A10. Try the project and check it out!
- Stereo FM 64-108MHz with RDS (Radio Data System) with station ID and radio text auto-scrow information on the screen.
- AM MW band for Europe (9kHz spacing) and MW band for USA (10kHz spacing).
- LW band and 14 Shortwave bands, covering from 150kHz to 30MHz, including CB band.
- Non volatile memory to store the actual frequency, band and screen theme on Arduino’s EEPROM. The data is kept even if the arduino is turned off.
- Selectable AM bandwidth filters (6, 4, 3, 2.5, 2, 1.8, 1kHz) and FM bandwidth filters (Aut, 110, 84, 60, 40kHz).
- Direct access to the FM band.
- Atractive color screen look with numbers in 7 segmens style, easy to read.
- Dual bargraph meters for Signal to Noise Meter and Signal Strength Meter plus ‘S’ values.
- Band name indication (m) on the screen.
- Selectable tuning steps of 1, 5, 9, 10kHz and the color scheme of the display (2 schemes).
- Uses the Si4732-A10 (included a breakout PCB project) or the PL102BA-S V2 modules.
- Controlled by an Arduino Nano + ST7735 TFT 1.8in display, 4 push-buttons, a SPDT switch and a rotary encoder.
- Uses the high performance Michael J. Kennedy's Si4735-I2C-R4 library.
- Uses few componets and delivery surprisingly good performance.
The Si473x is a complete receiver with DSP (digital signal processing) technology, the same used in SDR receivers.
The Arduino controls and 'talks' with the Si473x IC via the I2C interface, writing data in it and reading data from it. The graphic interface is made up of a 1.8in ST7735 color TFT display, which comunicates via SPI data interface. Inside the Si473x IC, the radio frequency signal is digitalyzed thru A/D converter and processed by the DSP and then converted to audio thru D/A converter and sent to the output.
An external audio amplifier must be used to amplify the sound of this radio, what can be a 'JBL' style amp box or any other audio amp that has a line input. See below a complete DIY LM386 AMP project (schematics and PCB) that works very well on this project.
Wiring diagram (schematics):
There are two electrical diagrams, one for use with the PL102BA-S V2 module and the other for use with the Si4732-A10 breakout PCB.
The antenna input circuit (RF front end) is simplistic, I did not use an RF pre-amp (LNA) or even more elaborate LPF / BPF filters and even so it is possible to get good radio receptions.
The S1 switch is used to select the antenna for Shortwave (SW) or Medium Wave / Long Wave (MW / LW). When switch S1 is in the MW position, the external shortwave antenna must be disconnected to obtain a cleaner reception, as in this case the ferrite rod plays the role of an antenna.
The D1 and D2 (dual diodes BAV199) can be replaced by 2 x 1N4148 or even ommited for simplification, I do not use them on my receiver, but it is a protection against electricity static discharges (ESD).
The arduino is powered by 7.8V (2x18650 batteries) applied to the VIN input. The arduino also provides stabilized voltages of 5V to supply the TFT display and 3.3V to supply the Si4732 (or PLB102).
A point that always raises doubts and there is a lot of information without practical basis and tests is about the difference in logic levels between the Arduino 5V and the IC Si473x.
As the Arduino has 5V logic levels on the I2C bus and the Si473x uses 3.3V, if necessary, a 5V to 3.3V Logic Level Converter Bi-Directional can be used on the I2C SCL / SDA bus and RESET line, between the Arduino and Si473x.
However, I do not use the Logic Level Converter in my project, I do use resistors, and in various pratical experiences (that I have been doing for more than 2 years) I never had any problem, I never had any Si4730/32/35 devices damaged, not even I2C communication issue and I never noticed any instability. In practice there is a resistive divider formed by the 1k resistor and the pullup resistor connected to 3.3V, so the logic level High never exceeds 3.3V (measured) on the Si473x pins. Without the Logic Level Converter you gain circuit simplification.
Was added some ceramic decoupling caps to display wires to reduce the SPI irradiation of noise.
The Arduino's EEPROM memory can be rewritten up to 100,000 times without fail, according to technical paper (despite that in practical tests it reached more than 1 million of cycles before failing). To save the life time of the EEPROM, the data is saved once only when the PB2 push botton (SAVE) is pressed, so the memory will have a very long life, it can be said that it will never fail in normal use in this way.
The library used to control the Si473x:
In this project I use the high performance library Si4735-I2C-R4 authored by Mr. Michael J. Kennedy, a fantastic and innovative work that was written in 2012. It is the best existing library for Si473x, very stable, fast, friendly and has the professional level RDS decoder, much better than the libraries found on the internet today (btw which were based on Kennedy's work). I just made some updates to it to include some commands and configuration of the display pins.
Pictures of the circuit I set up:
Notes on the DSP radio chip (IC) used here:
1-The radio module used here was the PL102BA-S V2 (it has the IC Si4730-D60). Only the module that comes with the Si4730-D60 IC with 3060 marking will receive shortwave bands and RDS on FM. Be aware that the module maked as NE928-10A V.01 will work only in AM/FM (not SW nor RDS). I ordered this module via Aliexpress. Below is the pinout and pictures of a PL102BA-S V2:
2-Si4732-A10 IC: The PLB102BA module became hard to find, so I decided to design a PCB breakout to use the Si4732-A10 IC (SOP16) which is easier to solder on the board, will receive shortwave bands and RDS on FM and is available on Aliexpress, Mouser, etc. This breakout board can be used in other radio projects with Si473x, including other libraries available on the internet.
Below are: the PCB design, schematics, pinout and BOM.
3-Additional comments: there are reports from users that RDS and Shortwave also worked with the Si4730-D60 and Si4734-D60 chips (with SSOP-24 package), these devices have the advantage of being cheaper, however I didn't have the opportunity to test them. Also remembering that the Si4735-D60 SSOP-24 can be used as the RDS / SW will work for sure.
- Open the scketch on Arduino IDE, install the libraries located in "install these libraries" folder and choose the correct I2C address for the Si4732 (0x11 or 0x63). The module PL102BA-S V2 uses address 0x63.
- Compile the sketch and then load it to the Arduino Nano, Uno or Pro Mini.
- Follow the schematics to wire the Arduino, display, PLB102 module or Si4732, rotary encoder, push bottons, etc.
- The first time to power up the radio circuit, the initial values must be loaded into the EEPROM memory, with the following procedure: while pressing and holding the push button PB2, turn on the Arduino power and wait for the screen shows the message “DEFAULT VALUES”, now it is ready to work.
- There are 4 push bottons and they have 2 functions each: short and long press (except PB3). Also there is one switch SPDT (S1).
- Push botton PB1: to select the AM on and AM Band browser Up/Down selector: short press AM initiation coming from FM and then UP band, long press DOWN band (14 bands).
- Push botton PB2: to ‘SAVE’* the current frequency, band, color theme to EEPROM and change the Tuning Steps (1, 5, 9, 10kHz): short press ‘SAVE’*, long press change Tstep. *Even if the arduino power is turned off and the power supply is removed, the information will be kept stored in the arduino's EEPROM memory and retrieved the moment it is turned on again.
- Push botton PB3: to change bandwidth IF Filter for AM (6, 4, 3, 2.5, 2, 1.8, 1kHz) and FM (Aut, 110, 84, 60, 40kHz).
- Push botton PB4: to select the FM on, RDS program type (station ID / radio text / auto scrow radio text) and color theme: short press FM initiation coming from AM and then RDS type change, long press will switch color theme from blue to black and vice versa.
- Rotate the rotary encoder to tune up or down the frequency to search the stations.
- The S1 switch is used to select the antenna for Shortwave (SW) or Medium Wave / Long Wave (MW / LW). When switch S1 is in the MW position, the external shortwave antenna must be disconnected to obtain a cleaner reception, as in this case the ferrite rod plays the role of an antenna.
About the antenna to be used:
- For Shortwave reception use a 'longwire antenna', that is made of 7m long of piece of electric cable stretched outside or inside the house, at a height of at least 3 meters from the floor. Other types of antennas can also be used, such as the MiniWhip and the Magnetic Loop.
- For good reception in MW and LW band should be used a ferrite rod antenna with 12cm x 1cm. The longer the ferrite rod is, the better is the reception.
- For the FM band, a whip or wire with 70cm will be sufficient. For DX reception, a commercial external VHF/FM antenna can be used.
Some tips to improve radio reception:
- Always supply the circuit with batteries. Avoid using switched power supply or DC / DC step down converter to power the this radio as these electronic power supply work with an oscillator of about 150kHz and this electromagnetic signal will interfere or even kill radio reception. Some power banks (battery modules) uses DC / DC step down converters.
- Move away or turn off the electronic lamps that are close to the radio receiver, because these lamps also generate a lot of interference. Preferably use lamps with LED technology.
- Avoid using class D audio amplifiers (PWM), as these also work with high frequency and will disturb and generate noise in the radio reception.
- Shortwave and Mediumwave reception is highly dependent on the propagation of radio waves. There are certain times that are better and others are worse for reception. Usually in the late afternoon and at night, these are the best times for good reception of distant radio stations.
Final considerations about digital noise / interference generated by Arduino:
Every digital circuit with microcontroller and the I2C/SPI data/clock bus traffic generates a certain level of electromagnetic noise that interferes and disturbs the radio reception, as it has harmonics that spread to various frequencies.
One way to try to reduce this problem is to place an insulated metallic plate (steel, aluminum or copper) below the breadboard and connected to the GND (negative battery pole) of the circuit or to assemble the entire circuit inside a metal box properly connected to the GND the circuit.
You must also use wires as short as possible in the connections between the TFT display and the Arduino. You should also distance the DSP Radio chip from the Arduino as much as possible, the ideal is to place the DSP Radio chip and the Arduino + Display in compartments separated by a grounded metal plate.
A well-planned printed circuit board (PCB) with separation of the digital part from the analog RF part and with ground plane will help a lot in noise reduction.
Good luck in assemblies! J. CesarSound.
- This project is provided "AS IS", without any warranty of any kind, express or implied, including but not limited to the warranties of mechantability, fitness for a particular purpose and noninfringement.
- This is a free project. The author of this project reserves the right to change, modify or do corrections to the hardware and/or software at any time without notice or obligation to persons who already assembled it.