MAX31856

Dependents:   lib_MAX31856_example

Files at this revision

API Documentation at this revision

Comitter:
YSI
Date:
Fri Jul 23 08:16:37 2021 +0000
Parent:
2:c5e7f83a00ed
Commit message:
Correct bugs and make lot of changes in MAXIM origin lib

Changed in this revision

lib_MAX31856.cpp Show annotated file Show diff for this revision Revisions of this file
lib_MAX31856.h Show annotated file Show diff for this revision Revisions of this file
--- a/lib_MAX31856.cpp	Tue Oct 13 11:57:18 2020 +0000
+++ b/lib_MAX31856.cpp	Fri Jul 23 08:16:37 2021 +0000
@@ -7,7 +7,7 @@
 *
 * Started: SEPTEMBER 14th 2017
 *
-* Updated: 
+* Updated: Jully 2021 By Yannic Simon
 *
 * @brief Source file for MAX3185 class
 *
@@ -44,58 +44,51 @@
 * property whatsoever. Maxim Integrated Products, Inc. retains all
 * ownership rights.
 **********************************************************************/
-
-#include <mbed.h>
 #include "lib_MAX31856.h"
 
 #define LOG(args...)    printf(args)
 
 //*****************************************************************************
-MAX31856::MAX31856(SPI& _spi, PinName _ncs, uint8_t _type, uint8_t _fltr, uint8_t _samples, uint8_t _conversion_mode) : spi(_spi), ncs(_ncs), samples(_samples) {  
+MAX31856::MAX31856(SPI& _spi, PinName _ncs, uint8_t _type, uint8_t _fltr, uint8_t _samples, uint8_t _conversion_mode) : spi(_spi), ncs(_ncs), samples(_samples)
+{
     spi.format(8,3); //configure the correct SPI mode to beable to program the registers intially correctly
     init_MAX31856 &= setThermocoupleType(_type);
     init_MAX31856 &= setEmiFilterFreq(_fltr);
     init_MAX31856 &= setNumSamplesAvg(_samples);
     init_MAX31856 &= setConversionMode(_conversion_mode);
+    lastReadTime = time(NULL);
+    wait_us(1000000);
 }
 
 
 //*****************************************************************************
 float MAX31856::readTC()
 {
-    if(!init_MAX31856) return NAN;
     //Check and see if the MAX31856 is set to conversion mode ALWAYS ON
     if (conversion_mode==0) {   //means that the conversion mode is normally off
-        setOneShotMode(CR0_1_SHOT_MODE_ONE_CONVERSION); // turn on the one shot mode for singular conversion
+        init_MAX31856 &= setOneShotMode(CR0_1_SHOT_MODE_ONE_CONVERSION); // turn on the one shot mode for singular conversion
         thermocouple_conversion_count=0; //reset the conversion count back to zero to make sure minimum conversion time reflects one shot mode requirements
     }
-    
+    if(!init_MAX31856) return NAN;
     //calculate minimum wait time for conversions
     calculateDelayTime();
-    
     //initialize other info for the read functionality
     uint32_t buf_read[3] = {0}, buf_write[3] = {ADDRESS_LTCBH_READ, ADDRESS_LTCBM_READ, ADDRESS_LTCBL_READ};
-    
-    //bool read_thermocouple_temp = checkFaultsThermocoupleConnection(); //check and see if there are any faults that prohibit a normal read of the register
-    
-    //if(read_thermocouple_temp) { //no faults with connection are present so continue on with normal read of temperature
-        uint32_t time = us_ticker_read();
-        uint32_t duration = time - lastReadTime;
+    if(checkFaultsThermocoupleConnection()) //no faults with connection are present so continue on with normal read of temperature
+    {
+        uint32_t tm = time(NULL)*1000000;
+        uint32_t duration = tm - lastReadTime;
+        lastReadTime = tm;
         if (duration > conversion_time)
         {
             for(int i=0; i<3; i++) buf_read[i] = registerReadByte(buf_write[i]);
-            
             //Convert the registers contents into the correct value
-            //int32_t temp  = ((buf_read[0] & 0xFF) << 0x18) + ((buf_read[1] & 0xFF) << 0x10) + ((buf_read[2] & 0xFF) << 0x08);   // LTCBH + LTCBM + LTCBL
-            int32_t temp  = ((buf_read[0] & 0xFF) << 11) + ((buf_read[1] & 0xFF) << 3) + ((buf_read[2] & 0xFF) >> 5);   // LTCBH + LTCBM + LTCBL
-
-            //return prev_TC = (temp >> 0x0D) * 0.0078125;
-            return prev_TC = temp * 0.0078125;
+            int32_t temp  = ((buf_read[0] & 0xFF) << 0x18) + ((buf_read[1] & 0xFF) << 0x10) + ((buf_read[2] & 0xFF) << 0x08);   // LTCBH + LTCBM + LTCBL
+            return prev_TC = (temp >> 0x0D) * 0.0078125;
         }
-    //}
+    }
     thermocouple_conversion_count++; //iterate the conversion count to speed up time in between future converions in always on mode
-    
-    //checkFaultsThermocoupleThresholds();  //print any faults to the terminal
+    checkFaultsThermocoupleThresholds();  //print any faults to the terminal
     return prev_TC;
 }
 
@@ -104,28 +97,10 @@
 float MAX31856::readCJ()
 {
     if(!init_MAX31856) return NAN;
-
     uint32_t buf_read[2] = {0}, buf_write[2] = {ADDRESS_CJTH_READ, ADDRESS_CJTL_READ};
-    
     for(int i=0; i<2; i++) buf_read[i] = registerReadByte(buf_write[i]);
-    
-    //Convert the registers contents into the correct value
     int16_t temp  = ((buf_read[0] & 0xFF) << 8) + (buf_read[1] & 0xFF); // CJTH + CJTL
-    
-    //checkFaultsColdJunctionThresholds(); //print any faults to the terminal
     return temp/256.0;
-    /*uint16_t buf_read[3];
-    
-    spiEnable();
-    for(int i=0; i<3; i++) buf_read[i] = spi.write(ADDRESS_CJTH_READ);
-    spiDisable();
-    
-    //Convert the registers contents into the correct value
-    int16_t temp  = ((buf_read[1] & 0xFF) << 8) + (buf_read[2] & 0xFF); // CJTH + CJTL
-    
-    //checkFaultsColdJunctionThresholds(); //print any faults to the terminal
-    printf("\r\nCJ %d", temp);
-    return ((temp==0)?NAN:(temp/256.0));*/
 }
 
 //*****************************************************************************
@@ -176,7 +151,7 @@
         temp[i]=fault_byte;
     
     //Check if any of the faults for thermocouple connection are triggered
-    if      ((fault_byte&0xB0)==0)  //means no fault is detected for cold junction thresholds
+    if ((fault_byte&0xB0)==0)  //means no fault is detected for cold junction thresholds
         return_int=0;
     else {
         if ((fault_byte&0x80)==0) {   //check if normal operation of cold junction is true
@@ -209,25 +184,7 @@
 //*****************************************************************************
 bool MAX31856::checkFaultsThermocoupleConnection()
 {
-    uint8_t fault_byte=registerReadByte(ADDRESS_SR_READ); //Read contents of fault status register
-    uint8_t temp[2];
-    for(int i=0; i<2; i++)
-        temp[i]=fault_byte;
-    
-    //Check if any of the faults for thermocouple connection are triggered
-    if (fault_byte==0) //means no fault is detected
-        return_val=1;
-    else{    
-        if (temp[0]&0x02) {
-            LOG("Overvotage/Undervoltage Fault triggered! Input voltage is negative or the voltage is greater than Vdd! Please check thermocouple connection!\r\n");
-            return_val=0;
-        }
-        if (temp[1]&0x01) {
-            LOG("Open circuit fault detected! Please check thermocouple connection!\r\n");
-            return_val=0;
-        }
-    }
-    return return_val;
+    return !registerReadByte(ADDRESS_SR_READ);  //Read contents of fault status register
 }
 
 
@@ -235,21 +192,17 @@
 //*****************************************************************************
 bool MAX31856::setConversionMode(uint8_t val) 
 {
-    if      (val==CR0_CONV_MODE_NORMALLY_OFF) {
-        return_val=registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_7, val);
-        conversion_mode=0;
-        //LOG("Register containing\t\tsetConversionMode\t\twas programmed with the parameter\t\tCR0_CONV_MODE_NORMALLY_OFF\r\n");
-    } 
-    else if (val==CR0_CONV_MODE_NORMALLY_ON) {
-        return_val=registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_7, val);
-        conversion_mode=1;
-        //LOG("Register containing\t\tsetConversionMode\t\twas programmed with the parameter\t\tCR0_CONV_MODE_NORMALLY_ON\r\n");
+    switch(val)
+    {
+        case CR0_CONV_MODE_NORMALLY_OFF: case CR0_CONV_MODE_NORMALLY_ON:
+            conversion_mode = (val == CR0_CONV_MODE_NORMALLY_ON)?1:0;
+            return registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_7, val);
+        break;
+        default:
+            //LOG("Incorrect parameter selected for Control Register 0 (CR0) bit 7. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
+            return false;
+        break;
     }
-    else {
-        LOG("Incorrect parameter selected for Control Register 0 (CR0) bit 7. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
-        return_val=0; //returns a 0 to flag that the parameter wasn't programmed due to wrong parameter in function call
-    }
-    return return_val;
 }
 
 
@@ -257,15 +210,16 @@
 //*****************************************************************************
 bool MAX31856::setOneShotMode(uint8_t val) 
 {
-    if      (val==CR0_1_SHOT_MODE_NO_CONVERSION) 
-        return_val=registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_6, val);
-    else if (val==CR0_1_SHOT_MODE_ONE_CONVERSION)
-        return_val=registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_6, val);
-    else {
-        LOG("Incorrect parameter selected for Control Register 0 (CR0) bit 6. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
-        return_val=0; //returns a 0 to flag that the parameter wasn't programmed due to wrong parameter in function call
+    switch(val)
+    {
+        case CR0_1_SHOT_MODE_NO_CONVERSION: case CR0_1_SHOT_MODE_ONE_CONVERSION:
+            return registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_6, val);
+        break;
+        default:
+            //LOG("Incorrect parameter selected for Control Register 0 (CR0) bit 6. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n");
+            return false;
+        break;
     }
-    return return_val;
 }
 
 
@@ -273,27 +227,16 @@
 //*****************************************************************************
 bool MAX31856::setOpenCircuitFaultDetection(uint8_t val) 
 {
-    if      (val==CR0_OC_DETECT_DISABLED) { 
-        return_val=registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_5_4, val);
-        LOG("Register containing\t\tsetOpenCircuitFaultDetection\t\twas programmed with the parameter\t\tCR0_OC_DETECT_DISABLED\r\n");
-    }
-    else if (val==CR0_OC_DETECT_ENABLED_R_LESS_5k) {  
-        return_val=registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_5_4, val);
-        LOG("Register containing\t\tsetOpenCircuitFaultDetection\t\twas programmed with the parameter\t\tCR0_OC_DETECT_ENABLED_R_LESS_5k\r\n");
+    switch(val)
+    {
+        case CR0_OC_DETECT_DISABLED: case CR0_OC_DETECT_ENABLED_R_LESS_5k: case CR0_OC_DETECT_ENABLED_TC_LESS_2ms: case CR0_OC_DETECT_ENABLED_TC_MORE_2ms:
+            return registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_5_4, val);
+        break;
+        default:
+            //LOG("Incorrect parameter selected for Control Register 0 (CR0) bits 5:4. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
+            return false;
+        break;
     }
-    else if (val==CR0_OC_DETECT_ENABLED_TC_LESS_2ms) {
-        return_val=registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_5_4, val);
-        LOG("Register containing\t\tsetOpenCircuitFaultDetection\t\twas programmed with the parameter\t\tCR0_OC_DETECT_ENABLED_TC_LESS_2ms\r\n");
-    }
-    else if (val==CR0_OC_DETECT_ENABLED_TC_MORE_2ms) { 
-        return_val=registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_5_4, val);
-        LOG("Register containing\t\tsetOpenCircuitFaultDetection\t\twas programmed with the parameter\t\tCR0_OC_DETECT_ENABLED_TC_MORE_2ms\r\n");
-    }
-    else {
-        LOG("Incorrect parameter selected for Control Register 0 (CR0) bits 5:4. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
-        return_val=0; //returns a 0 to flag that the parameter wasn't programmed due to wrong parameter in function call
-    }
-    return return_val;
 }
 
 
@@ -301,21 +244,17 @@
 //*****************************************************************************
 bool MAX31856::setColdJunctionDisable(uint8_t val) 
 {
-    if (val==CR0_COLD_JUNC_ENABLE) { 
-        return_val=registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_3, val);
-        cold_junction_enabled=1;
-        LOG("Register containing\t\tsetColdJunctionDisable\t\twas programmed with the parameter\t\tCR0_COLD_JUNC_ENABLE\r\n");
+    switch(val)
+    {
+        case CR0_COLD_JUNC_ENABLE: case CR0_COLD_JUNC_DISABLE:
+            cold_junction_enabled = (val==CR0_COLD_JUNC_ENABLE)?1:0;
+            return registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_3, val);
+        break;
+        default:
+            //LOG("Incorrect parameter selected for Control Register 0 (CR0) bit 3. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
+            return false;
+        break;
     }
-    else if (val==CR0_COLD_JUNC_DISABLE) {
-        return_val=registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_3, val);
-        cold_junction_enabled=0;
-        LOG("Register containing\t\tsetColdJunctionDisable\t\twas programmed with the parameter\t\tCR0_COLD_JUNC_DISABLE\r\n");
-    }
-    else {
-        LOG("Incorrect parameter selected for Control Register 0 (CR0) bit 3. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
-        return_val=0; //returns a 0 to flag that the parameter wasn't programmed due to wrong parameter in function call
-    }
-    return return_val;
 }
 
 
@@ -323,19 +262,16 @@
 //*****************************************************************************
 bool MAX31856::setFaultMode(uint8_t val) 
 {
-    if      (val==CR0_FAULT_MODE_COMPARATOR) {
-        return_val=registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_2, val);
-        LOG("Register containing\t\tsetFaultMode\t\twas programmed with the parameter\t\tCR0_FAULT_MODE_COMPARATOR\r\n");
+    switch(val)
+    {
+        case CR0_FAULT_MODE_COMPARATOR: case CR0_FAULT_MODE_INTERUPT:
+            return registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_2, val);
+        break;
+        default:
+            //LOG("Incorrect parameter selected for Control Register 0 (CR0) bit 2. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
+            return false;
+        break;
     }
-    else if (val==CR0_FAULT_MODE_INTERUPT) {
-        return_val=registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_2, val);
-        LOG("Register containing\t\tsetFaultMode\t\twas programmed with the parameter\t\tCR0_FAULT_MODE_INTERUPT\r\n");
-    }
-    else {
-        LOG("Incorrect parameter selected for Control Register 0 (CR0) bit 2. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
-        return_val=0; //returns a 0 to flag that the parameter wasn't programmed due to wrong parameter in function call
-    }
-    return return_val;
 }
 
 
@@ -343,19 +279,16 @@
 //*****************************************************************************
 bool MAX31856::setFaultStatusClear(uint8_t val) 
 {
-    if      (val==CR0_FAULTCLR_DEFAULT_VAL) { 
-        return_val=registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_1, val);
-        LOG("Register containing\t\tsetFaultStatusClear\t\twas programmed with the parameter\t\tCR0_FAULTCLR_DEFAULT_VAL\r\n");
+    switch(val)
+    {
+        case CR0_FAULTCLR_DEFAULT_VAL: case CR0_FAULTCLR_RETURN_FAULTS_TO_ZERO:
+            return registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_1, val);
+        break;
+        default:
+            //LOG("Incorrect parameter selected for Control Register 0 (CR0) bit 1. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
+            return false;
+        break;
     }
-    else if (val==CR0_FAULTCLR_RETURN_FAULTS_TO_ZERO) { 
-        return_val=registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_1, val);
-        LOG("Register containing\t\tsetFaultStatusClear\t\twas programmed with the parameter\t\tCR0_FAULTCLR_RETURN_FAULTS_TO_ZERO\r\n");
-    }
-    else {
-        LOG("Incorrect parameter selected for Control Register 0 (CR0) bit 1. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
-        return_val=0; //returns a 0 to flag that the parameter wasn't programmed due to wrong parameter in function call
-    }
-    return return_val;
 }
 
 
@@ -363,120 +296,53 @@
 //*****************************************************************************
 bool MAX31856::setEmiFilterFreq(uint8_t val) 
 {
-    if      (val==CR0_FILTER_OUT_60Hz) {
-        return_val=registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_0, val);
-        filter_mode=0;
-        //LOG("Register containing\t\tsetEmiFilterFreq\t\twas programmed with the parameter\t\tCR0_FILTER_OUT_60Hz\r\n");
+    switch(val)
+    {
+        case CR0_FILTER_OUT_60Hz: case CR0_FILTER_OUT_50Hz:
+            filter_mode = val;
+            return registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_0, val);
+        break;
+        default:
+            //LOG("Incorrect parameter selected for Control Register 0 (CR0) bit 0. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
+            return false;
+        break;
     }
-    else if (val==CR0_FILTER_OUT_50Hz) {
-        return_val=registerReadWriteByte(ADDRESS_CR0_READ, ADDRESS_CR0_WRITE, CR0_CLEAR_BITS_0, val);
-        filter_mode=1;
-        //LOG("Register containing\t\tsetEmiFilterFreq\t\twas programmed with the parameter\t\tCR0_FILTER_OUT_50Hz\r\n");
-    }
-    else {
-        LOG("Incorrect parameter selected for Control Register 0 (CR0) bit 0. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
-        return_val=0; //returns a 0 to flag that the parameter wasn't programmed due to wrong parameter in function call
-    }
-    return return_val;
 }
 
 
 //Register:CR1    Bits: 6:4
 //*****************************************************************************
 bool MAX31856::setNumSamplesAvg(uint8_t val) 
-{   
-    if      (val==CR1_AVG_TC_SAMPLES_1) {
-        return_val=registerReadWriteByte(ADDRESS_CR1_READ, ADDRESS_CR1_WRITE, CR1_CLEAR_BITS_6_4, val);
-        samples=1;
-        //LOG("Register containing\t\tsetNumSamplesAvg\t\twas programmed with the parameter\t\tCR1_AVG_TC_SAMPLES_1\r\n");
-    }
-    else if (val==CR1_AVG_TC_SAMPLES_2) {
-        return_val=registerReadWriteByte(ADDRESS_CR1_READ, ADDRESS_CR1_WRITE, CR1_CLEAR_BITS_6_4, val);
-        samples=2;
-        //LOG("Register containing\t\tsetNumSamplesAvg\t\twas programmed with the parameter\t\tCR1_AVG_TC_SAMPLES_2\r\n");
-    }
-    else if (val==CR1_AVG_TC_SAMPLES_4) {
-        return_val=registerReadWriteByte(ADDRESS_CR1_READ, ADDRESS_CR1_WRITE, CR1_CLEAR_BITS_6_4, val);
-        samples=4;
-        //LOG("Register containing\t\tsetNumSamplesAvg\t\twas programmed with the parameter\t\tCR1_AVG_TC_SAMPLES_4\r\n");
+{
+    switch(val)
+    {
+        case CR1_AVG_TC_SAMPLES_1: case CR1_AVG_TC_SAMPLES_2: case CR1_AVG_TC_SAMPLES_4: case CR1_AVG_TC_SAMPLES_8: case CR1_AVG_TC_SAMPLES_16:
+            samples = 1 << (val >> 4);
+            return registerReadWriteByte(ADDRESS_CR1_READ, ADDRESS_CR1_WRITE, CR1_CLEAR_BITS_6_4, val);
+        break;
+        default:
+            //LOG("Incorrect parameter selected for Control Register 1 (CR1) bits 6:4. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
+            return false;
+        break;
     }
-    else if (val==CR1_AVG_TC_SAMPLES_8) {
-        return_val=registerReadWriteByte(ADDRESS_CR1_READ, ADDRESS_CR1_WRITE, CR1_CLEAR_BITS_6_4, val);
-        samples=8;
-        //LOG("Register containing\t\tsetNumSamplesAvg\t\twas programmed with the parameter\t\tCR1_AVG_TC_SAMPLES_8\r\n");
-    }
-    else if (val==CR1_AVG_TC_SAMPLES_16) {
-        return_val=registerReadWriteByte(ADDRESS_CR1_READ, ADDRESS_CR1_WRITE, CR1_CLEAR_BITS_6_4, val);
-        samples=16;
-        //LOG("Register containing\t\tsetNumSamplesAvg\t\twas programmed with the parameter\t\tCR1_AVG_TC_SAMPLES_16\r\n");
-    }
-    else {
-        LOG("Incorrect parameter selected for Control Register 1 (CR1) bits 6:4. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
-        return_val=0; //returns a 0 to flag that the parameter wasn't programmed due to wrong parameter in function call
-    }
-    return return_val;
 }
 
 
 //Register:CR1    Bits: 3:0
 //*****************************************************************************
 bool MAX31856::setThermocoupleType(uint8_t val) 
-{   
-    if      (val==CR1_TC_TYPE_B) {
-        return_val=registerReadWriteByte(ADDRESS_CR1_READ, ADDRESS_CR1_WRITE, CR1_CLEAR_BITS_3_0, val);
-        voltage_mode=false;
-        //LOG("Register containing\t\tsetThermocoupleType\t\twas programmed with the parameter\t\tCR1_TC_TYPE_B\r\n");
-    }
-    else if (val==CR1_TC_TYPE_E) {
-        return_val=registerReadWriteByte(ADDRESS_CR1_READ, ADDRESS_CR1_WRITE, CR1_CLEAR_BITS_3_0, val);
-        voltage_mode=false;
-        //LOG("Register containing\t\tsetThermocoupleType\t\twas programmed with the parameter\t\tCR1_TC_TYPE_E\r\n");
-    }
-    else if (val==CR1_TC_TYPE_J) {
-        return_val=registerReadWriteByte(ADDRESS_CR1_READ, ADDRESS_CR1_WRITE, CR1_CLEAR_BITS_3_0, val);
-        voltage_mode=false;
-        //LOG("Register containing\t\tsetThermocoupleType\t\twas programmed with the parameter\t\tCR1_TC_TYPE_J\r\n");
-    }
-    else if (val==CR1_TC_TYPE_K) {
-        return_val=registerReadWriteByte(ADDRESS_CR1_READ, ADDRESS_CR1_WRITE, CR1_CLEAR_BITS_3_0, val);
-        voltage_mode=false;
-        //LOG("Register containing\t\tsetThermocoupleType\t\twas programmed with the parameter\t\tCR1_TC_TYPE_K\r\n");
-    }
-    else if (val==CR1_TC_TYPE_N) {
-        return_val=registerReadWriteByte(ADDRESS_CR1_READ, ADDRESS_CR1_WRITE, CR1_CLEAR_BITS_3_0, val);
-        voltage_mode=false;
-        //LOG("Register containing\t\tsetThermocoupleType\t\twas programmed with the parameter\t\tCR1_TC_TYPE_N\r\n");
+{
+    switch(val)
+    {
+        case CR1_TC_TYPE_B: case CR1_TC_TYPE_E: case CR1_TC_TYPE_J: case CR1_TC_TYPE_K: case CR1_TC_TYPE_N: case CR1_TC_TYPE_R: case CR1_TC_TYPE_S: case CR1_TC_TYPE_T: case CR1_TC_TYPE_VOLT_MODE_GAIN_8: case CR1_TC_TYPE_VOLT_MODE_GAIN_32:
+            voltage_mode = ((val == CR1_TC_TYPE_VOLT_MODE_GAIN_8) || (val == CR1_TC_TYPE_VOLT_MODE_GAIN_32));
+            return registerReadWriteByte(ADDRESS_CR1_READ, ADDRESS_CR1_WRITE, CR1_CLEAR_BITS_3_0, val);
+        break;
+        default:
+            //LOG("Incorrect parameter selected for Control Register 1 (CR1) bits 3:0. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
+            return false;
+        break;
     }
-    else if (val==CR1_TC_TYPE_R) {
-        return_val=registerReadWriteByte(ADDRESS_CR1_READ, ADDRESS_CR1_WRITE, CR1_CLEAR_BITS_3_0, val);
-        voltage_mode=false;
-        //LOG("Register containing\t\tsetThermocoupleType\t\twas programmed with the parameter\t\tCR1_TC_TYPE_R\r\n");
-    }
-    else if (val==CR1_TC_TYPE_S) {
-        return_val=registerReadWriteByte(ADDRESS_CR1_READ, ADDRESS_CR1_WRITE, CR1_CLEAR_BITS_3_0, val);
-        voltage_mode=false;
-        //LOG("Register containing\t\tsetThermocoupleType\t\twas programmed with the parameter\t\tCR1_TC_TYPE_S\r\n");
-    }
-    else if (val==CR1_TC_TYPE_T) {
-        return_val=registerReadWriteByte(ADDRESS_CR1_READ, ADDRESS_CR1_WRITE, CR1_CLEAR_BITS_3_0, val);
-        voltage_mode=false;
-        //LOG("Register containing\t\tsetThermocoupleType\t\twas programmed with the parameter\t\tCR1_TC_TYPE_T\r\n");
-    }
-    else if (val==CR1_TC_TYPE_VOLT_MODE_GAIN_8) {
-        return_val=registerReadWriteByte(ADDRESS_CR1_READ, ADDRESS_CR1_WRITE, CR1_CLEAR_BITS_3_0, val);
-        voltage_mode=true;
-        //LOG("Register containing\t\tsetThermocoupleType\t\twas programmed with the parameter\t\tCR1_TC_TYPE_VOLT_MODE_GAIN_8\r\n");
-    }
-    else if (val==CR1_TC_TYPE_VOLT_MODE_GAIN_32) {
-        return_val=registerReadWriteByte(ADDRESS_CR1_READ, ADDRESS_CR1_WRITE, CR1_CLEAR_BITS_3_0, val);
-        voltage_mode=true;
-        //LOG("Register containing\t\tsetThermocoupleType\t\twas programmed with the parameter\t\tCR1_TC_TYPE_VOLT_MODE_GAIN_32\r\n");
-    }
-    else {
-        LOG("Incorrect parameter selected for Control Register 1 (CR1) bits 3:0. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
-        return_val=0; //returns a 0 to flag that the parameter wasn't programmed due to wrong parameter in function call
-    }
-    return return_val;
 }
 
 
@@ -484,37 +350,32 @@
 //*****************************************************************************
 bool MAX31856::setFaultMasks(uint8_t val, bool enable) 
 {
-    if(enable)
-        val=0;
-    if      (val==MASK_CJ_FAULT_THRESHOLD_HIGH) {          //Cold Junction High Threshold Fault Mask
-        return_val=registerReadWriteByte(ADDRESS_MASK_READ, ADDRESS_MASK_WRITE, MASK_CLEAR_BITS_5, val);
-        LOG("Register containing\t\tsetFaultMasks\t\twas programmed with the parameter\t\tMASK_CJ_FAULT_THRESHOLD_HIGH\r\n");
-    }
-    else if (val==MASK_CJ_FAULT_THRESHOLD_LOW) {           //Cold Junction Low  Threshold Fault Mask
-        return_val=registerReadWriteByte(ADDRESS_MASK_READ, ADDRESS_MASK_WRITE, MASK_CLEAR_BITS_4, val);
-        LOG("Register containing\t\tsetFaultMasks\t\twas programmed with the parameter\t\tMASK_CJ_FAULT_THRESHOLD_LOW\r\n");
-    }
-    else if (val==MASK_TC_FAULT_THRESHOLD_HIGH) {          //Thermocouple High Threshold Fault Mask
-        return_val=registerReadWriteByte(ADDRESS_MASK_READ, ADDRESS_MASK_WRITE, MASK_CLEAR_BITS_3, val);
-        LOG("Register containing\t\tsetFaultMasks\t\twas programmed with the parameter\t\tMASK_TC_FAULT_THRESHOLD_HIGH\r\n");
+    if(enable) val = 0;
+    switch(val)
+    {
+        case MASK_CJ_FAULT_THRESHOLD_HIGH:
+            return registerReadWriteByte(ADDRESS_MASK_READ, ADDRESS_MASK_WRITE, MASK_CLEAR_BITS_5, val);
+        break;
+        case MASK_CJ_FAULT_THRESHOLD_LOW:
+            return registerReadWriteByte(ADDRESS_MASK_READ, ADDRESS_MASK_WRITE, MASK_CLEAR_BITS_4, val);
+        break;
+        case MASK_TC_FAULT_THRESHOLD_HIGH:
+            return registerReadWriteByte(ADDRESS_MASK_READ, ADDRESS_MASK_WRITE, MASK_CLEAR_BITS_3, val);
+        break;
+        case MASK_TC_FAULT_THRESHOLD_LOW:
+            return registerReadWriteByte(ADDRESS_MASK_READ, ADDRESS_MASK_WRITE, MASK_CLEAR_BITS_2, val);
+        break;
+        case MASK_OVER_UNDER_VOLT_FAULT:
+            return registerReadWriteByte(ADDRESS_MASK_READ, ADDRESS_MASK_WRITE, MASK_CLEAR_BITS_1, val);
+        break;
+        case MASK_OPEN_CIRCUIT_FAULT:
+            return registerReadWriteByte(ADDRESS_MASK_READ, ADDRESS_MASK_WRITE, MASK_CLEAR_BITS_0, val);
+        break;
+        default:
+            //LOG("Incorrect parameter selected for Mask Register bits 5:0. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
+            return false;
+        break;
     }
-    else if (val==MASK_TC_FAULT_THRESHOLD_LOW) {           //Thermocouple Low  Threshold Fault Mask
-        return_val=registerReadWriteByte(ADDRESS_MASK_READ, ADDRESS_MASK_WRITE, MASK_CLEAR_BITS_2, val);
-        LOG("Register containing\t\tsetFaultMasks\t\twas programmed with the parameter\t\tMASK_TC_FAULT_THRESHOLD_LOW\r\n");
-    }
-    else if (val==MASK_OVER_UNDER_VOLT_FAULT) {            //Over-Voltage/Under-Voltage Input Fault Mask
-        return_val=registerReadWriteByte(ADDRESS_MASK_READ, ADDRESS_MASK_WRITE, MASK_CLEAR_BITS_1, val);
-        LOG("Register containing\t\tsetFaultMasks\t\twas programmed with the parameter\t\tMASK_OVER_UNDER_VOLT_FAULT\r\n");
-    }
-    else if (val==MASK_OPEN_CIRCUIT_FAULT) {               //Thermocouple Open-Circuit Fault Mask
-        return_val=registerReadWriteByte(ADDRESS_MASK_READ, ADDRESS_MASK_WRITE, MASK_CLEAR_BITS_0, val);
-        LOG("Register containing\t\tsetFaultMasks\t\twas programmed with the parameter\t\tMASK_OPEN_CIRCUIT_FAULT\r\n");
-    }
-    else {
-        LOG("Incorrect parameter selected for Mask Register bits 5:0. Default value not changed.\r\nPlease see MAX31856.h for list of valid parameters. \r\n"); 
-        return_val=0; //returns a 0 to flag that the parameter wasn't programmed due to wrong parameter in function call
-    }
-    return return_val;
 }
 
 
@@ -522,49 +383,45 @@
 //******************************************************************************
 bool MAX31856::setFaultThresholds(uint8_t val, float temperature) 
 {
-    if      (val==MASK_CJ_FAULT_THRESHOLD_HIGH) {          //Cold Junction High Threshold Fault Mask
-        int8_t temperature_byte=temperature;
-        return_val=registerWriteByte(ADDRESS_CJHF_WRITE, temperature_byte);
-    }
-    else if (val==MASK_CJ_FAULT_THRESHOLD_LOW) {           //Cold Junction Low  Threshold Fault Mask
-        int8_t temperature_byte=temperature;
-        return_val=registerWriteByte(ADDRESS_CJLF_WRITE, temperature_byte);
+    switch(val)
+    {
+        case MASK_CJ_FAULT_THRESHOLD_HIGH:
+            return registerWriteByte(ADDRESS_CJHF_WRITE, temperature);
+        break;
+        case MASK_CJ_FAULT_THRESHOLD_LOW:
+            return registerWriteByte(ADDRESS_CJLF_WRITE, temperature);
+        break;
+        case MASK_TC_FAULT_THRESHOLD_HIGH:{
+            int8_t temperature_byte[2];
+            int16_t temperature_multi_byte =temperature*4.0;
+            temperature_byte[0]=((uint8_t)((temperature_multi_byte)&(0xFF00) >> 8));
+            temperature_byte[1]=((uint8_t)((temperature_multi_byte)&(0x00FF)));
+            return registerWriteByte(ADDRESS_LTHFTH_WRITE, temperature_byte[0]) && registerWriteByte(ADDRESS_LTHFTL_WRITE, temperature_byte[1]);}
+        break;
+        case MASK_TC_FAULT_THRESHOLD_LOW:{
+            int8_t temperature_byte[2];
+            int16_t temperature_multi_byte =temperature*4.0;
+            temperature_byte[0]=((uint8_t)((temperature_multi_byte)&(0xFF00) >> 8));
+            temperature_byte[1]=((uint8_t)((temperature_multi_byte)&(0x00FF)));
+            return registerWriteByte(ADDRESS_LTLFTH_WRITE, temperature_byte[0]) && registerWriteByte(ADDRESS_LTLFTL_WRITE, temperature_byte[1]);}
+        break;
+        default:
+            return false;
+            //LOG("Please select correct threshold register to program with the correct value!\r\n");
+        break;
     }
-    else if (val==MASK_TC_FAULT_THRESHOLD_HIGH) {          //Thermocouple High Threshold Fault Mask
-        int8_t temperature_byte[2];
-        int16_t temperature_multi_byte =temperature*4.0;
-        //now split up the 16bit int into two bytes to program the registers with
-        temperature_byte[0]=((uint8_t)((temperature_multi_byte)&(0xFF00) >> 8));
-        temperature_byte[1]=((uint8_t)((temperature_multi_byte)&(0x00FF)));
-        
-        return_val=registerWriteByte(ADDRESS_LTHFTH_WRITE, temperature_byte[0]);
-        return_val=registerWriteByte(ADDRESS_LTHFTL_WRITE, temperature_byte[1]);
-    }
-    else if (val==MASK_TC_FAULT_THRESHOLD_LOW) {          //Thermocouple LOW Threshold Fault Mask
-        int8_t temperature_byte[2];
-        int16_t temperature_multi_byte =temperature*4.0;
-        //now split up the 16bit int into two bytes to program the registers with
-        temperature_byte[0]=((uint8_t)((temperature_multi_byte)&(0xFF00) >> 8));
-        temperature_byte[1]=((uint8_t)((temperature_multi_byte)&(0x00FF)));
-        
-        return_val=registerWriteByte(ADDRESS_LTHFTH_WRITE, temperature_byte[0]);
-        return_val=registerWriteByte(ADDRESS_LTHFTL_WRITE, temperature_byte[1]);
-    }
-    else 
-        LOG("Please select correct threshold register to program with the correct value!\r\n");
-    return return_val;
 }
 
 //******************************************************************************
 bool MAX31856::coldJunctionOffset(float temperature)
 {
-    if (temperature > 7.9375 || temperature < -8.0) {
-        LOG("Input value to offest the cold junction point is non valid. enter in value in range -8 to +7.9375\r\n");
-        return_val = 0;
+    if (temperature > 7.9375 || temperature < -8.0)
+    {
+        //LOG("Input value to offest the cold junction point is non valid. enter in value in range -8 to +7.9375\r\n");
+        return false;
     }
     int8_t temp_val=temperature*16.0f; //normalize the value to get rid of decimal and shorten it to size of register
-    return_val=registerWriteByte(ADDRESS_CJTO_WRITE, temp_val); //write the byte to cold junction offset register
-    return return_val;
+    return registerWriteByte(ADDRESS_CJTO_WRITE, temp_val); //write the byte to cold junction offset register
 }
 
 
@@ -588,40 +445,12 @@
 //******************************************************************************
 bool MAX31856::registerReadWriteByte(uint8_t read_address, uint8_t write_address, int clear_bits, uint8_t val) 
 {   
-    /*uint8_t buf_read[2];
-    
     //Read the current contents of a register
-    spiEnable();
-    for(int i=0; i<2; i++) buf_read[i] = spi.write(read_address);
-    spiDisable();
+    uint8_t buf_read = registerReadByte(read_address);
     
     //Modify contents pulled from the register 
-    buf_read[1] &= clear_bits;    //Clear the contents of bits of parameter you are trying to clear for later or equal operation
-    buf_read[1] |= val;       //Bitwise OR the input parameter with cleaned buf_read[1] to create new byte
-    val = buf_read[1];
-    
-    //Write the updated byte to the register 
-    spiEnable();
-    spi.write(write_address);
-    spi.write(val);
-    spiDisable();
-    //return 1;
-
-    // ajout YSI pour verification
-    spiEnable();
-    for(int i=0; i<2; i++) buf_read[i] = spi.write(read_address);
-    spiDisable();
-    return buf_read[1] == val;*/
-
-    // Version YSI
-    uint8_t buf_read;
-    
-    //Read the current contents of a register
-    buf_read = registerReadByte(read_address);
-    
-    //Modify contents pulled from the register 
-    buf_read &= clear_bits;    //Clear the contents of bits of parameter you are trying to clear for later or equal operation
-    buf_read |= val;       //Bitwise OR the input parameter with cleaned buf_read[1] to create new byte
+    buf_read &= clear_bits; //Clear the contents of bits of parameter you are trying to clear for later or equal operation
+    buf_read |= val;        //Bitwise OR the input parameter with cleaned buf_read[1] to create new byte
     val = buf_read;
     
     //Write the updated byte to the register 
--- a/lib_MAX31856.h	Tue Oct 13 11:57:18 2020 +0000
+++ b/lib_MAX31856.h	Fri Jul 23 08:16:37 2021 +0000
@@ -7,7 +7,7 @@
 *
 * Started: SEPTEMBER 14th 2017
 *
-* Updated: 
+* Updated: Jully 2021 By Yannic Simon
 *
 * @brief Header file for MAX31856 class
 *
@@ -45,9 +45,9 @@
 * ownership rights.
 **********************************************************************/
 
-
 #ifndef MAX31856_h
 #define MAX31856_h
+#include <ctime>
 #include "mbed.h"
 
 //*****************************************************************************
@@ -545,7 +545,7 @@
     ///time in milliseconds that is needed minimum for a new conversion to take place
     uint32_t conversion_time;
 
-    float prev_TC;
+    float prev_TC = NAN;
 };
 
-#endif  /* __MAX31856_H_ */
+#endif  /* __MAX31856_H_ */
\ No newline at end of file