Many changes from 2018
[owSlave2.git] / common / I2C / SHT3x.c
1 //==============================================================================\r
2 // S E N S I R I O N AG, Laubisruetistr. 50, CH-8712 Staefa, Switzerland\r
3 //==============================================================================\r
4 // Project : SHT2x Sample Code (V1.2)\r
5 // File : SHT2x.c\r
6 // Author : MST\r
7 // Controller: NEC V850/SG3 (uPD70F3740)\r
8 // Compiler : IAR compiler for V850 (3.50A)\r
9 // Brief : Sensor layer. Functions for sensor access\r
10 //==============================================================================\r
11 //---------- Includes ----------------------------------------------------------\r
12 #define F_CPU 8000000UL\r
13 #include <avr/io.h>\r
14 #include <util/delay.h>\r
15 #include "TWI_Master.h"\r
16 #include "SHT3x.h"\r
17 \r
18 uint8_t initSHT3x(uint8_t adrline){\r
19         /*I2c_StartCondition();\r
20         I2c_WriteByte(0b10001000|(adrline<<1));\r
21         I2c_WriteByte(0x27);\r
22         I2c_WriteByte(0x37);\r
23         I2c_StopCondition();*/\r
24         return 1;\r
25 }\r
26 \r
27 uint8_t calcCRCSHT3x(uint8_t b1, uint8_t b2) {\r
28         uint8_t bit;\r
29         uint8_t crc=0xFF;\r
30         crc^=b1;\r
31         for(bit=8;bit>0;--bit) {\r
32                 if (crc&0x80) crc=(crc<<1)^  0x131;\r
33                 else crc=(crc<<1);\r
34         }\r
35         crc^=b2;\r
36         for(bit=8;bit>0;--bit) {\r
37                 if (crc&0x80) crc=(crc<<1)^  0x131;\r
38                 else crc=(crc<<1);\r
39         }\r
40         return crc;\r
41         \r
42 }\r
43 \r
44 \r
45 \r
46 uint8_t getSHT3xHumTemp(uint8_t adrline,double *temp,double *hum) {\r
47         uint8_t ret=1;\r
48         I2c_StartCondition();\r
49         I2c_WriteByte(0b10001000|(adrline<<1));\r
50         I2c_WriteByte(0x24);\r
51         I2c_WriteByte(0x00); //NotClock Scr\r
52         I2c_StopCondition();\r
53         _delay_ms(16);\r
54         \r
55         I2c_StartCondition();\r
56         I2c_WriteByte (0b10001001|(adrline<<1));\r
57         volatile uint8_t t1 =I2c_ReadByte(ACK);\r
58         volatile uint8_t t2 =I2c_ReadByte(ACK);\r
59         volatile uint8_t tc =I2c_ReadByte(ACK);\r
60         volatile uint8_t f1 =I2c_ReadByte(ACK);\r
61         volatile uint8_t f2 =I2c_ReadByte(ACK);\r
62         volatile uint8_t fc =I2c_ReadByte(NO_ACK);\r
63         I2c_StopCondition();\r
64         if (calcCRCSHT3x(t1,t2)==tc)\r
65                 *temp=175.0f*(double)(((uint16_t)t1<<8)|t2)/65535.0f-45.0f;\r
66         else ret=0;\r
67         if (calcCRCSHT3x(f1,f2)==fc)\r
68                 *hum=100.0f*(double)(((uint16_t)f1<<8)|f2)/65535.0f;\r
69         else ret=0;\r
70         return ret;\r
71 }\r