36
36
*/
37
37
/* *************************************************************************/
38
38
Adafruit_ADS1015::Adafruit_ADS1015 () {
39
- m_conversionDelay = ADS1015_CONVERSIONDELAY;
40
39
m_bitShift = 4 ;
41
40
m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */
41
+ m_dataRate = RATE_ADS1015_1600SPS;
42
42
}
43
43
44
44
/* *************************************************************************/
@@ -47,9 +47,9 @@ Adafruit_ADS1015::Adafruit_ADS1015() {
47
47
*/
48
48
/* *************************************************************************/
49
49
Adafruit_ADS1115::Adafruit_ADS1115 () {
50
- m_conversionDelay = ADS1115_CONVERSIONDELAY;
51
50
m_bitShift = 0 ;
52
51
m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */
52
+ m_dataRate = RATE_ADS1115_128SPS;
53
53
}
54
54
55
55
/* *************************************************************************/
@@ -83,6 +83,24 @@ void Adafruit_ADS1X15::setGain(adsGain_t gain) { m_gain = gain; }
83
83
/* *************************************************************************/
84
84
adsGain_t Adafruit_ADS1X15::getGain () { return m_gain; }
85
85
86
+ /* *************************************************************************/
87
+ /* !
88
+ @brief Sets the data rate
89
+
90
+ @param rate the data rate to use
91
+ */
92
+ /* *************************************************************************/
93
+ void Adafruit_ADS1X15::setDataRate (uint16_t rate) { m_dataRate = rate; }
94
+
95
+ /* *************************************************************************/
96
+ /* !
97
+ @brief Gets the current data rate
98
+
99
+ @return the data rate
100
+ */
101
+ /* *************************************************************************/
102
+ uint16_t Adafruit_ADS1X15::getDataRate () { return m_dataRate; }
103
+
86
104
/* *************************************************************************/
87
105
/* !
88
106
@brief Gets a single-ended ADC reading from the specified channel
@@ -103,12 +121,14 @@ uint16_t Adafruit_ADS1X15::readADC_SingleEnded(uint8_t channel) {
103
121
ADS1X15_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val)
104
122
ADS1X15_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val)
105
123
ADS1X15_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val)
106
- ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default)
107
124
ADS1X15_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default)
108
125
109
126
// Set PGA/voltage range
110
127
config |= m_gain;
111
128
129
+ // Set data rate
130
+ config |= m_dataRate;
131
+
112
132
// Set single-ended input channel
113
133
switch (channel) {
114
134
case (0 ):
@@ -132,7 +152,8 @@ uint16_t Adafruit_ADS1X15::readADC_SingleEnded(uint8_t channel) {
132
152
writeRegister (ADS1X15_REG_POINTER_CONFIG, config);
133
153
134
154
// Wait for the conversion to complete
135
- delay (m_conversionDelay);
155
+ while (!conversionComplete ())
156
+ ;
136
157
137
158
// Read the conversion results
138
159
// Shift 12-bit results right 4 bits for the ADS1015
@@ -156,12 +177,14 @@ int16_t Adafruit_ADS1X15::readADC_Differential_0_1() {
156
177
ADS1X15_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val)
157
178
ADS1X15_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val)
158
179
ADS1X15_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val)
159
- ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default)
160
180
ADS1X15_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default)
161
181
162
182
// Set PGA/voltage range
163
183
config |= m_gain;
164
184
185
+ // Set data rate
186
+ config |= m_dataRate;
187
+
165
188
// Set channels
166
189
config |= ADS1X15_REG_CONFIG_MUX_DIFF_0_1; // AIN0 = P, AIN1 = N
167
190
@@ -172,7 +195,8 @@ int16_t Adafruit_ADS1X15::readADC_Differential_0_1() {
172
195
writeRegister (ADS1X15_REG_POINTER_CONFIG, config);
173
196
174
197
// Wait for the conversion to complete
175
- delay (m_conversionDelay);
198
+ while (!conversionComplete ())
199
+ ;
176
200
177
201
// Read the conversion results
178
202
uint16_t res = readRegister (ADS1X15_REG_POINTER_CONVERT) >> m_bitShift;
@@ -206,12 +230,14 @@ int16_t Adafruit_ADS1X15::readADC_Differential_2_3() {
206
230
ADS1X15_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val)
207
231
ADS1X15_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val)
208
232
ADS1X15_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val)
209
- ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default)
210
233
ADS1X15_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default)
211
234
212
235
// Set PGA/voltage range
213
236
config |= m_gain;
214
237
238
+ // Set data rate
239
+ config |= m_dataRate;
240
+
215
241
// Set channels
216
242
config |= ADS1X15_REG_CONFIG_MUX_DIFF_2_3; // AIN2 = P, AIN3 = N
217
243
@@ -222,7 +248,8 @@ int16_t Adafruit_ADS1X15::readADC_Differential_2_3() {
222
248
writeRegister (ADS1X15_REG_POINTER_CONFIG, config);
223
249
224
250
// Wait for the conversion to complete
225
- delay (m_conversionDelay);
251
+ while (!conversionComplete ())
252
+ ;
226
253
227
254
// Read the conversion results
228
255
uint16_t res = readRegister (ADS1X15_REG_POINTER_CONVERT) >> m_bitShift;
@@ -260,13 +287,15 @@ void Adafruit_ADS1X15::startComparator_SingleEnded(uint8_t channel,
260
287
ADS1X15_REG_CONFIG_CLAT_LATCH | // Latching mode
261
288
ADS1X15_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val)
262
289
ADS1X15_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val)
263
- ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default)
264
290
ADS1X15_REG_CONFIG_MODE_CONTIN | // Continuous conversion mode
265
291
ADS1X15_REG_CONFIG_MODE_CONTIN; // Continuous conversion mode
266
292
267
293
// Set PGA/voltage range
268
294
config |= m_gain;
269
295
296
+ // Set data rate
297
+ config |= m_dataRate;
298
+
270
299
// Set single-ended input channel
271
300
switch (channel) {
272
301
case (0 ):
@@ -301,9 +330,6 @@ void Adafruit_ADS1X15::startComparator_SingleEnded(uint8_t channel,
301
330
*/
302
331
/* *************************************************************************/
303
332
int16_t Adafruit_ADS1X15::getLastConversionResults () {
304
- // Wait for the conversion to complete
305
- delay (m_conversionDelay);
306
-
307
333
// Read the conversion results
308
334
uint16_t res = readRegister (ADS1X15_REG_POINTER_CONVERT) >> m_bitShift;
309
335
if (m_bitShift == 0 ) {
@@ -319,6 +345,15 @@ int16_t Adafruit_ADS1X15::getLastConversionResults() {
319
345
}
320
346
}
321
347
348
+ /* *************************************************************************/
349
+ /* !
350
+ @brief Returns true if conversion is complete, false otherwise.
351
+ */
352
+ /* *************************************************************************/
353
+ bool Adafruit_ADS1X15::conversionComplete () {
354
+ return readRegister (ADS1X15_REG_POINTER_CONFIG) & 0x8000 != 0 ;
355
+ }
356
+
322
357
/* *************************************************************************/
323
358
/* !
324
359
@brief Writes 16-bits to the specified destination register
0 commit comments