This is an evaluation board for the Silicon Laboratories Si4703 FM tuner chip. Beyond being a simple FM radio, the Si4703 is also capable of detecting and processing both Radio Data Service (RDS) and Radio Broadcast Data Service (RBDS) information. The Si4703 even does a very good job of filtering and carrier detection. It also enables data such as the station ID and song name to be displayed to the user.
Using this board we are able to pick up multiple stations just as well as with a standard FM radio. The board breaks out all major pins and makes it easy to incorporate this great chip into your next radio project. Also, by plugging headphones into the 3.5mm audio jack, you effectively use the cable in your headphones as an antenna! Therefore, this board does not require an external antenna if using headphones or a 3.5mm audio cable longer than 3 feet.
This skill defines how difficult the soldering is on a particular product. It might be a couple simple solder joints, or require special reflow tools.
Skill Level: Noob - Some basic soldering is required, but it is limited to a just a few pins, basic through-hole soldering, and couple (if any) polarized components. A basic soldering iron is all you should need.
See all skill levels
If a board needs code or communicates somehow, you're going to need to know how to program or interface with it. The programming skill is all about communication and code.
Skill Level: Competent - The toolchain for programming is a bit more complex and will examples may not be explicitly provided for you. You will be required to have a fundamental knowledge of programming and be required to provide your own code. You may need to modify existing libraries or code to work with your specific hardware. Sensor and hardware interfaces will be SPI or I2C.
See all skill levels
If it requires power, you need to know how much, what all the pins do, and how to hook it up. You may need to reference datasheets, schematics, and know the ins and outs of electronics.
Skill Level: Rookie - You may be required to know a bit more about the component, such as orientation, or how to hook it up, in addition to power requirements. You will need to understand polarized components.
See all skill levels
We welcome your comments and suggestions below. However, if you are looking for solutions to technical questions please see our Technical Assistance page.
Based on 3 ratings:
3 of 3 found this helpful:
The breakout is a good example of a finished circuit that supports all functions of the Si4703, and for a high-level Maker like me, who doesn't mind stringing together "building blocks" to make a functional device I can use immediately, this is much appreciated.
What I was greatly disappointed with was the Arduino library for it. First of all, the library you link to doesn't even work, and was written back when it was Wire.receive and Wire.send. I don't remember how now, but I found the right library for it, but it seems to have been written in one shot in a weekend in 2011 sometime, and abandoned, never again updated. A lot of functionality is missing from this library, including world/Japan FM band support, RSSI data, the Stereo bit, the stereo/mono blend parameters, and so on.
I understand there's a desire to leave some exercises for the hacker, but I'm also a customer, and I don't know C. I've learned more C in the last two weeks since receiving this board than I ever knew, but even when I try to hack in support in the .h file for, say, the BAND bytes (under Register 0x05 - SYSCONFIG2) - static const uint16_t BAND1 = 7; static const uint16_t BAND0 = 6; - and then try to write to those registers in the .cpp, it doesn't work. I'm sure it's because I don't know C, but why write an incomplete driver when it would take someone with the knowledge to write the driver in the first place a couple more hours to make it complete, so that all functions can be accessed? Also, why isn't there one commit on GitHub for the library in four years? I thought hackers and makers were supposed to give back to the open-source community. I did notice some pull requests that haven't been merged.
So at the moment, the boards work fine for the functions I can actually access with the library; but I've got to be honest, the incomplete feature support is the one thing preventing me from buying more of these from you. So long as I've paid you $40 (I bought two) for the privilege of having to learn C++, there are some things I want the Si4703 to do that I'll be spending my time figuring out instead of building projects including this board.
Now, don't get me wrong, Adafruit does the same thing. The library for the complimentary Si4713 transmitter is also full of holes. I've been able to make more changes to the Si4713 library because Fried reads and writes one register at a time instead of the whole thing, which makes the code just slightly more understandable to me, but I'm still doing things like having to use BitRead() in my sketches because even if I ask for one bit in Fried's code, it returns eight, and so it's a two-step process.
I would very much appreciate proper and complete libraries for these boards. The author of the library seems to understand how to access every bit of the Si4703's registers, therefore it should be elementary for him/her to give us access to everything, since as far as I can tell all the registers are pulled and are accessible; I don't know what I'm looking for in them but he/she does.
Hello, I'm sorry to see that you have had trouble with the library. We try our best to launch a product with a complimentary resource set. However, that initial code tends to only exercise certain functions and features of the module. We love contributing as much as we can to each item, but we have over 2000 items in our catalog to keep up with. Some items will see more updates than others.
2 of 2 found this helpful:
Works like a charm, tested with both a 5V Arduino Uno (using the old BOB-08745 for non-I2C lines and the BOB-11955 for the I2C lines); and a 3.3V Arduino Pro Mini.
Needs a hack for the 5V situation due to a 10K pull-down being present on #RST (also note hilarious comment in schematic), but other than that works fine.
I wrote the library from scratch (well, from the datasheet, but you get the idea), just like I did for the Si4735 a couple years ago. One day, somebody at SparkFun will notice that there is this guy who keeps re-writing their libraries so that they're on par with the quality of the hardware product involved and maybe extend me an offer :-)
I look forward to plug my RDS parser into it (board and library) and start gathering data for an RDS-TMC -related project I've been cooking for a while.
The library (and accompanying example) is here: https://github.com/csdexter/Si4703
0 of 1 found this helpful:
It can't handle much... Burns out very easily so I'd order a few if you don't want to wait for a new one if you're on a deadline. But definitely make sure it's plugged into 3.3v and not 5v...
Sorry to hear your module burnt out. There is a good note in the QuickStart guide about this "Using a 5 Volt Arduino (like the Arduino) can ruin the radio receiver if proper care isn’t taken to shift the voltage levels down to an acceptable level. You can read this sensor interfacing tutorial to learn how to connect modules that communicate at different voltage levels."
I purchased an old radio, replaced the worn-out radio with a arduino, LCD, and this radio.
I managed to get RSD working to some extent and placed my code, a revision of the examples here, in the public space here: https://github.com/alohawild/Radio_2
Please enjoy.
This code looks very nice ( much of it is over my head though ) , thank you for sharing it with us ! Build_it_Bob
What drives the requirement for powering this eval board at 3.3v? The datasheets for both the Si4703 and TPA6111A2 indicate support for 5v power. The Si4703 datasheet says "2.7 to 5.5 V supply voltage - Integrated LDO regulator allows direct connection to battery" and the TPA6111A2 says "Fully Specified for 3.3-V and 5-V Operation". So why the multiple warnings to only use 3.3 volts to power this board?
Vio is specified for only 3.6V. On the breakout board, it's tied to Vcc with Vd and Va so all three are limited by the lowest permitted voltage, ie 3.6V for Vio. We'll have to wait for the correct schematic to see if they did the same thing on this eval board.
This thing sounds good, with earphones its pretty loud.
Does this come with an amplifier?
no, it will drive earphones (in ear type) headphones would probably be very underpowered. you need an amp for anything bigger than earphones.
I built a little FM radio using this board, a PIC24 programmed in C (from scratch), an I2C EEPROM chip, and a 2x16 LCD. It took me two days to get the power-up sequence working (including a kluge consisting of a software-generated reset), especially since the Silicon Lab documentation had critical parts in different places. But after that programming went pretty smoothly. After getting the original breadboard version working, it sounded so good that I had to put it in a case for everyday use. Power is two AA cells.
Great sound and stereo reception made it worth the effort. Also the receiver is quite good at picking up stations using the headphone cable as the antenna. It is the best sounding FM receiver I have.
Cheers, Andy N1KSN
I would like to see some updates to the library to provide some more flexibility with RDS. I've made a simple radio with an LCD button shield from Sparkfun and this FM Board however when I use RDS my code lags. I wish I knew how to manually access the board, but an updated library would help a lot of people.
If you would like to take a look at my project here is the Library and Project File (look below before downloading): http://bit.ly/1OVRkDo (there is some unimplemented code in the project just FYI)
You need an Arduino Mega 2560, the Si4703 FM Board, a potentiometer, jumper wires, 3 buttons with resistors, and the LCD Button Shield (v1)
http://bit.ly/1Os0ndc
Wire the project as follows: Radio to Arduino: 3.3v to 3.3v - Grnd to Grnd - SDIO to Digital Pin 20 - SCLK to Digital Pin 21 - Reset to Digital Pin 31
Scan Up Button to Digital Pin 22 - Scan Down Button to Digital Pin 24 - Next Preset (Los Angeles area presets) to Digital Pin 35 - Volume Potentiometer to Analog Pin 15
Here is a cleaned up version with a better serial monitor layout: http://bit.ly/1OWfZYr
Version 3.7b is here: http://bit.ly/1Ay5wiE (OUTDATED)
This has truly been my first advanced Arduino project...If anyone wants to Tweet me with questions or comments that'd be cool xD Thanks guys!
Twitter: ThisPerson64
Version 3.9b is here: http://bit.ly/1TkFXrC (OUTDATED) (This link contains a download for Arduino Mega and Arduino Uno)
Arduino Uno Setup (Pins: SeekUp - 12, SeekDown - 11, Preset Select - 3, Volume Pot - A1, Radio Reset - 2, Radio SDIO - A4, Radio SCLK - A5)
Version 4.0b is here: http://bit.ly/1SKdWZn (UPDATED) (This link contains a download for Arduino Mega and Arduino Uno)
Some changes have been made such as having the ability to input a channel into a serial interface along with presets and muting (changing the channel this way only supports North American FM channels (i.e., 93.1, 102.7, 105.3...)). Also, the back-light will automatically dim after a certain amount of time has passed; you can toggle between the back-light's default mode or being continuously on by holding the Seek Up and Seek Down buttons simultaneously. It is also easier for you to set your own presets in the code.
Could someone please tell me how to obtain the RSSI value using the si4703 and the arduino uno?
Is there an RDS library or sample code around? I don't want to re-invent the wheel.
I've got another use for this: weather radar.
Need help: Having problem with receiver sensitivity - I programmed this device to 103.5 MHz and am running an RF Signal Generator at 0dB, 1kHz tone, 50kHz deviation within 2 feet of the headphones/antenna. The signal is barely getting through but I can faintly hear the 1 kHz tone. Anyone elese have this problem and did you solve it? I may not have a bit flipped properly in the registers. New to this IC, otherwise it responds as predicted.
Just got one of these a couple of days ago, have been having some fun with it. Reception in my area using the headphone cord as antenna is rather poor though, and unfortunately it seems there is no obvious way to hook it up to an external antenna.
Just soldered 3m of bell wire to the bottom left contact on the 3.5mm jack, closest to the corner of the board. Reception is now perfect.
hello , i want to design auto tuned car radio controller using arduino pro mini and this board as fm tuner . but seems i cant hear any output from my headphone when connecting to the board . maybe because of an any error in the coding . some one can help me ?
I have been playing around with it using python on a raspberry pi, it took a while to get working. A few things that stumped me, although I don't know how relevant they are using the arduino:
First, make sure you're putting the chip into 2-wire communication mode (I assume). For me, once that is done and I activate the external oscillator (XOSCEN), there is a small crackling sound from the unit, try listening for it first. Also, I've had some problems with the headphones when they're not getting a proper connection, so wiggling them around a bit in the connector might help. If you turn off both the DMUTE and DSMUTE and with VOLUME set to 1 or higher (I find about 9-10 is maximum comfortable volume for me) you should be getting radio static in the headphones regardless of whether you're tuned to a station or not.
Lastly, the i2c read/write operations didn't work as expected, rather than choose the register, the first byte was written to register 0x02, so if the same thing occurs with the arduino, you might unwittingly mute the radio by reading the registers.
Hi, How can I wire an antenna to the board ?
"Also, by plugging headphones into the 3.5mm audio jack, you effectively use the cable in your headphones as an antenna! Therefore, this board does not require an external antenna if using headphones or a 3.5mm audio cable longer than 3 feet." just use an audio cable that's 3ft in length.
Hi,
Thanks for your reponse, what I would like to achieve is having a short audio cable (speaker in a little enclosure with the board) and having an external antenna connected to the board.
Thanks
Unfortunately there's not really a way to do this easily. But if you look at the schematic, you can see pin 2, coming off the Si4703 is for the antenna. It connects to the ground through a 1nF cap. You could tie in an antenna there most likely.
Hi,
Try it on an Arduino Nano and it ork fine but can't get it to work on MSP430 launchpad (2553). Change the pin assignment and try to add pull up resistor to no avail. Edit It was a problem in the wire library defining the I2C buffer to 16bits Regards,
There are no mounting holes, so there are few ways to mount it in an enclosure in a professional looking way.
Has anybody figured out how to get the long (64 char) RDS text field out of this? It looks like the hardware is capable of receiving it, but none of the code I have found receives anything further than the 8 char station name (and the datasheet is not clear on this).
Hey, anyone else having issues with this? I've started a (now fairly long) issue thread at GitHub: https://github.com/sparkfun/Si4703_FM_Tuner_Evaluation_Board/issues/5
Would love get some guidance!
S
I've downloaded that AN230 datasheet mentioned in the header file in the library from http://wenku.baidu.com/view/d6f0e6ee5ef7ba0d4a733b61.html. Do you guys still want it?
Thanks for the offer! We've located and posted the app note.
Here is a very basic article on how to connect and operate this device using Raspberry Pi
http://www.raspberrypi.org/phpBB3/viewtopic.php?f=41&t=28920
I guess this info would be a decision maker for Pi owners.
LE+
Does this unit absolutely need an Arduino after the station is set in the register? I'd like to set the station and then have just the board output the audio without the Arduino needing to be still attached.
EDIT: it will not remember the station after powering down. You do need an Arduino to set the station each time it is powered.
Is there any way to control the setting of the Si4703's GPIO3 (or leave it set high)? Basically, I would like to use Busmode 2 to select the appropriate interface control method.
This is a cool little board. I got it working with my Raspberry Pi using the 2-Wire (i2c) interface. Then wrote a python program to control it. Nice board and fun to tinker with.
Do you think this would receive RDS-TMC (Traffic) data?
Curious on this, is there any way to hook this up to say, a car antenna? I've always thought about making a carputer, and with the advent of the raspberry pi with a cheap display link monitor (with touch screen) to boot, it's seeming that being able to make a carputer is more viable, but I want to be able to still have regular radio as well. I also know that most fm radio receivers don't like working on the move.
Arduino Example Code - Nathan Seidle is looking for Silicon Labs AN243. I just downloaded a copy from the SiLabs web site. When will an up-to-date schematic for the Evaluation Board be available?
Thanks! We've corrected the link to the schematic and posted AN243.
Anyone know how hard/possible it would be to record the FM signal to an SD card on my arduino? I'd like to then play the recordings from the SD card on my PC. Timeshift some of my favorite radio programs, possible with arduino and this chip?
From what I can tell looking at the various datasheets, it seems it should be possible to read other RDS/RDBS data besides just the station name and the song name. For example, getting the radio text (description of radio station)?
Wrong schematic. Schematic is for the breakout board not the evaluation board!
Sorry about that. The link is correct now.