Maxim Integrated / Mbed 2 deprecated MAX31856_example_program

Dependencies:   MAX31856 mbed

Fork of MAX31856_example_program by Central Applications - Mbed Code repo

Committer:
DevinAlexander
Date:
Wed Jul 19 17:05:46 2017 +0000
Revision:
0:456e9e702d57
Child:
1:b58719a76fc3
first commit. Created naming convention for #defines and have started creating functions for some of the functions needed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DevinAlexander 0:456e9e702d57 1 #ifndef MAX31856_h
DevinAlexander 0:456e9e702d57 2 #define MAX31856_h
DevinAlexander 0:456e9e702d57 3
DevinAlexander 0:456e9e702d57 4 #include "mbed.h"
DevinAlexander 0:456e9e702d57 5
DevinAlexander 0:456e9e702d57 6 ///Define all the addresses of the registers in the MAX31856
DevinAlexander 0:456e9e702d57 7 #define MAX31856_ADDRESS_CR0_READ ((uint8_t)(0x00UL)) //Factory Default 00h
DevinAlexander 0:456e9e702d57 8 #define MAX31856_ADDRESS_CR0_WRITE ((uint8_t)(0x80UL))
DevinAlexander 0:456e9e702d57 9 #define MAX31856_ADDRESS_CR1_READ ((uint8_t)(0x01UL)) //Factory Default 03h
DevinAlexander 0:456e9e702d57 10 #define MAX31856_ADDRESS_CR1_WRITE ((uint8_t)(0x81UL))
DevinAlexander 0:456e9e702d57 11 #define MAX31856_ADDRESS_MASK_READ ((uint8_t)(0x02UL)) //Factory Default FFh
DevinAlexander 0:456e9e702d57 12 #define MAX31856_ADDRESS_MASK_WRITE ((uint8_t)(0x82UL))
DevinAlexander 0:456e9e702d57 13 #define MAX31856_ADDRESS_CJHF_READ ((uint8_t)(0x03UL)) //Factory Default 7Fh
DevinAlexander 0:456e9e702d57 14 #define MAX31856_ADDRESS_CJHF_WRITE ((uint8_t)(0x83UL))
DevinAlexander 0:456e9e702d57 15 #define MAX31856_ADDRESS_CJLF_READ ((uint8_t)(0x04UL)) //Factory Default C0h
DevinAlexander 0:456e9e702d57 16 #define MAX31856_ADDRESS_CJLF_WRITE ((uint8_t)(0x84UL))
DevinAlexander 0:456e9e702d57 17 #define MAX31856_ADDRESS_LTHFTH_READ ((uint8_t)(0x05UL)) //Factory Default 7Fh
DevinAlexander 0:456e9e702d57 18 #define MAX31856_ADDRESS_LTHFTH_WRITE ((uint8_t)(0x85UL))
DevinAlexander 0:456e9e702d57 19 #define MAX31856_ADDRESS_LTHFTL_READ ((uint8_t)(0x06UL)) //Factory Default FFh
DevinAlexander 0:456e9e702d57 20 #define MAX31856_ADDRESS_LTHFTL_WRITE ((uint8_t)(0x86UL))
DevinAlexander 0:456e9e702d57 21 #define MAX31856_ADDRESS_LTLFTH_READ ((uint8_t)(0x07UL)) //Factory Default 80h
DevinAlexander 0:456e9e702d57 22 #define MAX31856_ADDRESS_LTLFTH_WRITE ((uint8_t)(0x87UL))
DevinAlexander 0:456e9e702d57 23 #define MAX31856_ADDRESS_LTLFTL_READ ((uint8_t)(0x08UL)) //Factory Default 00h
DevinAlexander 0:456e9e702d57 24 #define MAX31856_ADDRESS_LTLFTL_WRITE ((uint8_t)(0x88UL))
DevinAlexander 0:456e9e702d57 25 #define MAX31856_ADDRESS_CJTO_READ ((uint8_t)(0x09UL)) //Factory Default 00h
DevinAlexander 0:456e9e702d57 26 #define MAX31856_ADDRESS_CJTO_WRITE ((uint8_t)(0x89UL))
DevinAlexander 0:456e9e702d57 27 #define MAX31856_ADDRESS_CJTH_READ ((uint8_t)(0x0AUL)) //Factory Default 00h
DevinAlexander 0:456e9e702d57 28 #define MAX31856_ADDRESS_CJTH_WRITE ((uint8_t)(0x8AUL))
DevinAlexander 0:456e9e702d57 29 #define MAX31856_ADDRESS_CJTL_READ ((uint8_t)(0x0BUL)) //Factory Default 00h
DevinAlexander 0:456e9e702d57 30 #define MAX31856_ADDRESS_CJTL_WRITE ((uint8_t)(0x8BUL))
DevinAlexander 0:456e9e702d57 31 #define MAX31856_ADDRESS_LTCBH_READ ((uint8_t)(0x0CUL))
DevinAlexander 0:456e9e702d57 32 #define MAX31856_ADDRESS_LTCBM_READ ((uint8_t)(0x0DUL))
DevinAlexander 0:456e9e702d57 33 #define MAX31856_ADDRESS_LTCBL_READ ((uint8_t)(0x0EUL))
DevinAlexander 0:456e9e702d57 34 #define MAX31856_ADDRESS_SR_READ ((uint8_t)(0x0FUL))
DevinAlexander 0:456e9e702d57 35
DevinAlexander 0:456e9e702d57 36
DevinAlexander 0:456e9e702d57 37 ///Define parameters for control register zero (CR0)
DevinAlexander 0:456e9e702d57 38 #define MAX31856_CR0_CONV_MODE_NORMALLY_OFF ((uint8_t)(0x00UL << 7)) //Power On Default value
DevinAlexander 0:456e9e702d57 39 #define MAX31856_CR0_CONV_MODE_ALWAYS_ON ((uint8_t)(0x01UL << 7))
DevinAlexander 0:456e9e702d57 40
DevinAlexander 0:456e9e702d57 41 #define MAX31856_CR0_1_SHOT_MODE_NO_CONVERSIONS ((uint8_t)(0x00UL << 6)) //defaults to this value
DevinAlexander 0:456e9e702d57 42 #define MAX31856_CR0_1_SHOT_MODE_ONE_CONVERSION ((uint8_t)(0x01UL << 6)) //^
DevinAlexander 0:456e9e702d57 43
DevinAlexander 0:456e9e702d57 44 #define MAX31856_CR0_OC_DETECT_DISABLED ((uint8_t)(0x00UL << 4)) //
DevinAlexander 0:456e9e702d57 45 #define MAX31856_CR0_OC_DETECT_ENABLED_R_LESS_5k ((uint8_t)(0x01UL << 4))
DevinAlexander 0:456e9e702d57 46 #define MAX31856_CR0_OC_DETECT_ENABLED_TC_LESS_2ms ((uint8_t)(0x02UL << 4))
DevinAlexander 0:456e9e702d57 47 #define MAX31856_CR0_OC_DETECT_ENABLED_TC_MORE_2ms ((uint8_t)(0x03UL << 4))
DevinAlexander 0:456e9e702d57 48
DevinAlexander 0:456e9e702d57 49 #define MAX31856_CR0_COLD_JUNC_ENABLE ((uint8_t)(0x00UL << 3)) //Power On Default value
DevinAlexander 0:456e9e702d57 50 #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)
DevinAlexander 0:456e9e702d57 51
DevinAlexander 0:456e9e702d57 52 #define MAX31856_CR0_FAULT_MODE_COMPARATOR ((uint8_t)(0x00UL << 2)) //Power On Default value
DevinAlexander 0:456e9e702d57 53 #define MAX31856_CR0_FAULT_MODE_INTERUPT ((uint8_t)(0x01UL << 2))
DevinAlexander 0:456e9e702d57 54
DevinAlexander 0:456e9e702d57 55 #define MAX31856_CR0_FAULTCLR_NULL ((uint8_t)(0x00UL << 1)) //defaults to this value
DevinAlexander 0:456e9e702d57 56 #define MAX31856_CR0_FAULTCLR_RETURN_FAULTS_TO_ZERO ((uint8_t)(0x01UL << 1)) //^
DevinAlexander 0:456e9e702d57 57
DevinAlexander 0:456e9e702d57 58 #define MAX31856_CR0_FILTER_OUT_60Hz ((uint8_t)(0x00UL)) //Preset value
DevinAlexander 0:456e9e702d57 59 #define MAX31856_CR0_FILTER_OUT_50Hz ((uint8_t)(0x01UL)) //^
DevinAlexander 0:456e9e702d57 60
DevinAlexander 0:456e9e702d57 61
DevinAlexander 0:456e9e702d57 62
DevinAlexander 0:456e9e702d57 63 ///Define parameters for control register one (CR1)
DevinAlexander 0:456e9e702d57 64 /** Adding Samples increases the conversion time and reduces noise.
DevinAlexander 0:456e9e702d57 65 Typical conversion times:
DevinAlexander 0:456e9e702d57 66 1-shot or first conversion in Auto mode:
DevinAlexander 0:456e9e702d57 67 = t_Conversion + (samples-1)*33.33mS (60Hz rejection)
DevinAlexander 0:456e9e702d57 68 = t_Conversion + (samples-1)*40.00mS (50Hz rejection)
DevinAlexander 0:456e9e702d57 69 2 thru n conversions in Auto mode:
DevinAlexander 0:456e9e702d57 70 = t_Conversion + (samples-1)*16.67mS (60Hz rejection)
DevinAlexander 0:456e9e702d57 71 = t_Conversion + (samples-1)*20.00mS (50Hz rejection)
DevinAlexander 0:456e9e702d57 72 */
DevinAlexander 0:456e9e702d57 73 #define MAX31856_CR1_CLEAR_PREV_VOLT_AVG_SAMPLES ~((uint8_t)(0x07UL << 4))
DevinAlexander 0:456e9e702d57 74 #define MAX31856_CR1_AVG_TC_SAMPLES_1 ((uint8_t)(0x00UL << 4)) //Power on default value
DevinAlexander 0:456e9e702d57 75 #define MAX31856_CR1_AVG_TC_SAMPLES_2 ((uint8_t)(0x01UL << 4))
DevinAlexander 0:456e9e702d57 76 #define MAX31856_CR1_AVG_TC_SAMPLES_4 ((uint8_t)(0x02UL << 4))
DevinAlexander 0:456e9e702d57 77 #define MAX31856_CR1_AVG_TC_SAMPLES_8 ((uint8_t)(0x03UL << 4))
DevinAlexander 0:456e9e702d57 78 #define MAX31856_CR1_AVG_TC_SAMPLES_16 ((uint8_t)(0x04UL << 4))
DevinAlexander 0:456e9e702d57 79
DevinAlexander 0:456e9e702d57 80 /** Define which type of thermocouple the MAX31856 is using. This is for lineariztion purposes*/
DevinAlexander 0:456e9e702d57 81 #define MAX31856_CR1_CLEAR_PREV_TC_TYPE ~((uint8_t)(0x0FUL))
DevinAlexander 0:456e9e702d57 82 #define MAX31856_CR1_TC_TYPE_B ((uint8_t)(0x00UL))
DevinAlexander 0:456e9e702d57 83 #define MAX31856_CR1_TC_TYPE_E ((uint8_t)(0x01UL))
DevinAlexander 0:456e9e702d57 84 #define MAX31856_CR1_TC_TYPE_J ((uint8_t)(0x02UL))
DevinAlexander 0:456e9e702d57 85 #define MAX31856_CR1_TC_TYPE_K ((uint8_t)(0x03UL)) //Power on default value
DevinAlexander 0:456e9e702d57 86 #define MAX31856_CR1_TC_TYPE_N ((uint8_t)(0x04UL))
DevinAlexander 0:456e9e702d57 87 #define MAX31856_CR1_TC_TYPE_R ((uint8_t)(0x05UL))
DevinAlexander 0:456e9e702d57 88 #define MAX31856_CR1_TC_TYPE_S ((uint8_t)(0x06UL))
DevinAlexander 0:456e9e702d57 89 #define MAX31856_CR1_TC_TYPE_T ((uint8_t)(0x07UL))
DevinAlexander 0:456e9e702d57 90 #define MAX31856_CR1_TC_TYPE_VOLT_MODE_GAIN_8 ((uint8_t)(0x08UL))
DevinAlexander 0:456e9e702d57 91 #define MAX31856_CR1_TC_TYPE_VOLT_MODE_GAIN_32 ((uint8_t)(0x0CUL))
DevinAlexander 0:456e9e702d57 92
DevinAlexander 0:456e9e702d57 93 //The following are predefined times that the MAX31856 needs to wait in between
DevinAlexander 0:456e9e702d57 94 #define MAX31856_MIN_TIME_BETWEEN_READINGS
DevinAlexander 0:456e9e702d57 95
DevinAlexander 0:456e9e702d57 96
DevinAlexander 0:456e9e702d57 97
DevinAlexander 0:456e9e702d57 98 class MAX31856
DevinAlexander 0:456e9e702d57 99 {
DevinAlexander 0:456e9e702d57 100 // public:
DevinAlexander 0:456e9e702d57 101 // typedef enum {
DevinAlexander 0:456e9e702d57 102 // THERMOCOUPLE_T = 0,
DevinAlexander 0:456e9e702d57 103 // INTERNAL_T = 1,
DevinAlexander 0:456e9e702d57 104 // } temperature_type_t;
DevinAlexander 0:456e9e702d57 105
DevinAlexander 0:456e9e702d57 106
DevinAlexander 0:456e9e702d57 107 public:
DevinAlexander 0:456e9e702d57 108 MAX31856(SPI& _spi, PinName _ncs, uint8_t _type=MAX31856_CR1_TC_TYPE_K, uint8_t _fltr=MAX31856_CR0_FILTER_OUT_60Hz);
DevinAlexander 0:456e9e702d57 109 // float read(temperature_type_t type = THERMOCOUPLE_T);
DevinAlexander 0:456e9e702d57 110
DevinAlexander 0:456e9e702d57 111 void spiEnable();
DevinAlexander 0:456e9e702d57 112 void spiDisable();
DevinAlexander 0:456e9e702d57 113 float readTC();
DevinAlexander 0:456e9e702d57 114 float readCJ();
DevinAlexander 0:456e9e702d57 115 int setNumSamplesAvg(uint8_t val);
DevinAlexander 0:456e9e702d57 116 int setThermocoupleType(uint8_t val);
DevinAlexander 0:456e9e702d57 117 int setEmiFilterFreq(uint8_t val);
DevinAlexander 0:456e9e702d57 118
DevinAlexander 0:456e9e702d57 119 private:
DevinAlexander 0:456e9e702d57 120 SPI& spi;
DevinAlexander 0:456e9e702d57 121 DigitalOut ncs;
DevinAlexander 0:456e9e702d57 122 float thermocoupleT;
DevinAlexander 0:456e9e702d57 123 float internalT;
DevinAlexander 0:456e9e702d57 124 uint32_t lastReadTime;
DevinAlexander 0:456e9e702d57 125 };
DevinAlexander 0:456e9e702d57 126
DevinAlexander 0:456e9e702d57 127 #endif // __MAX31855_H__