Adafruit Si4713 Library
Adafruit_Si4713.h
Go to the documentation of this file.
1 
23 #include <Adafruit_I2CDevice.h>
24 
25 #include "Arduino.h"
26 
27 // #define SI471X_CMD_DEBUG
28 #define SI4710_ADDR0 0x11
29 #define SI4710_ADDR1 0x63
30 #define SI4710_STATUS_CTS 0x80
31 
32 /* COMMANDS */
33 #define SI4710_CMD_POWER_UP \
34  0x01
35 #define SI4710_CMD_GET_REV 0x10
37 #define SI4710_CMD_POWER_DOWN 0x11
38 #define SI4710_CMD_SET_PROPERTY 0x12
39 #define SI4710_CMD_GET_PROPERTY 0x13
40 #define SI4710_CMD_GET_INT_STATUS 0x14
41 #define SI4710_CMD_PATCH_ARGS \
42  0x15
43 #define SI4710_CMD_PATCH_DATA \
44  0x16
45 #define SI4710_CMD_TX_TUNE_FREQ 0x30
46 #define SI4710_CMD_TX_TUNE_POWER \
47  0x31
48 #define SI4710_CMD_TX_TUNE_MEASURE \
49  0x32
50 #define SI4710_CMD_TX_TUNE_STATUS \
51  0x33
52 #define SI4710_CMD_TX_ASQ_STATUS \
54  0x34
55 #define SI4710_CMD_TX_RDS_BUFF \
56  0x35
57 #define SI4710_CMD_TX_RDS_PS 0x36
59 #define SI4710_CMD_GPO_CTL 0x80
60 #define SI4710_CMD_GPO_SET 0x81
61 
62 /* Parameters */
63 #define SI4713_PROP_GPO_IEN 0x0001
64 #define SI4713_PROP_DIGITAL_INPUT_FORMAT \
65  0x0101
66 #define SI4713_PROP_DIGITAL_INPUT_SAMPLE_RATE \
67  0x0103
68 #define SI4713_PROP_REFCLK_FREQ \
70  0x0201
71 #define SI4713_PROP_REFCLK_PRESCALE \
73  0x0202
74 #define SI4713_PROP_TX_COMPONENT_ENABLE \
75  0x2100
76 #define SI4713_PROP_TX_AUDIO_DEVIATION \
78  0x2101
79 #define SI4713_PROP_TX_PILOT_DEVIATION \
81  0x2102
82 #define SI4713_PROP_TX_RDS_DEVIATION \
84  0x2103
85 #define SI4713_PROP_TX_LINE_LEVEL_INPUT_LEVEL \
87  0x2104
88 #define SI4713_PROP_TX_LINE_INPUT_MUTE \
91  0x2105
92 #define SI4713_PROP_TX_PREEMPHASIS \
94  0x2106
95 #define SI4713_PROP_TX_PILOT_FREQUENCY \
96  0x2107
97 #define SI4713_PROP_TX_ACOMP_ENABLE \
98  0x2200
99 #define SI4713_PROP_TX_ACOMP_THRESHOLD \
100  0x2201
101 #define SI4713_PROP_TX_ATTACK_TIME \
103  0x2202
104 #define SI4713_PROP_TX_RELEASE_TIME \
106  0x2203
107 #define SI4713_PROP_TX_ACOMP_GAIN \
109  0x2204
110 #define SI4713_PROP_TX_LIMITER_RELEASE_TIME \
111  0x2205
112 #define SI4713_PROP_TX_ASQ_INTERRUPT_SOURCE \
113  0x2300
114 #define SI4713_PROP_TX_ASQ_LEVEL_LOW \
116  0x2301
117 #define SI4713_PROP_TX_ASQ_DURATION_LOW \
119  0x2302
120 #define SI4713_PROP_TX_AQS_LEVEL_HIGH \
122  0x2303
123 #define SI4713_PROP_TX_AQS_DURATION_HIGH \
125  0x2304
126 #define SI4713_PROP_TX_RDS_INTERRUPT_SOURCE \
128  0x2C00
129 #define SI4713_PROP_TX_RDS_PI 0x2C01
130 #define SI4713_PROP_TX_RDS_PS_MIX \
131  0x2C02
132 #define SI4713_PROP_TX_RDS_PS_MISC \
133  0x2C03
134 #define SI4713_PROP_TX_RDS_PS_REPEAT_COUNT \
135  0x2C04
136 #define SI4713_PROP_TX_RDS_MESSAGE_COUNT \
138  0x2C05
139 #define SI4713_PROP_TX_RDS_PS_AF \
140  0x2C06
141 #define SI4713_PROP_TX_RDS_FIFO_SIZE \
145  0x2C07
146 
148 
153  public:
154  Adafruit_Si4713(int8_t rstpin = -1);
155  bool begin(uint8_t addr = SI4710_ADDR1, TwoWire* theWire = &Wire);
156  void reset();
157 
158  void powerUp();
159  // void configure();
160  uint8_t getRev();
161 
162  void tuneFM(uint16_t freqKHz);
163  uint8_t getStatus(void);
164  void readTuneStatus(void);
165  void readTuneMeasure(uint16_t freq);
166  void setTXpower(uint8_t pwr, uint8_t antcap = 0);
167  void readASQ(void);
168  void setProperty(uint16_t p, uint16_t v);
169 
170  // RDS stuff
171  void beginRDS(uint16_t programID = 0xADAF);
172  void setRDSstation(const char* s);
173  void setRDSbuffer(const char* s);
174 
175  uint16_t currFreq;
176  uint8_t currdBuV,
177  currAntCap,
179  currASQ;
180  int8_t currInLevel;
181 
182  void setGPIO(uint8_t x);
183  void setGPIOctrl(uint8_t x);
184 
185  private:
186  void sendCommand(uint8_t len);
187 
188  int8_t _rst;
189  uint8_t _i2ccommand[10]; // holds the command buffer
190  Adafruit_I2CDevice* i2c_dev = NULL;
191 };
uint8_t currAntCap
current antenna capacitor
Definition: Adafruit_Si4713.h:176
void setRDSbuffer(const char *s)
Queries the status of the RDS Group Buffer and loads new data into buffer.
Definition: Adafruit_Si4713.cpp:273
void readASQ(void)
Queries the TX status and input audio signal metrics.
Definition: Adafruit_Si4713.cpp:156
uint16_t currFreq
current frequency
Definition: Adafruit_Si4713.h:175
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:382
uint8_t getStatus(void)
Read interrupt status bits.
Definition: Adafruit_Si4713.cpp:306
uint8_t currNoiseLevel
current noise level
Definition: Adafruit_Si4713.h:176
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:171
void reset()
Resets the registers to default settings and puts chip in powerdown mode.
Definition: Adafruit_Si4713.cpp:73
uint8_t currdBuV
current BuV
Definition: Adafruit_Si4713.h:176
bool begin(uint8_t addr=SI4710_ADDR1, TwoWire *theWire=&Wire)
Setups the i2c and calls powerUp function.
Definition: Adafruit_Si4713.cpp:51
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:223
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:190
uint8_t currASQ
current ASQ
Definition: Adafruit_Si4713.h:176
void setProperty(uint16_t p, uint16_t v)
Set chip property over I2C.
Definition: Adafruit_Si4713.cpp:91
void setTXpower(uint8_t pwr, uint8_t antcap=0)
Sets the output power level and tunes the antenna capacitor.
Definition: Adafruit_Si4713.cpp:145
void tuneFM(uint16_t freqKHz)
Tunes to given transmit frequency.
Definition: Adafruit_Si4713.cpp:127
Class that stores state and functions for interacting with Si4713 breakout.
Definition: Adafruit_Si4713.h:152
uint8_t getRev()
Get the hardware revision code from the device using SI4710_CMD_GET_REV.
Definition: Adafruit_Si4713.cpp:345
int8_t currInLevel
current IN level
Definition: Adafruit_Si4713.h:180
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:320
#define SI4710_ADDR1
if SEN is high, default!
Definition: Adafruit_Si4713.h:29
void setGPIO(uint8_t x)
Sets GP1 / GP2 output level (low or high).
Definition: Adafruit_Si4713.cpp:396
void setRDSstation(const char *s)
Set up the RDS station string.
Definition: Adafruit_Si4713.cpp:244