Description: 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.
Based on 3 ratings:
1 of 1 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.
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.”