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_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);
 }