Adafruit Si4713 Library
Adafruit_Si4713.h
Go to the documentation of this file.
1 
23 #include "Arduino.h"
24 #include <Adafruit_I2CDevice.h>
25 
26 //#define SI471X_CMD_DEBUG
27 #define SI4710_ADDR0 0x11
28 #define SI4710_ADDR1 0x63
29 #define SI4710_STATUS_CTS 0x80
30 
31 /* COMMANDS */
32 #define SI4710_CMD_POWER_UP \
33  0x01
34 #define SI4710_CMD_GET_REV 0x10
36 #define SI4710_CMD_POWER_DOWN 0x11
37 #define SI4710_CMD_SET_PROPERTY 0x12
38 #define SI4710_CMD_GET_PROPERTY 0x13
39 #define SI4710_CMD_GET_INT_STATUS 0x14
40 #define SI4710_CMD_PATCH_ARGS \
41  0x15
42 #define SI4710_CMD_PATCH_DATA \
43  0x16
44 #define SI4710_CMD_TX_TUNE_FREQ 0x30
45 #define SI4710_CMD_TX_TUNE_POWER \
46  0x31
47 #define SI4710_CMD_TX_TUNE_MEASURE \
48  0x32
49 #define SI4710_CMD_TX_TUNE_STATUS \
50  0x33
51 #define SI4710_CMD_TX_ASQ_STATUS \
53  0x34
54 #define SI4710_CMD_TX_RDS_BUFF \
55  0x35
56 #define SI4710_CMD_TX_RDS_PS 0x36
58 #define SI4710_CMD_GPO_CTL 0x80
59 #define SI4710_CMD_GPO_SET 0x81
60 
61 /* Parameters */
62 #define SI4713_PROP_GPO_IEN 0x0001
63 #define SI4713_PROP_DIGITAL_INPUT_FORMAT \
64  0x0101
65 #define SI4713_PROP_DIGITAL_INPUT_SAMPLE_RATE \
66  0x0103
67 #define SI4713_PROP_REFCLK_FREQ \
69  0x0201
70 #define SI4713_PROP_REFCLK_PRESCALE \
72  0x0202
73 #define SI4713_PROP_TX_COMPONENT_ENABLE \
74  0x2100
75 #define SI4713_PROP_TX_AUDIO_DEVIATION \
77  0x2101
78 #define SI4713_PROP_TX_PILOT_DEVIATION \
80  0x2102
81 #define SI4713_PROP_TX_RDS_DEVIATION \
83  0x2103
84 #define SI4713_PROP_TX_LINE_LEVEL_INPUT_LEVEL \
86  0x2104
87 #define SI4713_PROP_TX_LINE_INPUT_MUTE \
90  0x2105
91 #define SI4713_PROP_TX_PREEMPHASIS \
93  0x2106
94 #define SI4713_PROP_TX_PILOT_FREQUENCY \
95  0x2107
96 #define SI4713_PROP_TX_ACOMP_ENABLE \
97  0x2200
98 #define SI4713_PROP_TX_ACOMP_THRESHOLD \
99  0x2201
100 #define SI4713_PROP_TX_ATTACK_TIME \
102  0x2202
103 #define SI4713_PROP_TX_RELEASE_TIME \
105  0x2203
106 #define SI4713_PROP_TX_ACOMP_GAIN \
108  0x2204
109 #define SI4713_PROP_TX_LIMITER_RELEASE_TIME \
110  0x2205
111 #define SI4713_PROP_TX_ASQ_INTERRUPT_SOURCE \
112  0x2300
113 #define SI4713_PROP_TX_ASQ_LEVEL_LOW \
115  0x2301
116 #define SI4713_PROP_TX_ASQ_DURATION_LOW \
118  0x2302
119 #define SI4713_PROP_TX_AQS_LEVEL_HIGH \
121  0x2303
122 #define SI4713_PROP_TX_AQS_DURATION_HIGH \
124  0x2304
125 #define SI4713_PROP_TX_RDS_INTERRUPT_SOURCE \
127  0x2C00
128 #define SI4713_PROP_TX_RDS_PI 0x2C01
129 #define SI4713_PROP_TX_RDS_PS_MIX \
130  0x2C02
131 #define SI4713_PROP_TX_RDS_PS_MISC \
132  0x2C03
133 #define SI4713_PROP_TX_RDS_PS_REPEAT_COUNT \
134  0x2C04
135 #define SI4713_PROP_TX_RDS_MESSAGE_COUNT \
137  0x2C05
138 #define SI4713_PROP_TX_RDS_PS_AF \
139  0x2C06
140 #define SI4713_PROP_TX_RDS_FIFO_SIZE \
144  0x2C07
145 
147 
152 public:
153  Adafruit_Si4713(int8_t rstpin = -1);
154  bool begin(uint8_t addr = SI4710_ADDR1, TwoWire *theWire = &Wire);
155  void reset();
156 
157  void powerUp();
158  // void configure();
159  uint8_t getRev();
160 
161  void tuneFM(uint16_t freqKHz);
162  uint8_t getStatus(void);
163  void readTuneStatus(void);
164  void readTuneMeasure(uint16_t freq);
165  void setTXpower(uint8_t pwr, uint8_t antcap = 0);
166  void readASQ(void);
167  void setProperty(uint16_t p, uint16_t v);
168 
169  // RDS stuff
170  void beginRDS(uint16_t programID = 0xADAF);
171  void setRDSstation(const char *s);
172  void setRDSbuffer(const char *s);
173 
174  uint16_t currFreq;
175  uint8_t currdBuV,
176  currAntCap,
178  currASQ;
179  int8_t currInLevel;
180 
181  void setGPIO(uint8_t x);
182  void setGPIOctrl(uint8_t x);
183 
184 private:
185  void sendCommand(uint8_t len);
186 
187  int8_t _rst;
188  uint8_t _i2ccommand[10]; // holds the command buffer
189  Adafruit_I2CDevice *i2c_dev = NULL;
190 };
uint8_t currAntCap
current antenna capacitor
Definition: Adafruit_Si4713.h:175
void setRDSbuffer(const char *s)
Queries the status of the RDS Group Buffer and loads new data into buffer.
Definition: Adafruit_Si4713.cpp:271
void readASQ(void)
Queries the TX status and input audio signal metrics.
Definition: Adafruit_Si4713.cpp:154
uint16_t currFreq
current frequency
Definition: Adafruit_Si4713.h:174
Adafruit_Si4713(int8_t rstpin=-1)
Instantiates a new Si4713 class.
Definition: Adafruit_Si4713.cpp:38
void setGPIOctrl(uint8_t x)
Configures GP1 / GP2 as output or Hi-Z.
Definition: Adafruit_Si4713.cpp:380
uint8_t getStatus(void)
Read interrupt status bits.
Definition: Adafruit_Si4713.cpp:304
uint8_t currNoiseLevel
current noise level
Definition: Adafruit_Si4713.h:175
void readTuneStatus(void)
Queries the status of a previously sent TX Tune Freq, TX Tune Power, or TX Tune Measure using SI4710_...
Definition: Adafruit_Si4713.cpp:169
void reset()
Resets the registers to default settings and puts chip in powerdown mode.
Definition: Adafruit_Si4713.cpp:71
uint8_t currdBuV
current BuV
Definition: Adafruit_Si4713.h:175
bool begin(uint8_t addr=SI4710_ADDR1, TwoWire *theWire=&Wire)
Setups the i2c and calls powerUp function.
Definition: Adafruit_Si4713.cpp:49
void beginRDS(uint16_t programID=0xADAF)
Begin RDS Sets properties as follows: SI4713_PROP_TX_AUDIO_DEVIATION: 66.25KHz, SI4713_PROP_TX_RDS_DE...
Definition: Adafruit_Si4713.cpp:221
void readTuneMeasure(uint16_t freq)
Measure the received noise level at the specified frequency using SI4710_CMD_TX_TUNE_MEASURE command...
Definition: Adafruit_Si4713.cpp:188
uint8_t currASQ
current ASQ
Definition: Adafruit_Si4713.h:175
void setProperty(uint16_t p, uint16_t v)
Set chip property over I2C.
Definition: Adafruit_Si4713.cpp:89
void setTXpower(uint8_t pwr, uint8_t antcap=0)
Sets the output power level and tunes the antenna capacitor.
Definition: Adafruit_Si4713.cpp:143
void tuneFM(uint16_t freqKHz)
Tunes to given transmit frequency.
Definition: Adafruit_Si4713.cpp:125
Class that stores state and functions for interacting with Si4713 breakout.
Definition: Adafruit_Si4713.h:151
uint8_t getRev()
Get the hardware revision code from the device using SI4710_CMD_GET_REV.
Definition: Adafruit_Si4713.cpp:343
int8_t currInLevel
current IN level
Definition: Adafruit_Si4713.h:179
void powerUp()
Sends power up command to the breakout, than CTS and GPO2 output is disabled and than enable xtal osc...
Definition: Adafruit_Si4713.cpp:318
#define SI4710_ADDR1
if SEN is high, default!
Definition: Adafruit_Si4713.h:28
void setGPIO(uint8_t x)
Sets GP1 / GP2 output level (low or high).
Definition: Adafruit_Si4713.cpp:394
void setRDSstation(const char *s)
Set up the RDS station string.
Definition: Adafruit_Si4713.cpp:242