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.cpp@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 | #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 |
