Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of MAX31856_example_program by
MAX31856.h@0:456e9e702d57, 2017-07-19 (annotated)
- 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?
User | Revision | Line number | New 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__ |