C code and C++ library, driver software for Maxim Integrated DS1775, DS75 thermometer and thermostat temperature sensor. Code supports continuous or shut-down/standby, hysteresis, alarm limits, comparator or interrupt mode, fault filtering, and active low/high. Compact 5-pin SOT23 packaging
Dependents: DS1775_Digital_Thermostat_Temperature
Diff: ds1775_c.cpp
- Revision:
- 10:03645de9c017
- Parent:
- 9:315236fb3c6a
- Child:
- 11:c3367936f4f2
diff -r 315236fb3c6a -r 03645de9c017 ds1775_c.cpp --- a/ds1775_c.cpp Sun Apr 07 08:59:48 2019 +0000 +++ b/ds1775_c.cpp Sun Apr 07 09:40:00 2019 +0000 @@ -44,16 +44,11 @@ * @brief I2C address */ uint8_t ds1775_write_address, ds1775_read_address; -/* @var ds1775_write_address, ds1775_read_address - * @brief ds1775_extended_format - */ -uint32_t ds1775_extended_format; int ds1775_init(uint8_t slave_address) { ds1775_write_address = (slave_address <<1); ds1775_read_address = ((slave_address << 1) | 1); - ds1775_extended_format = 0; return DS1775_NO_ERROR; } @@ -84,7 +79,7 @@ /******************************************************************************/ -int ds1775_read_reg(uint16_t *value, char reg, I2C &i2c_bus) +int ds1775_read_reg(int16_t *value, char reg, I2C &i2c_bus) { int32_t ret; char data[2] = {0, 0}; @@ -101,7 +96,7 @@ if (ret == 0) { tmp.msb = data[0]; tmp.lsb = data[1]; - *value = tmp.uwrd; + *value = tmp.swrd; return DS1775_NO_ERROR; } else { printf( @@ -124,16 +119,9 @@ float temperature; if (reg == DS1775_REG_TEMPERATURE || reg == DS1775_REG_THYST_LOW_TRIP || reg == DS1775_REG_TOS_HIGH_TRIP) { - ds1775_read_reg(&tmp.uwrd, reg, i2c_bus); - temperature = (float)tmp.magnitude_bits; - if (ds1775_extended_format) - temperature *= DS1775_CF_EXTENDED_FORMAT; - else - temperature *= DS1775_CF_NORMAL_FORMAT; - if (tmp.sign_bit) - temperature = -temperature; - return temperature; - + ds1775_read_reg(&tmp.swrd, reg, i2c_bus); + temperature = (float)tmp.swrd; + temperature *= DS1775_CF_LSB; return temperature; } else { printf("%s: register is invalid, %d r\n", __func__, reg); @@ -143,7 +131,7 @@ /******************************************************************************/ -int ds1775_write_reg(uint16_t value, char reg, I2C &i2c_bus) +int ds1775_write_reg(int16_t value, char reg, I2C &i2c_bus) { int32_t ret; char cmd[3]; @@ -151,7 +139,7 @@ if (reg >= DS1775_REG_CONFIGURATION && reg <= DS1775_REG_MAX) { cmd[0] = reg; - tmp.uwrd = value; + tmp.swrd = value; cmd[1] = tmp.msb; cmd[2] = tmp.lsb; ret = i2c_bus.write(ds1775_write_address, cmd, 3, false); @@ -191,41 +179,25 @@ int ds1775_write_cfg(uint8_t cfg, I2C &i2c_bus) { - return ds1775_write_reg(cfg, DS1775_REG_CONFIGURATION, i2c_bus); + return ds1775_write_reg_one_byte(cfg, DS1775_REG_CONFIGURATION, i2c_bus); } int ds1775_write_trip_low(float temperature, I2C &i2c_bus) { ds1775_raw_data raw; - raw.uwrd = 0; - if (temperature < 0) { - raw.sign_bit = 1; - temperature = -temperature; - } - if (ds1775_extended_format) - temperature /= DS1775_CF_EXTENDED_FORMAT; - else - temperature /= DS1775_CF_NORMAL_FORMAT; - raw.magnitude_bits = uint16_t(temperature); - return ds1775_write_reg(raw.uwrd, DS1775_REG_THYST_LOW_TRIP, i2c_bus); + temperature /= DS1775_CF_LSB; + raw.swrd = int16_t(temperature); + return ds1775_write_reg(raw.swrd, DS1775_REG_THYST_LOW_TRIP, i2c_bus); } int ds1775_write_trip_high(float temperature, I2C &i2c_bus) { ds1775_raw_data raw; - raw.uwrd = 0; - if (temperature < 0) { - raw.sign_bit = 1; - temperature = -temperature; - } - if (ds1775_extended_format) - temperature /= DS1775_CF_EXTENDED_FORMAT; - else - temperature /= DS1775_CF_NORMAL_FORMAT; - raw.magnitude_bits = uint16_t(temperature); - return ds1775_write_reg(raw.uwrd, DS1775_REG_TOS_HIGH_TRIP, i2c_bus); + temperature /= DS1775_CF_LSB; + raw.swrd = int16_t(temperature); + return ds1775_write_reg(raw.swrd, DS1775_REG_TOS_HIGH_TRIP, i2c_bus); }