C++ driver software code for Maxim Integrated MAX31723/MAX31722 device temperature sensor. The MAX31723 provides 9 to 12 bits of resolution.

Dependents:   MAX31723_Thermostat_Thermometer_Sensor

Files at this revision

API Documentation at this revision

Comitter:
phonemacro
Date:
Wed Jan 30 02:13:05 2019 +0000
Parent:
3:f39791139435
Child:
5:8e70ec0923e2
Commit message:
correct calculations for signed temperatures

Changed in this revision

max31723.cpp Show annotated file Show diff for this revision Revisions of this file
max31723.h Show annotated file Show diff for this revision Revisions of this file
--- a/max31723.cpp	Mon Jan 28 00:39:50 2019 +0000
+++ b/max31723.cpp	Wed Jan 30 02:13:05 2019 +0000
@@ -37,7 +37,8 @@
         uint8_t lsb;
         uint8_t msb;
     };
-    uint16_t wrd;
+    uint16_t uwrd;
+    int16_t swrd;
 };
  
 MAX31723::MAX31723(SPI &spi, DigitalOut &ce_pin) : m_spi(spi), m_chip_enable(ce_pin)
@@ -47,20 +48,33 @@
  
 int MAX31723::write_reg(uint8_t val, uint8_t reg)
 {
-    m_chip_enable = 1;
-    m_spi.write(reg);
-    m_spi.write(val);
-    m_chip_enable = 0;
-    return MAX31723_NO_ERROR;
+    if (reg == (MAX31723_REG_CFG | MAX31723_WRITE_MASK) ||
+            (reg >= (MAX31723_REG_TRIP_HI_LSB | MAX31723_WRITE_MASK) &&
+            reg <= (MAX31723_REG_MAX | MAX31723_WRITE_MASK)) ) {
+        m_chip_enable = 1;
+        m_spi.write(reg);
+        m_spi.write(val);
+        m_chip_enable = 0;
+        return MAX31723_NO_ERROR;
+    } else {
+        printf("Input write_reg is invalid, 0x%02X \r\n", reg);
+        return MAX31723_ERROR;
+    }
 }
  
 int MAX31723::read_reg(uint8_t &val, uint8_t reg)
 {
-    m_chip_enable = 1;
-    m_spi.write(reg);
-    val = m_spi.write(0);
-    m_chip_enable = 0;
-    return MAX31723_NO_ERROR;
+    if (reg <= MAX31723_REG_MAX) {
+        m_chip_enable = 1;
+        wait(.001);
+        m_spi.write(reg);
+        val = m_spi.write(0);
+        m_chip_enable = 0;
+        return MAX31723_NO_ERROR;
+    } else {
+        printf("Input read_reg is invalid, 0x%02X \r\n", reg);
+        return MAX31723_ERROR;
+    }
 }
 
 int MAX31723::perform_one_shot(uint8_t resolution, uint8_t interrupt_mode)
@@ -103,8 +117,8 @@
     if (reg >= MAX31723_REG_TEMP_LSB && reg <= MAX31723_REG_MAX) {
         read_reg(raw.lsb, reg);
         read_reg(raw.msb, reg+1);
-        raw.wrd =  raw.wrd >> MAX31723_UNUSED_BITS;
-        temperature = raw.wrd * MAX31723_CF_LSB;
+        raw.swrd = raw.swrd >> MAX31723_UNUSED_BITS;
+        temperature = raw.swrd * MAX31723_CF_LSB;
         return temperature;
     } else {
         printf("Input read_registers_as_temperature is invalid, %d r\n",
--- a/max31723.h	Mon Jan 28 00:39:50 2019 +0000
+++ b/max31723.h	Wed Jan 30 02:13:05 2019 +0000
@@ -72,7 +72,7 @@
 
 #define MAX31723_NVRAM_WRITE_TIME_MSEC  0.015
 
-#define MAX31723_CF_LSB                 0.0625f
+#define MAX31723_CF_LSB                 0.0625
 #define MAX31723_UNUSED_BITS            4
 
 /**
@@ -111,6 +111,14 @@
     MAX31723(SPI &spi, DigitalOut &ce_pin); 
 
     /** 
+     * @brief Read a value from a register
+     * @param val - 8-bit value read from the register
+     * @param reg - register address
+     * @return 0 on success, negative number on failure
+     */
+    int read_reg(uint8_t &val, uint8_t reg);
+
+    /** 
      * @brief Write a value to a register
      * @param val - 8-bit value to write to the register
      * @param reg - register address
@@ -141,6 +149,12 @@
      */
     int perform_one_shot_comparator(uint8_t resolution);
 
+
+    /** 
+     * @brief Reads the configuration register
+     * @return value of the configuration register
+     */
+    uint8_t read_cfg();
     /** 
      * @brief Converts Celcius degrees to Fahrenheit
      * @param temp_c - the temperature in Celsius degrees
@@ -148,13 +162,6 @@
      */
     float celsius_to_fahrenheit(float temp_c);
 
-    /** 
-     * @brief Reads the configuration register
-     * @return value of the configuration register
-     */
-    uint8_t read_cfg();
-
-
     /************************************************************
      * @brief Default destructor for MAX31723 Class.  
      *
@@ -179,13 +186,6 @@
 
 
     private:
-    /** 
-     * @brief Read a value from a register
-     * @param val - 8-bit value read from the register
-     * @param reg - register address
-     * @return 0 on success, negative number on failure
-     */
-    int read_reg(uint8_t &val, uint8_t reg);
 
     /* SPI object */
     SPI &m_spi;