The Si4702/03 integrates the complete tuner function from antenna input to stereo audio output for FM broadcast radio reception
The Si4703-C incorporates a digital processor for the European Radio Data System (RDS) and the US Radio Broadcast Data System (RBDS) including all required symbol decoding, block synchronization, error
detection, and error correction functions. RDS enables data such as station identification and song name to be displayed to the user. The Si4703-C offers a detailed RDS view and a standard view,
allowing adopters to selectively choose granularity of RDS status, data, and block errors
The Si4702/03-C19’s patented digital low-IF architecture reduces external components and eliminates the need for factory adjustments. The receive (RX) section integrates a
low noise amplifier (LNA) supporting the worldwide FM broadcast band (76 to 108 MHz). An automatic gain control (AGC) circuit controls the gain of the LNA to optimize sensitivity and rejection of strong interferers
https://www.silabs.com/Support%20Documents/TechnicalDocs/Si4702-03-C19-short.pdf
Features
- Worldwide FM band support (76–108 MHz)
- Seek tuning
- Automatic frequency control (AFC)
- Automatic gain control (AGC)
- Excellent overload immunity
- Programmable de-emphasis (50/75 µs)
- Adaptive noise suppression
Connection
- 3V of Arduino -> VCC of Si4703
- GND of Arduino -> GND of Si4703
- A5 of Arduino -> SCLK of Si4703
- A4 of Arduino -> SDIO of Si4703
- D2 of Arduino -> RST of Si4703
Code
I used the Sparkfun library at https://github.com/sparkfun/Si4703_FM_Tuner_Evaluation_Board
There is also a an excellent library which caters for a couple of FM radio ICs from https://github.com/mathertel/Radio , i tested this as well
This example is hard coded for a set frequency – 97.9 which is radio 1
[codesyntax lang=”cpp”]
#include <SparkFunSi4703.h> #include <Wire.h> int resetPin = 2; int SDIO = A4; int SCLK = A5; Si4703_Breakout radio(resetPin, SDIO, SCLK); int channel; int volume; void setup() { Serial.begin(9600); Serial.println("\n\nSi4703_Breakout Test Sketch"); radio.powerOn(); radio.setVolume(1); } void loop() { channel = 979; // BBC R1 radio.setChannel(channel); displayInfo(); } void displayInfo() { Serial.print("Channel:"); Serial.print(channel); Serial.print(" Volume:"); Serial.println(volume); }
[/codesyntax]
Links
Si4703 FM Tuner Evaluation Board Radio Tuner Board