Maxim Integrated / Mbed 2 deprecated MAX31856_example_program

Dependencies:   MAX31856 mbed

Fork of MAX31856_example_program by Central Applications - Mbed Code repo

MAX31856.h

Committer:
DevinAlexander
Date:
2017-07-19
Revision:
0:456e9e702d57
Child:
1:b58719a76fc3

File content as of revision 0:456e9e702d57:

#ifndef MAX31856_h
#define MAX31856_h

#include "mbed.h"

///Define all the addresses of the registers in the MAX31856 
#define MAX31856_ADDRESS_CR0_READ                           ((uint8_t)(0x00UL))     //Factory Default 00h
#define MAX31856_ADDRESS_CR0_WRITE                          ((uint8_t)(0x80UL))
#define MAX31856_ADDRESS_CR1_READ                           ((uint8_t)(0x01UL))     //Factory Default 03h
#define MAX31856_ADDRESS_CR1_WRITE                          ((uint8_t)(0x81UL))
#define MAX31856_ADDRESS_MASK_READ                          ((uint8_t)(0x02UL))     //Factory Default FFh
#define MAX31856_ADDRESS_MASK_WRITE                         ((uint8_t)(0x82UL))
#define MAX31856_ADDRESS_CJHF_READ                          ((uint8_t)(0x03UL))     //Factory Default 7Fh
#define MAX31856_ADDRESS_CJHF_WRITE                         ((uint8_t)(0x83UL))
#define MAX31856_ADDRESS_CJLF_READ                          ((uint8_t)(0x04UL))     //Factory Default C0h
#define MAX31856_ADDRESS_CJLF_WRITE                         ((uint8_t)(0x84UL))
#define MAX31856_ADDRESS_LTHFTH_READ                        ((uint8_t)(0x05UL))     //Factory Default 7Fh
#define MAX31856_ADDRESS_LTHFTH_WRITE                       ((uint8_t)(0x85UL))
#define MAX31856_ADDRESS_LTHFTL_READ                        ((uint8_t)(0x06UL))     //Factory Default FFh
#define MAX31856_ADDRESS_LTHFTL_WRITE                       ((uint8_t)(0x86UL))
#define MAX31856_ADDRESS_LTLFTH_READ                        ((uint8_t)(0x07UL))     //Factory Default 80h
#define MAX31856_ADDRESS_LTLFTH_WRITE                       ((uint8_t)(0x87UL))
#define MAX31856_ADDRESS_LTLFTL_READ                        ((uint8_t)(0x08UL))     //Factory Default 00h
#define MAX31856_ADDRESS_LTLFTL_WRITE                       ((uint8_t)(0x88UL))
#define MAX31856_ADDRESS_CJTO_READ                          ((uint8_t)(0x09UL))     //Factory Default 00h
#define MAX31856_ADDRESS_CJTO_WRITE                         ((uint8_t)(0x89UL))
#define MAX31856_ADDRESS_CJTH_READ                          ((uint8_t)(0x0AUL))     //Factory Default 00h
#define MAX31856_ADDRESS_CJTH_WRITE                         ((uint8_t)(0x8AUL))
#define MAX31856_ADDRESS_CJTL_READ                          ((uint8_t)(0x0BUL))     //Factory Default 00h
#define MAX31856_ADDRESS_CJTL_WRITE                         ((uint8_t)(0x8BUL))
#define MAX31856_ADDRESS_LTCBH_READ                         ((uint8_t)(0x0CUL))
#define MAX31856_ADDRESS_LTCBM_READ                         ((uint8_t)(0x0DUL))
#define MAX31856_ADDRESS_LTCBL_READ                         ((uint8_t)(0x0EUL))
#define MAX31856_ADDRESS_SR_READ                            ((uint8_t)(0x0FUL))


///Define parameters for control register zero (CR0)
#define MAX31856_CR0_CONV_MODE_NORMALLY_OFF                 ((uint8_t)(0x00UL << 7)) //Power On Default value
#define MAX31856_CR0_CONV_MODE_ALWAYS_ON                    ((uint8_t)(0x01UL << 7))

#define MAX31856_CR0_1_SHOT_MODE_NO_CONVERSIONS             ((uint8_t)(0x00UL << 6)) //defaults to this value
#define MAX31856_CR0_1_SHOT_MODE_ONE_CONVERSION             ((uint8_t)(0x01UL << 6)) //^

#define MAX31856_CR0_OC_DETECT_DISABLED                     ((uint8_t)(0x00UL << 4)) //
#define MAX31856_CR0_OC_DETECT_ENABLED_R_LESS_5k            ((uint8_t)(0x01UL << 4))
#define MAX31856_CR0_OC_DETECT_ENABLED_TC_LESS_2ms          ((uint8_t)(0x02UL << 4))
#define MAX31856_CR0_OC_DETECT_ENABLED_TC_MORE_2ms          ((uint8_t)(0x03UL << 4))

#define MAX31856_CR0_COLD_JUNC_ENABLE                       ((uint8_t)(0x00UL << 3)) //Power On Default value
#define MAX31856_CR0_COLD_JUNC_DISABLE                      ((uint8_t)(0x01UL << 3)) //speed of conversion is sped up by 25ms when this optionis selected (Disable the cold junc)

#define MAX31856_CR0_FAULT_MODE_COMPARATOR                  ((uint8_t)(0x00UL << 2)) //Power On Default value
#define MAX31856_CR0_FAULT_MODE_INTERUPT                    ((uint8_t)(0x01UL << 2)) 

#define MAX31856_CR0_FAULTCLR_NULL                          ((uint8_t)(0x00UL << 1)) //defaults to this value
#define MAX31856_CR0_FAULTCLR_RETURN_FAULTS_TO_ZERO         ((uint8_t)(0x01UL << 1)) //^

#define MAX31856_CR0_FILTER_OUT_60Hz                        ((uint8_t)(0x00UL)) //Preset value
#define MAX31856_CR0_FILTER_OUT_50Hz                        ((uint8_t)(0x01UL)) //^



///Define parameters for control register one (CR1)
/** Adding Samples increases the conversion time and reduces noise.
    Typical conversion times:
        1-shot or first conversion in Auto mode:
            = t_Conversion + (samples-1)*33.33mS (60Hz rejection)
            = t_Conversion + (samples-1)*40.00mS (50Hz rejection)
        2 thru n conversions in Auto mode:
            = t_Conversion + (samples-1)*16.67mS (60Hz rejection)
            = t_Conversion + (samples-1)*20.00mS (50Hz rejection)
*/
#define MAX31856_CR1_CLEAR_PREV_VOLT_AVG_SAMPLES            ~((uint8_t)(0x07UL << 4))
#define MAX31856_CR1_AVG_TC_SAMPLES_1                       ((uint8_t)(0x00UL << 4)) //Power on default value
#define MAX31856_CR1_AVG_TC_SAMPLES_2                       ((uint8_t)(0x01UL << 4))
#define MAX31856_CR1_AVG_TC_SAMPLES_4                       ((uint8_t)(0x02UL << 4))
#define MAX31856_CR1_AVG_TC_SAMPLES_8                       ((uint8_t)(0x03UL << 4))
#define MAX31856_CR1_AVG_TC_SAMPLES_16                      ((uint8_t)(0x04UL << 4))

/** Define which type of thermocouple the MAX31856 is using. This is for lineariztion purposes*/
#define MAX31856_CR1_CLEAR_PREV_TC_TYPE                     ~((uint8_t)(0x0FUL))
#define MAX31856_CR1_TC_TYPE_B                              ((uint8_t)(0x00UL))
#define MAX31856_CR1_TC_TYPE_E                              ((uint8_t)(0x01UL))
#define MAX31856_CR1_TC_TYPE_J                              ((uint8_t)(0x02UL))
#define MAX31856_CR1_TC_TYPE_K                              ((uint8_t)(0x03UL)) //Power on default value
#define MAX31856_CR1_TC_TYPE_N                              ((uint8_t)(0x04UL))
#define MAX31856_CR1_TC_TYPE_R                              ((uint8_t)(0x05UL))
#define MAX31856_CR1_TC_TYPE_S                              ((uint8_t)(0x06UL))
#define MAX31856_CR1_TC_TYPE_T                              ((uint8_t)(0x07UL))
#define MAX31856_CR1_TC_TYPE_VOLT_MODE_GAIN_8               ((uint8_t)(0x08UL))
#define MAX31856_CR1_TC_TYPE_VOLT_MODE_GAIN_32              ((uint8_t)(0x0CUL))

//The following are predefined times that the MAX31856 needs to wait in between 
#define MAX31856_MIN_TIME_BETWEEN_READINGS



class MAX31856
{
//    public:
//        typedef enum {
//           THERMOCOUPLE_T = 0,
//            INTERNAL_T     = 1,
//        } temperature_type_t;
        
        
    public:
        MAX31856(SPI& _spi, PinName _ncs, uint8_t _type=MAX31856_CR1_TC_TYPE_K, uint8_t _fltr=MAX31856_CR0_FILTER_OUT_60Hz); 
//        float read(temperature_type_t type = THERMOCOUPLE_T);
        
        void spiEnable();
        void spiDisable();
        float readTC();
        float readCJ();
        int setNumSamplesAvg(uint8_t val);
        int setThermocoupleType(uint8_t val);
        int setEmiFilterFreq(uint8_t val);
  
  private:
    SPI& spi;
    DigitalOut ncs;
    float thermocoupleT;
    float internalT;
    uint32_t lastReadTime;
};

#endif // __MAX31855_H__