Maxim Integrated / Mbed 2 deprecated MAX31856_example_program

Dependencies:   MAX31856 mbed

Fork of MAX31856_example_program by Central Applications - Mbed Code repo

Revision:
0:456e9e702d57
Child:
1:b58719a76fc3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MAX31856.h	Wed Jul 19 17:05:46 2017 +0000
@@ -0,0 +1,127 @@
+#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__