code to access the AT30TSE75x temperature and E-prom device

Dependents:   AT30TSE752TST AT30TSE752TST2

Revision:
6:cc295531021e
Parent:
5:c783703a9e28
--- a/AT30TSE75x.cpp	Thu Mar 30 18:19:22 2017 +0000
+++ b/AT30TSE75x.cpp	Thu Mar 30 21:54:21 2017 +0000
@@ -11,7 +11,7 @@
 */
 
 
-#define VERSION_AT30TSE75x_SRC  "0.91"  
+#define VERSION_AT30TSE75x_SRC  "0.95"  
 
 #define RegisterLocDownEnable 0 // set this to one to enable permanent NV register locking , never tested with 1 
 
@@ -82,14 +82,14 @@
 uint16_t  AT30TSE75x::set_temperature(float temperature ) {
     uint16_t td;
     uint16_t  sign= 0x8000;
-    if ( temperature  < 0)   temperature = -temperature;
-    else sign=0;
+    if ( temperature  < 0)  { temperature *= -1; }
+    else { sign=0; }
     // this function is only used to calculate limits so we don't care
     // about resolution settings, all is 12 bits
     temperature=temperature *16;
     td=(int)temperature;
+    if (sign){ td = ~td; td=td+1;}
     td= td<<4;
-    if (sign){ td = ~td; td=td+1;}
     td=td|sign;
     return td;    
         
@@ -99,12 +99,13 @@
 float  AT30TSE75x::convert_temperature( uint16_t datain) {
     uint16_t data=datain;
     float temperature;    
-    int8_t sign = 1;
+    float sign = 1;
  
     /* Check if negative and clear sign bit. */
     if (data & (1 << 15)) {
         sign *= -1;
-        data &= ~(1 << 15);
+        data = ~data;
+        data +=1;
     }
  
     /* Convert to temperature. */
@@ -155,7 +156,7 @@
 }     
 
 
-void AT30TSE75x::set_TlowLimitRegister(int &error ,  float temperture, int Nonvolatile) {
+void AT30TSE75x::set_TLowLimitRegister(int &error ,  float temperture, int Nonvolatile) {
     uint8_t reg = TLowReg ;
     if ( Nonvolatile) reg = TLowRegNV;
     set_LimitRegister(error ,reg ,  temperture,  Nonvolatile);
@@ -172,9 +173,9 @@
     if(  CregNV.RegisterLock) { error=44; return; }
     buffer[0]= reg;
     uint16_t td=set_temperature(temperature);
-    uint16_t td_low= td & 0x0F;
+    uint16_t td_low= td & 0xFF;
     buffer[2] = (uint8_t) td_low;
-    td = td >> 8; td= td & 0x0F;
+    td = td >> 8; td= td & 0xFF;
     buffer[1] = (uint8_t) td;
     locerr=_i2c->write(Taddr,(char *)buffer,3,false);
     buffer[0]=  TReg;