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 #include <mbed.h>
DevinAlexander 0:456e9e702d57 2 #include "MAX31856.h"
DevinAlexander 0:456e9e702d57 3
DevinAlexander 0:456e9e702d57 4 #define LOG(args...) printf(args)
DevinAlexander 0:456e9e702d57 5
DevinAlexander 0:456e9e702d57 6 MAX31856::MAX31856(SPI& _spi, PinName _ncs, uint8_t _type, uint8_t _fltr) : spi(_spi), ncs(_ncs)//, setThermocoupleType(_type), setEmiFilterFreq(_fltr)
DevinAlexander 0:456e9e702d57 7 {
DevinAlexander 0:456e9e702d57 8 setThermocoupleType(_type);
DevinAlexander 0:456e9e702d57 9 setEmiFilterFreq(_fltr);
DevinAlexander 0:456e9e702d57 10 }
DevinAlexander 0:456e9e702d57 11
DevinAlexander 0:456e9e702d57 12 float MAX31856::readTC()
DevinAlexander 0:456e9e702d57 13 {
DevinAlexander 0:456e9e702d57 14 int32_t temp;
DevinAlexander 0:456e9e702d57 15 uint8_t buf_read[4], buf_write=MAX31856_ADDRESS_LTCBH_READ;
DevinAlexander 0:456e9e702d57 16
DevinAlexander 0:456e9e702d57 17 spiEnable();
DevinAlexander 0:456e9e702d57 18 for(int i=0; i<4; i++)
DevinAlexander 0:456e9e702d57 19 {
DevinAlexander 0:456e9e702d57 20 buf_read[i]=spi.write(buf_write);
DevinAlexander 0:456e9e702d57 21 }
DevinAlexander 0:456e9e702d57 22 spiDisable();
DevinAlexander 0:456e9e702d57 23
DevinAlexander 0:456e9e702d57 24 //Convert the registers contents into the correct value
DevinAlexander 0:456e9e702d57 25 temp =((int32_t)(buf_read[1] << 16)); //Shift Byte 2 into place
DevinAlexander 0:456e9e702d57 26 temp|=((int32_t)(buf_read[2] << 3)); //Shift Byte 1 into place
DevinAlexander 0:456e9e702d57 27 temp|=((int32_t)(buf_read[3] >> 5)); //Shift Byte 0 into place
DevinAlexander 0:456e9e702d57 28 float val=((float)(temp/128.0)); //Divide the binary string by 2 to the 7th power
DevinAlexander 0:456e9e702d57 29 return val;
DevinAlexander 0:456e9e702d57 30 }
DevinAlexander 0:456e9e702d57 31
DevinAlexander 0:456e9e702d57 32 float MAX31856::readCJ()
DevinAlexander 0:456e9e702d57 33 {
DevinAlexander 0:456e9e702d57 34 int32_t temp;
DevinAlexander 0:456e9e702d57 35 uint8_t buf_read[3], buf_write=MAX31856_ADDRESS_CJTH_READ;
DevinAlexander 0:456e9e702d57 36
DevinAlexander 0:456e9e702d57 37 spiEnable();
DevinAlexander 0:456e9e702d57 38 for(int i=0; i<3; i++)
DevinAlexander 0:456e9e702d57 39 {
DevinAlexander 0:456e9e702d57 40 buf_read[i]=spi.write(buf_write);
DevinAlexander 0:456e9e702d57 41 }
DevinAlexander 0:456e9e702d57 42 spiDisable();
DevinAlexander 0:456e9e702d57 43
DevinAlexander 0:456e9e702d57 44 //Convert the registers contents into the correct value
DevinAlexander 0:456e9e702d57 45 temp =((int32_t)(buf_read[1] << 6)); //Shift the MSB into place
DevinAlexander 0:456e9e702d57 46 temp|=((int32_t)(buf_read[2] >> 2)); //Shift the LSB into place
DevinAlexander 0:456e9e702d57 47 float val=((float)(temp/64.0)); //Divide the binary string by 2 to the 6th power
DevinAlexander 0:456e9e702d57 48
DevinAlexander 0:456e9e702d57 49 return val;
DevinAlexander 0:456e9e702d57 50 }
DevinAlexander 0:456e9e702d57 51
DevinAlexander 0:456e9e702d57 52 bool MAX31856::setNumSamplesAvg(uint8_t val)
DevinAlexander 0:456e9e702d57 53 {
DevinAlexander 0:456e9e702d57 54 int return_val;
DevinAlexander 0:456e9e702d57 55 //Check if the parameter passed in is valid
DevinAlexander 0:456e9e702d57 56 if (val==MAX31856_CR1_AVG_TC_SAMPLES_1 || val==MAX31856_CR1_AVG_TC_SAMPLES_2 || val==MAX31856_CR1_AVG_TC_SAMPLES_4 || val==MAX31856_CR1_AVG_TC_SAMPLES_8 || val==MAX31856_CR1_AVG_TC_SAMPLES_16)
DevinAlexander 0:456e9e702d57 57 {
DevinAlexander 0:456e9e702d57 58 uint8_t buf_read[2], buf_write=MAX31856_ADDRESS_CR1_READ;
DevinAlexander 0:456e9e702d57 59 //Read the current contents of CR1
DevinAlexander 0:456e9e702d57 60 spiEnable();
DevinAlexander 0:456e9e702d57 61 for(int i=0; i<2; i++)
DevinAlexander 0:456e9e702d57 62 {
DevinAlexander 0:456e9e702d57 63 buf_read[i]=spi.write(buf_write);
DevinAlexander 0:456e9e702d57 64 }
DevinAlexander 0:456e9e702d57 65 spiDisable();
DevinAlexander 0:456e9e702d57 66 //Modify contents of CR1
DevinAlexander 0:456e9e702d57 67 buf_read[1]&=MAX31856_CR1_CLEAR_PREV_VOLT_AVG_SAMPLES; //Clear the contents of bits 6:4 of CR1 to 000 to set new parameter
DevinAlexander 0:456e9e702d57 68 buf_read[1]|=val; //Bitwise OR the input parameter with cleaned buf_read[1] to create new byte for CR1
DevinAlexander 0:456e9e702d57 69 buf_write=buf_read[1];
DevinAlexander 0:456e9e702d57 70 //Write the contents of CR1 with the updated bits 6:4 needed for setting number of samples to average
DevinAlexander 0:456e9e702d57 71 spiEnable();
DevinAlexander 0:456e9e702d57 72 for(int i=0; i<2; i++)
DevinAlexander 0:456e9e702d57 73 {
DevinAlexander 0:456e9e702d57 74 buf_read[i]=spi.write(buf_write);
DevinAlexander 0:456e9e702d57 75 }
DevinAlexander 0:456e9e702d57 76 spiDisable();
DevinAlexander 0:456e9e702d57 77 return_val=1; //returns a 1 to flag that the parameter was programmed
DevinAlexander 0:456e9e702d57 78 }
DevinAlexander 0:456e9e702d57 79 else
DevinAlexander 0:456e9e702d57 80 {
DevinAlexander 0:456e9e702d57 81 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");
DevinAlexander 0:456e9e702d57 82 return_val=0; //returns a 0 to flag that the parameter wasn't programmed due to wrong parameter in function call
DevinAlexander 0:456e9e702d57 83 }
DevinAlexander 0:456e9e702d57 84 return return_val;
DevinAlexander 0:456e9e702d57 85 }
DevinAlexander 0:456e9e702d57 86
DevinAlexander 0:456e9e702d57 87 bool MAX31856::setThermocoupleType(uint8_t val)
DevinAlexander 0:456e9e702d57 88 {
DevinAlexander 0:456e9e702d57 89 int return_val;
DevinAlexander 0:456e9e702d57 90 //Check if the parameter passed in is valid
DevinAlexander 0:456e9e702d57 91 if (val==MAX31856_CR1_TC_TYPE_B || val==MAX31856_CR1_TC_TYPE_E || val==MAX31856_CR1_TC_TYPE_J || val==MAX31856_CR1_TC_TYPE_K || val==MAX31856_CR1_TC_TYPE_N || val==MAX31856_CR1_TC_TYPE_R || val==MAX31856_CR1_TC_TYPE_S || val==MAX31856_CR1_TC_TYPE_T || val==MAX31856_CR1_TC_TYPE_VOLT_MODE_GAIN_8 || val==MAX31856_CR1_TC_TYPE_VOLT_MODE_GAIN_32)
DevinAlexander 0:456e9e702d57 92 {
DevinAlexander 0:456e9e702d57 93 uint8_t buf_read[2], buf_write=MAX31856_ADDRESS_CR1_READ;
DevinAlexander 0:456e9e702d57 94 //Read the current contents of CR1
DevinAlexander 0:456e9e702d57 95 spiEnable();
DevinAlexander 0:456e9e702d57 96 for(int i=0; i<2; i++)
DevinAlexander 0:456e9e702d57 97 {
DevinAlexander 0:456e9e702d57 98 buf_read[i]=spi.write(buf_write);
DevinAlexander 0:456e9e702d57 99 }
DevinAlexander 0:456e9e702d57 100 spiDisable();
DevinAlexander 0:456e9e702d57 101 //Modify contents of CR1
DevinAlexander 0:456e9e702d57 102 buf_read[1]&=MAX31856_CR1_CLEAR_PREV_TC_TYPE; //Clear the contents of bits 3:0 of CR1 to 0000 to set new thermocouple type
DevinAlexander 0:456e9e702d57 103 buf_read[1]|=val; //Bitwise OR the input parameter with cleaned buf_read[1] to create new byte for CR1
DevinAlexander 0:456e9e702d57 104 val=buf_read[1];
DevinAlexander 0:456e9e702d57 105 //Write the contents of CR1 with the updated bits 6:4 needed for setting new thermocouple type
DevinAlexander 0:456e9e702d57 106 spiEnable();
DevinAlexander 0:456e9e702d57 107 for(int i=0; i<2; i++)
DevinAlexander 0:456e9e702d57 108 {
DevinAlexander 0:456e9e702d57 109 buf_read[i]=spi.write(buf_write);
DevinAlexander 0:456e9e702d57 110 }
DevinAlexander 0:456e9e702d57 111 spiDisable();
DevinAlexander 0:456e9e702d57 112 return_val=1; //returns a 1 to flag that the parameter was programmed
DevinAlexander 0:456e9e702d57 113 }
DevinAlexander 0:456e9e702d57 114 else
DevinAlexander 0:456e9e702d57 115 {
DevinAlexander 0:456e9e702d57 116 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");
DevinAlexander 0:456e9e702d57 117 return_val=0; //returns a 0 to flag that the parameter wasn't programmed due to wrong parameter in function call
DevinAlexander 0:456e9e702d57 118 }
DevinAlexander 0:456e9e702d57 119 return return_val;
DevinAlexander 0:456e9e702d57 120 }
DevinAlexander 0:456e9e702d57 121
DevinAlexander 0:456e9e702d57 122
DevinAlexander 0:456e9e702d57 123 bool MAX31856::changeOneBit(uint8_t address, uint8_t val)
DevinAlexander 0:456e9e702d57 124 {
DevinAlexander 0:456e9e702d57 125 uint8_t inverse_val=~(val), buf_read[2], buf_write=address;
DevinAlexander 0:456e9e702d57 126 //Read the current contents of a register
DevinAlexander 0:456e9e702d57 127 spiEnable();
DevinAlexander 0:456e9e702d57 128 for(int i=0; i<2; i++)
DevinAlexander 0:456e9e702d57 129 {
DevinAlexander 0:456e9e702d57 130 buf_read[i]=spi.write(buf_write);
DevinAlexander 0:456e9e702d57 131 }
DevinAlexander 0:456e9e702d57 132 spiDisable();
DevinAlexander 0:456e9e702d57 133 //Modify contents of CR1
DevinAlexander 0:456e9e702d57 134 buf_read[1]&=inverse_val; //Clear the contents of bits of parameter you are trying to clear for later or equal operation
DevinAlexander 0:456e9e702d57 135 buf_read[1]|=val; //Bitwise OR the input parameter with cleaned buf_read[1] to create new byte
DevinAlexander 0:456e9e702d57 136 val=buf_read[1];
DevinAlexander 0:456e9e702d57 137 //Write the updated byte to the register
DevinAlexander 0:456e9e702d57 138 spiEnable();
DevinAlexander 0:456e9e702d57 139 buf_read[0]=spi.write(address);
DevinAlexander 0:456e9e702d57 140 buf_read[1]=spi.write(val);
DevinAlexander 0:456e9e702d57 141 spiDisable();
DevinAlexander 0:456e9e702d57 142 return true;
DevinAlexander 0:456e9e702d57 143 }
DevinAlexander 0:456e9e702d57 144
DevinAlexander 0:456e9e702d57 145
DevinAlexander 0:456e9e702d57 146
DevinAlexander 0:456e9e702d57 147 void spiEnable()
DevinAlexander 0:456e9e702d57 148 {
DevinAlexander 0:456e9e702d57 149 ncs=1; //Set CS high to start transmission (interrupts conversion)
DevinAlexander 0:456e9e702d57 150 return;
DevinAlexander 0:456e9e702d57 151 }
DevinAlexander 0:456e9e702d57 152 void spiDisable()
DevinAlexander 0:456e9e702d57 153 {
DevinAlexander 0:456e9e702d57 154 ncs=0; //Set CS low to stop transmission (restarts conversion)
DevinAlexander 0:456e9e702d57 155 return;
DevinAlexander 0:456e9e702d57 156 }
DevinAlexander 0:456e9e702d57 157
DevinAlexander 0:456e9e702d57 158