first publish

Fork of MAX31855 by Joe Staton

Committer:
mehatfie
Date:
Mon Nov 10 22:56:04 2014 +0000
Revision:
2:b0c2b7f72cb9
Parent:
1:5eeee89cb281
don''t know;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Stavlin 1:5eeee89cb281 1
Stavlin 1:5eeee89cb281 2 #include <mbed.h>
Stavlin 1:5eeee89cb281 3 #include "max31855.h"
Stavlin 1:5eeee89cb281 4
Stavlin 1:5eeee89cb281 5 max31855::max31855(SPI& _spi, PinName _ncs) : spi(_spi), ncs(_ncs) {
Stavlin 1:5eeee89cb281 6
Stavlin 1:5eeee89cb281 7 }
Stavlin 1:5eeee89cb281 8
Stavlin 1:5eeee89cb281 9 float max31855::read_temp() {
Stavlin 1:5eeee89cb281 10 short value = 0;
Stavlin 1:5eeee89cb281 11 float temp = 0;
Stavlin 1:5eeee89cb281 12
Stavlin 1:5eeee89cb281 13 //Variables to hold probe temperature
Stavlin 1:5eeee89cb281 14 uint8_t tempProbeHigh=0;
Stavlin 1:5eeee89cb281 15 uint8_t tempProbeLow=0;
Stavlin 1:5eeee89cb281 16
Stavlin 1:5eeee89cb281 17 //Variables to hold chip temperature and device status
Stavlin 1:5eeee89cb281 18 uint8_t tempChipHigh=0;
Stavlin 1:5eeee89cb281 19 uint8_t tempChipLow=0;
Stavlin 1:5eeee89cb281 20
Stavlin 1:5eeee89cb281 21 if (pollTimer.read_ms() > 250){
Stavlin 1:5eeee89cb281 22 //Set CS to initiate transfer and stop conversion
Stavlin 1:5eeee89cb281 23 select();
Stavlin 1:5eeee89cb281 24
Stavlin 1:5eeee89cb281 25 //Read in Probe tempeature
Stavlin 1:5eeee89cb281 26 tempProbeHigh = spi.write(0);
Stavlin 1:5eeee89cb281 27 tempProbeLow = spi.write(0);
Stavlin 1:5eeee89cb281 28
Stavlin 1:5eeee89cb281 29 //Get the chip temperature and the fault data
Stavlin 1:5eeee89cb281 30 tempChipHigh = spi.write(0);
Stavlin 1:5eeee89cb281 31 tempChipLow = spi.write(0);
Stavlin 1:5eeee89cb281 32
Stavlin 1:5eeee89cb281 33 //Set the chip temperature
Stavlin 1:5eeee89cb281 34 chipTemp = (tempChipHigh<<4 | tempChipLow>>4)*0.25;
Stavlin 1:5eeee89cb281 35
Stavlin 1:5eeee89cb281 36 //Set CS to stop transfer and restart conversion
Stavlin 1:5eeee89cb281 37 deselect();
Stavlin 1:5eeee89cb281 38
mehatfie 2:b0c2b7f72cb9 39 printf("%f\n", chipTemp);
mehatfie 2:b0c2b7f72cb9 40
Stavlin 1:5eeee89cb281 41 //Check for a fault (last bit of transfer is fault bit)
Stavlin 1:5eeee89cb281 42 if ((tempProbeLow & 1)==1){
Stavlin 1:5eeee89cb281 43 //Chip reports a fault, extract fault from Chip Temperature data
mehatfie 2:b0c2b7f72cb9 44 int faultType = (tempChipLow & 0x07);
Stavlin 1:5eeee89cb281 45
Stavlin 1:5eeee89cb281 46 faultCode=faultType;
Stavlin 1:5eeee89cb281 47
Stavlin 1:5eeee89cb281 48 return 2000+faultType;
Stavlin 1:5eeee89cb281 49 /*if (faultType==1){
Stavlin 1:5eeee89cb281 50 //Open circuit (no TC)
Stavlin 1:5eeee89cb281 51 return 2000 + faultType;
Stavlin 1:5eeee89cb281 52 }else if (faultType==2){
Stavlin 1:5eeee89cb281 53 //Short to GND
Stavlin 1:5eeee89cb281 54 return 2000 + faultType;
Stavlin 1:5eeee89cb281 55 }else if (faultType==4){
Stavlin 1:5eeee89cb281 56 //Short to VCC
Stavlin 1:5eeee89cb281 57 return 0.4;
Stavlin 1:5eeee89cb281 58 }else{
Stavlin 1:5eeee89cb281 59 return 0.5;
Stavlin 1:5eeee89cb281 60 }*/
Stavlin 1:5eeee89cb281 61 }else{
Stavlin 1:5eeee89cb281 62 //Integer value of temperature
Stavlin 1:5eeee89cb281 63 value = (tempProbeHigh<< 6 | tempProbeLow>>2);
Stavlin 1:5eeee89cb281 64
Stavlin 1:5eeee89cb281 65 //Get actual temperature (last 2 bits of integer are decimal 0.5 and 0.25)
Stavlin 1:5eeee89cb281 66 temp = (value*0.25); // Multiply the value by 0.25 to get temp in C or
Stavlin 1:5eeee89cb281 67 // * (9.0/5.0)) + 32.0; // Convert value to F (ensure proper floats!)
Stavlin 1:5eeee89cb281 68
mehatfie 2:b0c2b7f72cb9 69 return value;
Stavlin 1:5eeee89cb281 70 }
Stavlin 1:5eeee89cb281 71 }else{
Stavlin 1:5eeee89cb281 72 //Chip not ready for reading
Stavlin 1:5eeee89cb281 73 return -1;
Stavlin 1:5eeee89cb281 74 }
Stavlin 1:5eeee89cb281 75 }
Stavlin 1:5eeee89cb281 76
Stavlin 1:5eeee89cb281 77 void max31855::select() {
Stavlin 1:5eeee89cb281 78 //Set CS low to start transmission (interrupts conversion)
Stavlin 1:5eeee89cb281 79 ncs = 0;
Stavlin 1:5eeee89cb281 80 }
Stavlin 1:5eeee89cb281 81
Stavlin 1:5eeee89cb281 82 void max31855::deselect() {
Stavlin 1:5eeee89cb281 83 //Set CS high to stop transmission (restarts conversion)
Stavlin 1:5eeee89cb281 84 ncs = 1;
Stavlin 1:5eeee89cb281 85 //Reset conversion timer
Stavlin 1:5eeee89cb281 86 pollTimer.reset();
Stavlin 1:5eeee89cb281 87 }
Stavlin 1:5eeee89cb281 88
Stavlin 1:5eeee89cb281 89 void max31855::initialise(int setType) {
Stavlin 1:5eeee89cb281 90 //Start the conversion timer
Stavlin 1:5eeee89cb281 91 pollTimer.start();
Stavlin 1:5eeee89cb281 92 faultCode=0;
Stavlin 1:5eeee89cb281 93 }
Stavlin 1:5eeee89cb281 94
Stavlin 1:5eeee89cb281 95 int max31855::ready() {
Stavlin 1:5eeee89cb281 96 //Check to see if conversion is complete
Stavlin 1:5eeee89cb281 97 if (pollTimer.read_ms() > 250) {
Stavlin 1:5eeee89cb281 98 //Conversion complete
Stavlin 1:5eeee89cb281 99 return 1;
Stavlin 1:5eeee89cb281 100 }else{
Stavlin 1:5eeee89cb281 101 //Conversion incomplete
Stavlin 1:5eeee89cb281 102 return 0;
Stavlin 1:5eeee89cb281 103 }
Stavlin 0:656c522152d4 104 }