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_cpp.cpp
- Revision:
- 10:03645de9c017
- Parent:
- 9:315236fb3c6a
- Child:
- 11:c3367936f4f2
--- a/ds1775_cpp.cpp Sun Apr 07 08:59:48 2019 +0000 +++ b/ds1775_cpp.cpp Sun Apr 07 09:40:00 2019 +0000 @@ -46,7 +46,6 @@ m_write_address(slave_address <<1), m_read_address ((slave_address << 1) | 1) { - m_extended_format = 0; } /******************************************************************************/ @@ -82,13 +81,14 @@ } /******************************************************************************/ -int DS1775::read_reg(uint16_t *value, char reg) +int DS1775::read_reg(int16_t *value, char reg) { int32_t ret; char data[2] = {0, 0}; ds1775_raw_data tmp; - if (reg <= DS1775_REG_MAX) { + if (reg == DS1775_REG_TEMPERATURE || + (reg >= DS1775_REG_THYST_LOW_TRIP && reg <= DS1775_REG_MAX)) { /* write to the Register Select, true is for repeated start */ ret = m_i2c.write(m_write_address, ®, 1, true); /* read the two bytes of data */ @@ -99,7 +99,7 @@ tmp.lsb = data[1]; printf( "%s: MSB LSB %x %x\r\n", __func__, tmp.msb, tmp.lsb); - *value = tmp.uwrd; + *value = tmp.swrd; return DS1775_NO_ERROR; } else { printf( @@ -123,14 +123,9 @@ float temperature; if (reg == DS1775_REG_TEMPERATURE || reg == DS1775_REG_THYST_LOW_TRIP || reg == DS1775_REG_TOS_HIGH_TRIP) { - read_reg(&tmp.uwrd, reg); - temperature = (float)tmp.magnitude_bits; - if (m_extended_format) - temperature *= DS1775_CF_EXTENDED_FORMAT; - else - temperature *= DS1775_CF_NORMAL_FORMAT; - if (tmp.sign_bit) - temperature = -temperature; + read_reg(&tmp.swrd, reg); + temperature = (float)tmp.swrd; + temperature *= DS1775_CF_LSB; return temperature; } else { @@ -140,7 +135,7 @@ } /******************************************************************************/ -int DS1775::write_reg(uint16_t value, char reg) +int DS1775::write_reg(int16_t value, char reg) { int32_t ret; char cmd[3]; @@ -148,7 +143,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 = m_i2c.write(m_write_address, cmd, 3, false); @@ -169,7 +164,6 @@ { int32_t ret; char cmd[2]; - ds1775_raw_data tmp; if (reg == DS1775_REG_CONFIGURATION) { cmd[0] = reg; @@ -197,33 +191,17 @@ int DS1775::write_trip_low(float temperature) { ds1775_raw_data raw; - raw.uwrd = 0; - if (temperature < 0) { - raw.sign_bit = 1; - temperature = -temperature; - } - if (m_extended_format) - temperature /= DS1775_CF_EXTENDED_FORMAT; - else - temperature /= DS1775_CF_NORMAL_FORMAT; - raw.magnitude_bits = uint16_t(temperature); - return write_reg(raw.uwrd, DS1775_REG_THYST_LOW_TRIP); + temperature /= DS1775_CF_LSB; + raw.swrd = int16_t(temperature); + return write_reg(raw.swrd, DS1775_REG_THYST_LOW_TRIP); } /******************************************************************************/ int DS1775::write_trip_high(float temperature) { ds1775_raw_data raw; - raw.uwrd = 0; - if (temperature < 0) { - raw.sign_bit = 1; - temperature = -temperature; - } - if (m_extended_format) - temperature /= DS1775_CF_EXTENDED_FORMAT; - else - temperature /= DS1775_CF_NORMAL_FORMAT; - raw.magnitude_bits = uint16_t(temperature); + temperature /= DS1775_CF_LSB; + raw.swrd = int16_t(temperature); return write_reg(raw.uwrd, DS1775_REG_TOS_HIGH_TRIP); }