Skip to content

Commit b6ab944

Browse files
committed
drivers/ads1x1x: allow ADS101x and ADS111x in same app
1 parent 54d48fd commit b6ab944

File tree

5 files changed

+54
-38
lines changed

5 files changed

+54
-38
lines changed

drivers/ads1x1x/ads1x1x.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,9 +292,15 @@ int ads1x1x_read_raw(const ads1x1x_t *dev, int16_t *raw)
292292
int ads1x1x_convert_to_mv(const ads1x1x_t *dev, int16_t raw)
293293
{
294294
assert(dev);
295+
uint8_t bits_res;
296+
#if MODULE_ADS101X && defined(MODULE_ADS111X)
297+
bits_res = dev->params.bits_res;
298+
#else
299+
bits_res = ADS1X1X_PARAM_BITS_RES;
300+
#endif
295301
/* Normalize signed ADC code: range = [-2^(N-1), 2^(N-1)-1] */
296302
return ((int32_t)raw * _ads1x1x_get_pga_voltage(dev->params.pga))
297-
/ (1 << (ADS1X1X_BITS_RES - 1));
303+
/ (1 << (bits_res - 1));
298304
}
299305

300306
int ads1x1x_alert_init(ads1x1x_alert_t *dev,

drivers/ads1x1x/ads1x1x_saul.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ static int read_adc(const void *dev, phydat_t *res)
3030

3131
/* Read raw value */
3232
int16_t raw;
33+
3334
if (ads1x1x_read_raw(mydev, &raw) < 0) {
3435
return ECANCELED;
3536
}

drivers/ads1x1x/include/ads1x1x_internal.h

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -87,28 +87,22 @@ extern "C" {
8787
/**
8888
* @name ADS101x/111x data rate settings
8989
* Configures the data rate (samples per second).
90-
* Values differ between ADS101x and ADS111x families.
9190
* @{
9291
*/
9392
#define ADS1X1X_DATAR_MASK ((1 << 7) | (1 << 6) | (1 << 5)) /**< Mask for data rate bits */
94-
#ifdef MODULE_ADS101X
95-
# define ADS1X1X_DATAR_128 ((0 << 7) | (0 << 6) | (0 << 5)) /**< 128 SPS */
96-
# define ADS1X1X_DATAR_250 ((0 << 7) | (0 << 6) | (1 << 5)) /**< 250 SPS */
97-
# define ADS1X1X_DATAR_490 ((0 << 7) | (1 << 6) | (0 << 5)) /**< 490 SPS */
98-
# define ADS1X1X_DATAR_920 ((0 << 7) | (1 << 6) | (1 << 5)) /**< 920 SPS */
99-
# define ADS1X1X_DATAR_1600 ((1 << 7) | (0 << 6) | (0 << 5)) /**< 1600 SPS (default) */
100-
# define ADS1X1X_DATAR_2400 ((1 << 7) | (0 << 6) | (1 << 5)) /**< 2400 SPS */
101-
# define ADS1X1X_DATAR_3300 ((1 << 7) | (1 << 6) | (0 << 5)) /**< 3300 SPS */
102-
#elif defined(MODULE_ADS111X)
103-
# define ADS1X1X_DATAR_8 ((0 << 7) | (0 << 6) | (0 << 5)) /**< 8 SPS */
104-
# define ADS1X1X_DATAR_16 ((0 << 7) | (0 << 6) | (1 << 5)) /**< 16 SPS */
105-
# define ADS1X1X_DATAR_32 ((0 << 7) | (1 << 6) | (0 << 5)) /**< 32 SPS */
106-
# define ADS1X1X_DATAR_64 ((0 << 7) | (1 << 6) | (1 << 5)) /**< 64 SPS */
107-
# define ADS1X1X_DATAR_128 ((1 << 7) | (0 << 6) | (0 << 5)) /**< 128 SPS (default) */
108-
# define ADS1X1X_DATAR_250 ((1 << 7) | (0 << 6) | (1 << 5)) /**< 250 SPS */
109-
# define ADS1X1X_DATAR_475 ((1 << 7) | (1 << 6) | (0 << 5)) /**< 475 SPS */
110-
# define ADS1X1X_DATAR_860 ((1 << 7) | (1 << 6) | (1 << 5)) /**< 860 SPS */
111-
#endif
93+
#define ADS1X1X_DATAR_8 ((0 << 7) | (0 << 6) | (0 << 5)) /**< 8 SPS */
94+
#define ADS1X1X_DATAR_16 ((0 << 7) | (0 << 6) | (1 << 5)) /**< 16 SPS */
95+
#define ADS1X1X_DATAR_32 ((0 << 7) | (1 << 6) | (0 << 5)) /**< 32 SPS */
96+
#define ADS1X1X_DATAR_64 ((0 << 7) | (1 << 6) | (1 << 5)) /**< 64 SPS */
97+
#define ADS1X1X_DATAR_128 ((1 << 7) | (0 << 6) | (0 << 5)) /**< 128 SPS (default) */
98+
#define ADS1X1X_DATAR_250 ((1 << 7) | (0 << 6) | (1 << 5)) /**< 250 SPS */
99+
#define ADS1X1X_DATAR_475 ((1 << 7) | (1 << 6) | (0 << 5)) /**< 475 SPS */
100+
#define ADS1X1X_DATAR_490 ((0 << 7) | (1 << 6) | (0 << 5)) /**< 490 SPS */
101+
#define ADS1X1X_DATAR_860 ((1 << 7) | (1 << 6) | (1 << 5)) /**< 860 SPS */
102+
#define ADS1X1X_DATAR_920 ((0 << 7) | (1 << 6) | (1 << 5)) /**< 920 SPS */
103+
#define ADS1X1X_DATAR_1600 ((1 << 7) | (0 << 6) | (0 << 5)) /**< 1600 SPS */
104+
#define ADS1X1X_DATAR_2400 ((1 << 7) | (0 << 6) | (1 << 5)) /**< 2400 SPS */
105+
#define ADS1X1X_DATAR_3300 ((1 << 7) | (1 << 6) | (0 << 5)) /**< 3300 SPS */
112106
/** @} */
113107

114108
/**

drivers/ads1x1x/include/ads1x1x_params.h

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -81,16 +81,6 @@ extern "C" {
8181
# define ADS1X1X_PARAM_HIGH_LIMIT (20000U)
8282
#endif
8383

84-
/**
85-
* @def ADS1X1X_BITS_RES
86-
* @brief Default bit resolution
87-
*/
88-
#if MODULE_ADS101X
89-
# define ADS1X1X_BITS_RES (12)
90-
#else /**<ADS111X */
91-
# define ADS1X1X_BITS_RES (16)
92-
#endif
93-
9484
/**
9585
* @def ADS1X1X_PARAM_PGA
9686
* @brief Default programmable gain amplifier configuration
@@ -102,10 +92,12 @@ extern "C" {
10292
/**
10393
* @brief Default data rate configuration
10494
*/
105-
#if MODULE_ADS101X
106-
# define ADS1X1X_PARAM_DATAR (ADS1X1X_DATAR_1600)
107-
#elif defined(MODULE_ADS111X)
108-
# define ADS1X1X_PARAM_DATAR (ADS1X1X_DATAR_128)
95+
#if MODULE_ADS111X
96+
# define ADS111X_PARAM_DATAR (ADS1X1X_DATAR_128)
97+
# define ADS1X1X_PARAM_DATAR (ADS111X_PARAM_DATAR)
98+
#elif defined(MODULE_ADS101X)
99+
# define ADS101X_PARAM_DATAR (ADS1X1X_DATAR_1600)
100+
# define ADS1X1X_PARAM_DATAR (ADS101X_PARAM_DATAR)
109101
#endif
110102

111103
/**
@@ -148,26 +140,48 @@ extern "C" {
148140
# define ADS1X1X_PARAM_COMP_QUEUE (ADS1X1X_COMP_QUEUE_DISABLE)
149141
#endif
150142

143+
/**
144+
* @def ADS1X1X_PARAM_BITS_RES
145+
* @brief Resolution in bits of the ADC
146+
*/
147+
#if MODULE_ADS101X
148+
# define ADS101X_PARAM_BITS_RES (12)
149+
# define ADS1X1X_PARAM_BITS_RES ADS101X_PARAM_BITS_RES
150+
#elif defined(MODULE_ADS111X)
151+
# define ADS111X_PARAM_BITS_RES (16)
152+
# define ADS1X1X_PARAM_BITS_RES ADS111X_PARAM_BITS_RES
153+
#endif
154+
151155
/**
152156
* @def ADS1X1X_PARAMS
153157
* @brief Default ADS1X1X parameters structure
158+
*
159+
* @note The default parameter set defined here can only be used if a single type of
160+
* ADS101x/111x device is used. If devices of both types are used together, a
161+
* user-defined parameter set must be provided via @ref ADS1X1X_PARAMS.
162+
*
163+
* In this case, you must configure the parameters according to the device type:
164+
* - @ref ads1x1x_params_t::bits_res must be set to either
165+
* ADS101X_PARAM_BITS_RES or ADS111X_PARAM_BITS_RES.
166+
* - @ref ads1x1x_params_t::dr must also be set to either
167+
* ADS101X_PARAM_DATAR or ADS111X_PARAM_DATAR.
154168
*/
155169
#ifndef ADS1X1X_PARAMS
156-
#define ADS1X1X_PARAMS { .i2c = ADS1X1X_PARAM_I2C, \
170+
# define ADS1X1X_PARAMS { .i2c = ADS1X1X_PARAM_I2C, \
157171
.addr = ADS1X1X_PARAM_ADDR, \
158172
.mux = ADS1X1X_PARAM_MUX, \
159173
.pga = ADS1X1X_PARAM_PGA, \
160174
.mode = ADS1X1X_PARAM_MODE, \
161-
.dr = ADS1X1X_PARAM_DATAR }
162-
175+
.dr = ADS1X1X_PARAM_DATAR, \
176+
.bits_res = ADS1X1X_PARAM_BITS_RES }
163177
#endif
164178

165179
/**
166180
* @def ADS1X1X_ALERT_PARAMS
167181
* @brief Default ADS1X1X alert parameters structure
168182
*/
169183
#ifndef ADS1X1X_ALERT_PARAMS
170-
#define ADS1X1X_ALERT_PARAMS { .i2c = ADS1X1X_PARAM_I2C, \
184+
# define ADS1X1X_ALERT_PARAMS { .i2c = ADS1X1X_PARAM_I2C, \
171185
.addr = ADS1X1X_PARAM_ADDR, \
172186
.comp_mode = ADS1X1X_PARAM_COMP_MODE, \
173187
.comp_polarity = ADS1X1X_PARAM_COMP_POLARITY, \

drivers/include/ads1x1x.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ typedef struct {
5858
uint8_t pga; /**< Programmable gain amplifier configuration */
5959
uint8_t mode; /**< Device mode */
6060
uint8_t dr; /**< Data rate configuration */
61+
uint8_t bits_res; /**< Bit resolution (12 or 16 bits) */
6162
} ads1x1x_params_t;
6263

6364
/**

0 commit comments

Comments
 (0)