Skip to content

Commit 54d48fd

Browse files
committed
drivers/ads1x1x: fix saul read adc
1 parent 4b54e14 commit 54d48fd

File tree

4 files changed

+7
-9
lines changed

4 files changed

+7
-9
lines changed

drivers/ads1x1x/ads1x1x.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,9 +289,10 @@ int ads1x1x_read_raw(const ads1x1x_t *dev, int16_t *raw)
289289
return ADS1X1X_OK;
290290
}
291291

292-
int ads1x1x_convert_to_mv(ads1x1x_t *dev, int16_t raw)
292+
int ads1x1x_convert_to_mv(const ads1x1x_t *dev, int16_t raw)
293293
{
294294
assert(dev);
295+
/* Normalize signed ADC code: range = [-2^(N-1), 2^(N-1)-1] */
295296
return ((int32_t)raw * _ads1x1x_get_pga_voltage(dev->params.pga))
296297
/ (1 << (ADS1X1X_BITS_RES - 1));
297298
}

drivers/ads1x1x/ads1x1x_saul.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,12 @@ static int read_adc(const void *dev, phydat_t *res)
2929
const ads1x1x_t *mydev = dev;
3030

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

36-
/* Convert raw ADC value to voltage according to PGA */
37-
int32_t fsr_mv = _ads1x1x_get_pga_voltage(mydev->params.mux & ADS1X1X_PGA_MASK);
38-
/* ADS101X_BITS_RES is 12 for ADS101x, 16 for ADS111x */
39-
*res->val = (int16_t)(((int32_t)*(res->val) * fsr_mv) / (1 << (ADS1X1X_BITS_RES - 1)));
40-
37+
*res->val = (int16_t)(ads1x1x_convert_to_mv(mydev, raw));
4138
res->unit = UNIT_V;
4239
/* 1V = 1*10^3 mV */
4340
res->scale = -3;

drivers/ads1x1x/include/ads1x1x_internal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ extern "C" {
167167
*
168168
* @return Voltage reference in millivolts
169169
*/
170-
static inline int _ads1x1x_get_pga_voltage(uint8_t pga)
170+
static inline uint16_t _ads1x1x_get_pga_voltage(uint8_t pga)
171171
{
172172
switch (pga) {
173173
case ADS1X1X_PGA_FSR_6V144: return 6144;

drivers/include/ads1x1x.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ int ads1x1x_set_alert_parameters(ads1x1x_alert_t *dev, const ads1x1x_alert_param
184184
*
185185
* @return Converted value in millivolts
186186
*/
187-
int ads1x1x_convert_to_mv(ads1x1x_t *dev, int16_t value);
187+
int ads1x1x_convert_to_mv(const ads1x1x_t *dev, int16_t value);
188188

189189
/**
190190
* Reset the ADS1X1X devices on the I2C bus

0 commit comments

Comments
 (0)