LM74 temperature sensor Library on SPI I/F

Files at this revision

API Documentation at this revision

Comitter:
atpolitis
Date:
Fri Mar 11 09:55:23 2011 +0000
Parent:
0:9293a89e30e2
Commit message:
correction for negative temperarures

Changed in this revision

TmpLM74.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 9293a89e30e2 -r a29c5af6c1f0 TmpLM74.cpp
--- a/TmpLM74.cpp	Thu Mar 10 18:23:12 2011 +0000
+++ b/TmpLM74.cpp	Fri Mar 11 09:55:23 2011 +0000
@@ -17,28 +17,30 @@
 float TmpLM74::readTemp(void){
 
     float realTemp;
-    int16_t binTemp;
-    uint16_t tempRegister;
+    int16_t tempRegister;
     
     _csLM74 = 0;
     
     tempRegister = ((uint16_t) write(0xFF)) << 8;
-    tempRegister += write(0xFF);
-                    
+    tempRegister |= write(0xFF);
+    
     _csLM74 = 1;
     
-    binTemp = tempRegister >> 3;
+//    tempRegister = (((uint16_t) 0xE4) << 8) | 0x84; // -55.0 C
+//    tempRegister = (((uint16_t) 0xFB) << 8) | 0x04; // -10.0 C
+//    tempRegister = 0x8000;                          // power down
+    
+//    pc.printf("TempRegister = 0x%x\n", tempRegister);     debugging ONLY
     
-    if((tempRegister & 0xFFFC) == 0x8000) {       // Manufacturer's Device ID Register (power down)
-        startLM74();
-        binTemp = INVALID_LM74_TEMP;
-    } else if ((tempRegister & 0x0004) == 0) {    // temp reading NOT ready
-        binTemp = INVALID_LM74_TEMP;
-    } else if (binTemp > 0x0FFF) {                // negative temperature
-        binTemp &= 0xFFF;
-        binTemp = ~binTemp;
+    if ((tempRegister & 0x0004) == 0) {             // temp reading NOT ready or LM74 in power down
+        if((tempRegister & 0xFFFC) == 0x8000) {     // Manufacturer's Device ID Register (power down) ?
+            startLM74();
+        }
+        tempRegister = INVALID_LM74_TEMP;
+    } else {
+        tempRegister >>= 3;
     }
-    realTemp = ((float) binTemp) * 0.0625;
+    realTemp = ((float) tempRegister) * 0.0625;
     
     return realTemp;
 }