55
66#include "p3t1755.h"
77#include "c_utils.h"
8+ #include "u_tx_debug.h"
9+ #include <stdint.h>
810
911void p3t1755_init (p3t1755_t * p3t , WritePtr write , ReadPtr read ,
1012 uint16_t dev_addr )
1113{
1214 p3t -> write = write ;
1315 p3t -> read = read ;
14- p3t -> dev_addr = dev_addr ;
16+ p3t -> dev_addr = dev_addr << 1 ;
1517}
1618
1719int p3t1755_write_reg (p3t1755_t * p3t , uint16_t reg , uint8_t * data ,
@@ -26,6 +28,15 @@ int p3t1755_read_reg(p3t1755_t *p3t, uint16_t reg, uint8_t *data,
2628 return p3t -> read (p3t -> dev_addr , reg , data , length );
2729}
2830
31+ inline float p3t1755_raw_to_celsius (uint16_t raw )
32+ {
33+ PRINTLN_INFO ("raw temp: %d" , raw );
34+ if (raw & 1 << 11 ) { // Check if sign bit is set |-> t<0
35+ return - (raw * p3t1755_TEMP_RESOLUTION );
36+ } else
37+ return (raw * p3t1755_TEMP_RESOLUTION );
38+ }
39+
2940int p3t1755_read_temperature (p3t1755_t * p3t , float * temp_c )
3041{
3142 uint8_t temp_reg [2 ];
@@ -36,8 +47,8 @@ int p3t1755_read_temperature(p3t1755_t *p3t, float *temp_c)
3647 return status ;
3748 }
3849
39- * temp_c = p3t1755_RAW_TO_CELSIUS (
40- uint8_to_uint16 (temp_reg [0 ], temp_reg [1 ]));
50+ * temp_c = p3t1755_raw_to_celsius (
51+ uint8_to_uint16 (temp_reg [0 ] >> 4 , temp_reg [1 ] >> 4 ));
4152 return status ;
4253}
4354
@@ -225,4 +236,4 @@ int p3t1755_set_low_temp(p3t1755_t *p3t, float temp_c)
225236
226237 return p3t1755_write_reg (p3t , p3t1755_T_LOW , temp_data ,
227238 sizeof (temp_data ));
228- }
239+ }
0 commit comments