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

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, &reg, 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);
 }