Maxim Integrated / MAX31723_Digital_Temperature_Sensor

Dependents:   MAX31723_Thermostat_Thermometer_Sensor

Revision:
6:2e49aa7fa091
Parent:
4:ac75d4d62471
Child:
7:92004aaa3e4d
--- a/max31723.h	Wed Jan 30 02:13:51 2019 +0000
+++ b/max31723.h	Tue Feb 12 22:57:17 2019 +0000
@@ -59,6 +59,7 @@
 #define MAX31723_CFG_RESOLUTION_10BIT   0x02
 #define MAX31723_CFG_RESOLUTION_11BIT   0x04
 #define MAX31723_CFG_RESOLUTION_12BIT   0x06
+#define MAX31723_CFG_RESOLUTION_MASK    0x06
 
 #define MAX31723_CFG_TM_MODE_INTERRUPT  0x08
 #define MAX31723_CFG_1SHOT              0x10
@@ -72,22 +73,60 @@
 
 #define MAX31723_NVRAM_WRITE_TIME_MSEC  0.015
 
-#define MAX31723_CF_LSB                 0.0625
-#define MAX31723_UNUSED_BITS            4
+#define MAX31723_CF_LSB                 (0.00390625f)
 
 /**
-* @brief 9-bit to 12bit device temperature sensor with digital-to-analog converters (DACs)
-*        for the MAX31723, MAX5214.
-* @version 1.0000.0002
-*
-* @details The MAX31722/MAX31723 provides device temperature readings
-* for thermostats and thermometers. Communications may be either SPI or
-* 3-wire. There are two operating modes available: comparator or interrupt.
-* Temperature limits may be stored in NVRAM so that the TOUT_N pin can be 
-* triggered when the limits are exceeded while in the comparator mode.
-* Typically applications are for temperature sensitive systems.
-*
-*/
+ * @brief 9-bit to 12bit device temperature sensor with digital-to-analog converters (DACs)
+ *        for the MAX31723.
+ * @version 1.0000.0002
+ *
+ * @details The MAX31722/MAX31723 provides device temperature readings
+ * for thermostats and thermometers. Communications may be either SPI or
+ * 3-wire. There are two operating modes available: comparator or interrupt.
+ * Temperature limits may be stored in NVRAM so that the TOUT_N pin can be 
+ * triggered when the limits are exceeded while in the comparator mode.
+ * Typically applications are for temperature sensitive systems.
+ *
+ * @code 
+ * #include "mbed.h"
+ * #include "max32630fthr.h"
+ * #include "max31723.h"
+ * #include "USBSerial.h"
+ * 
+ * MAX32630FTHR pegasus(MAX32630FTHR::VIO_1V8); 
+ * 
+ * DigitalOut gLED(LED2);
+ * 
+ * DigitalOut selectPin(P3_0);
+ * SPI spi(P5_1, P5_2, P5_0);
+ * 
+ * int main()
+ * {
+ *     int i, ret;
+ *     float temperature;
+ *     DigitalOut gLED(LED2, LED_OFF);
+ *     printf("MAX31723 Temperature Sensor example code.\r\n");
+ *     printf("\r\n");
+ *     
+ *     gLED = LED_ON;
+ * 
+ *     MAX31723 temp_sensor(spi, selectPin);
+ *     spi.format(8,3);
+ *     spi.frequency(5000000);
+ *     ret = temp_sensor.perform_one_shot_int(MAX31723_CFG_RESOLUTION_12BIT);
+ *     
+ *     for (i = 0; i < 5; i++) {
+ *         ret = temp_sensor.perform_one_shot_int(MAX31723_CFG_RESOLUTION_12BIT);
+ *         wait(MAX31723_CONV_TIME_MSEC_12BIT);
+ *         temperature = temp_sensor.read_temperature();
+ *         printf("Temperature = %4.4f Celsius, %4.4f Fahrenheit\r\n", 
+ *             temperature, temp_sensor.celsius_to_fahrenheit(temperature));
+ *         wait(2);
+ *     } 
+ *     printf("Configuration Register = 0x%02Xh \r\n", temp_sensor.read_cfg());
+ * }
+ * 
+ */
 
 class MAX31723{
     public:
@@ -101,7 +140,6 @@
     * On Entry:
     *     @param[in] spi - pointer to existing SPI object
     *     @param[in] ce_pin - pointer to a DigitalOut pin object
-    *     @param[in] ic_variant - which type of MAX521x is used
     *
     * On Exit:
     *
@@ -111,25 +149,62 @@
     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
+     * @brief Reads the register
+     * @param &val - register value
+     * @param reg  - address of the register
      * @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
+     * @brief Reads the configuration register
+     * @return value of the configuration register
+     */
+    uint8_t read_cfg();
+
+    /** 
+     * @brief Reads the temperature register
+     * @return temperature in degrees Celsius
+     */
+    float read_temperature(void);
+
+    /** 
+     * @brief Reads the trip low temperature register
+     * @return trip low temperature in degrees Celsius
+     */
+    float read_trip_low(void);
+
+    /** 
+     * @brief Reads the trip high temperature register
+     * @return trip high temperature in degrees Celsius
+     */
+    float read_trip_high(void);
+    
+    /** 
+     * @brief Writes to the configuration register
+     * @param val - the configuration value
      * @return 0 on success, negative number on failure
      */
-    int write_reg(uint8_t val, uint8_t reg);
+    int write_cfg(uint8_t val);
+
+    /** 
+     * @brief Writes to the Tlow register (the write takes 30 msec)
+     * @param temperature - the temperature in Celsius degrees
+     * @return 0 on success, negative number on failure
+     */
+     int write_trip_low(float temperature);
+
+    /** 
+     * @brief Writes to the Thigh register (the write takes 30 msec)
+     * @param temperature - the temperature in Celsius degrees
+     * @return 0 on success, negative number on failure
+     */
+     int write_trip_high(float temperature);
 
     /** 
      * @brief Reads the temperature registers
-     * @param reg - the low byte address of the temperature register
-     * @return temprature in degrees celsius
+     * @param reg - the address of the temperature register
+     * @return temprature in degrees Celsius
      */
     float read_reg_as_temperature(uint8_t reg);
 
@@ -149,12 +224,6 @@
      */
     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
@@ -175,6 +244,7 @@
      *************************************************************
      */
     ~MAX31723();
+
     protected:
     /** 
      * @brief Configures the device to perform a one-shot temperature reading
@@ -184,12 +254,25 @@
      */
     int perform_one_shot(uint8_t resolution, uint8_t interrupt_mode);
 
-
     private:
+    /** 
+     * @brief Write a value to a register
+     * @param val - 8-bit value to write to the register
+     * @param reg - register address
+     * @return 0 on success, negative number on failure
+     */
+    int write_reg(uint8_t val, uint8_t reg);
 
-    /* SPI object */
+    /** @var m_spi
+     *  @brief SPI object
+     */
     SPI &m_spi;
+
+    /** @var m_chip_enable
+     *  @brief Chip Enable pin
+     */
     /* chip enable pin */
+
     DigitalOut &m_chip_enable;
 };