sensor: si7006: combined RH/T measurements
The Si7006-A20 rev. 1.2 datasheet, section 5.1.2. Measuring Temperature says that: "Each time a relative humidity measurement is made a temperature measurement is also made for the purposes of temperature compensation of the relative humidity measurement. If the temperature value is required, it can be read using command 0xE0; this avoids having to perform a second temperature measurement." Respective improvement is implemented. Signed-off-by: Max Payne <forgge@gmail.com> Signed-off-by: Anthony Brandon <anthony@amarulasolutions.com>
This commit is contained in:
parent
0bc4370689
commit
7dd4cc5821
1 changed files with 8 additions and 5 deletions
|
@ -54,17 +54,20 @@ static int si7006_get_humidity(struct device *i2c_dev,
|
||||||
/**
|
/**
|
||||||
* @brief function to get temperature
|
* @brief function to get temperature
|
||||||
*
|
*
|
||||||
|
* Note that si7006_get_humidity must be called before calling
|
||||||
|
* si7006_get_old_temperature.
|
||||||
|
*
|
||||||
* @return int 0 on success
|
* @return int 0 on success
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int si7006_get_temperature(struct device *i2c_dev,
|
static int si7006_get_old_temperature(struct device *i2c_dev,
|
||||||
struct si7006_data *si_data)
|
struct si7006_data *si_data)
|
||||||
{
|
{
|
||||||
u8_t temp[2];
|
u8_t temp[2];
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
retval = i2c_burst_read(i2c_dev, DT_INST_REG_ADDR(0),
|
retval = i2c_burst_read(i2c_dev, DT_INST_REG_ADDR(0),
|
||||||
SI7006_MEAS_TEMP_MASTER_MODE, temp, sizeof(temp));
|
SI7006_READ_OLD_TEMP, temp, sizeof(temp));
|
||||||
|
|
||||||
if (retval == 0) {
|
if (retval == 0) {
|
||||||
si_data->temperature = (temp[0] << 8) | temp[1];
|
si_data->temperature = (temp[0] << 8) | temp[1];
|
||||||
|
@ -85,9 +88,9 @@ static int si7006_sample_fetch(struct device *dev, enum sensor_channel chan)
|
||||||
int retval;
|
int retval;
|
||||||
struct si7006_data *si_data = dev->driver_data;
|
struct si7006_data *si_data = dev->driver_data;
|
||||||
|
|
||||||
retval = si7006_get_temperature(si_data->i2c_dev, si_data);
|
retval = si7006_get_humidity(si_data->i2c_dev, si_data);
|
||||||
if (retval == 0) {
|
if (retval == 0) {
|
||||||
retval = si7006_get_humidity(si_data->i2c_dev, si_data);
|
retval = si7006_get_old_temperature(si_data->i2c_dev, si_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue