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

Fork of MAX31855 by Joe Staton

Revision:
0:656c522152d4
Child:
1:5eeee89cb281
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/max31855.cpp	Thu Aug 16 12:46:52 2012 +0000
@@ -0,0 +1,98 @@
+
+#include <mbed.h>
+#include "max31855.h"
+
+max31855::max31855(SPI& _spi, PinName _ncs) : spi(_spi), ncs(_ncs) {
+
+}
+
+float max31855::read_temp() {
+    short value = 0;
+    float temp = 0;
+    
+    //Variables to hold probe temperature
+    uint8_t tempProbeHigh=0;
+    uint8_t tempProbeLow=0;
+    
+    //Variables to hold chip temperature and device status
+    uint8_t tempChipHigh=0;
+    uint8_t tempChipLow=0;
+    
+    if (pollTimer.read_ms() > 250){
+        //Set CS to initiate transfer and stop conversion
+        select();
+    
+        //Read in Probe tempeature
+        tempProbeHigh = spi.write(0);
+        tempProbeLow = spi.write(0);
+        
+        //Get the chip temperature and the fault data
+        tempChipHigh = spi.write(0);
+        tempChipLow = spi.write(0);
+        
+        //Set the chip temperature    
+        chipTemp = (tempChipHigh<<4 | tempChipLow>>4)*0.25;
+        
+        //Check for a fault (last bit of transfer is fault bit)
+        if ((tempProbeLow & 1)==1){
+            //Chip reports a fault, extract fault from Chip Temperature data
+                        int faultType = (tempChipLow & 7);
+            
+            if (faultType==1){
+                //Open circuit (no TC)
+                return 0.1;
+            }else if (faultType==2){
+                //Short to GND
+                return 0.2;
+            }else if (faultType==4){
+                //Short to VCC               
+                return 0.4;
+            }else{
+                return 0.5;
+            }
+        }else{
+            //Set CS to stop transfer and restart conversion
+            deselect();    
+    
+            //Integer value of temperature
+            value = (tempProbeHigh<< 6 | tempProbeLow>>2);
+    
+            //Get actual temperature (last 2 bits of integer are decimal 0.5 and 0.25)
+            temp = (value*0.25); // Multiply the value by 0.25 to get temp in C or
+                             //  * (9.0/5.0)) + 32.0;   // Convert value to F (ensure proper floats!)
+                             
+            return temp;
+        }
+    }else{
+        //Chip not ready for reading
+        return -1;
+    }
+}
+
+void max31855::select() {
+    //Set CS low to start transmission (interrupts conversion)
+    ncs = 0;
+}
+
+void max31855::deselect() {
+    //Set CS high to stop transmission (restarts conversion)
+    ncs = 1;
+    //Reset conversion timer
+    pollTimer.reset();
+}
+
+void max31855::initialise() {
+    //Start the conversion timer
+    pollTimer.start();
+}
+
+int max31855::ready() {
+    //Check to see if conversion is complete
+    if (pollTimer.read_ms() > 250) {
+        //Conversion complete
+        return 1;
+    }else{
+        //Conversion incomplete
+        return 0;
+    }
+}
\ No newline at end of file