Techshop JAPANのボランティアリフロープログラムです。誰か改造して

Fork of MAX31855 by Joe Staton

Committer:
Info
Date:
Tue Feb 21 11:24:31 2017 +0000
Revision:
2:288b09dbc34c
Parent:
1:5eeee89cb281
Techshop JAPAN?????????????????????????????????

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
Stavlin 1:5eeee89cb281 39 //Check for a fault (last bit of transfer is fault bit)
Stavlin 1:5eeee89cb281 40 if ((tempProbeLow & 1)==1){
Stavlin 1:5eeee89cb281 41 //Chip reports a fault, extract fault from Chip Temperature data
Stavlin 1:5eeee89cb281 42 int faultType = (tempChipLow & 7);
Stavlin 1:5eeee89cb281 43
Stavlin 1:5eeee89cb281 44 faultCode=faultType;
Stavlin 1:5eeee89cb281 45
Stavlin 1:5eeee89cb281 46 return 2000+faultType;
Stavlin 1:5eeee89cb281 47 /*if (faultType==1){
Stavlin 1:5eeee89cb281 48 //Open circuit (no TC)
Stavlin 1:5eeee89cb281 49 return 2000 + faultType;
Stavlin 1:5eeee89cb281 50 }else if (faultType==2){
Stavlin 1:5eeee89cb281 51 //Short to GND
Stavlin 1:5eeee89cb281 52 return 2000 + faultType;
Stavlin 1:5eeee89cb281 53 }else if (faultType==4){
Stavlin 1:5eeee89cb281 54 //Short to VCC
Stavlin 1:5eeee89cb281 55 return 0.4;
Stavlin 1:5eeee89cb281 56 }else{
Stavlin 1:5eeee89cb281 57 return 0.5;
Stavlin 1:5eeee89cb281 58 }*/
Stavlin 1:5eeee89cb281 59 }else{
Stavlin 1:5eeee89cb281 60 //Integer value of temperature
Stavlin 1:5eeee89cb281 61 value = (tempProbeHigh<< 6 | tempProbeLow>>2);
Stavlin 1:5eeee89cb281 62
Stavlin 1:5eeee89cb281 63 //Get actual temperature (last 2 bits of integer are decimal 0.5 and 0.25)
Info 2:288b09dbc34c 64 //temp = (value*0.15);
Stavlin 1:5eeee89cb281 65 temp = (value*0.25); // Multiply the value by 0.25 to get temp in C or
Stavlin 1:5eeee89cb281 66 // * (9.0/5.0)) + 32.0; // Convert value to F (ensure proper floats!)
Info 2:288b09dbc34c 67 if(temp > 2500){
Info 2:288b09dbc34c 68 temp = 0;
Info 2:288b09dbc34c 69 }
Stavlin 1:5eeee89cb281 70 return temp;
Stavlin 1:5eeee89cb281 71 }
Stavlin 1:5eeee89cb281 72 }else{
Stavlin 1:5eeee89cb281 73 //Chip not ready for reading
Stavlin 1:5eeee89cb281 74 return -1;
Stavlin 1:5eeee89cb281 75 }
Stavlin 1:5eeee89cb281 76 }
Stavlin 1:5eeee89cb281 77
Stavlin 1:5eeee89cb281 78 void max31855::select() {
Stavlin 1:5eeee89cb281 79 //Set CS low to start transmission (interrupts conversion)
Stavlin 1:5eeee89cb281 80 ncs = 0;
Stavlin 1:5eeee89cb281 81 }
Stavlin 1:5eeee89cb281 82
Stavlin 1:5eeee89cb281 83 void max31855::deselect() {
Stavlin 1:5eeee89cb281 84 //Set CS high to stop transmission (restarts conversion)
Stavlin 1:5eeee89cb281 85 ncs = 1;
Stavlin 1:5eeee89cb281 86 //Reset conversion timer
Stavlin 1:5eeee89cb281 87 pollTimer.reset();
Stavlin 1:5eeee89cb281 88 }
Stavlin 1:5eeee89cb281 89
Stavlin 1:5eeee89cb281 90 void max31855::initialise(int setType) {
Stavlin 1:5eeee89cb281 91 //Start the conversion timer
Stavlin 1:5eeee89cb281 92 pollTimer.start();
Stavlin 1:5eeee89cb281 93 faultCode=0;
Stavlin 1:5eeee89cb281 94 }
Stavlin 1:5eeee89cb281 95
Stavlin 1:5eeee89cb281 96 int max31855::ready() {
Stavlin 1:5eeee89cb281 97 //Check to see if conversion is complete
Stavlin 1:5eeee89cb281 98 if (pollTimer.read_ms() > 250) {
Stavlin 1:5eeee89cb281 99 //Conversion complete
Stavlin 1:5eeee89cb281 100 return 1;
Stavlin 1:5eeee89cb281 101 }else{
Stavlin 1:5eeee89cb281 102 //Conversion incomplete
Stavlin 1:5eeee89cb281 103 return 0;
Stavlin 1:5eeee89cb281 104 }
Stavlin 0:656c522152d4 105 }