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
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
14 #include <util/delay.h>
\r
15 #include "USI_TWI_Master.h"
\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
27 uint8_t calcCRCSHT3x(uint8_t b1, uint8_t b2) {
\r
31 for(bit=8;bit>0;--bit) {
\r
32 if (crc&0x80) crc=(crc<<1)^ 0x131;
\r
36 for(bit=8;bit>0;--bit) {
\r
37 if (crc&0x80) crc=(crc<<1)^ 0x131;
\r
46 uint8_t getSHT3xHumTemp(uint8_t adrline,double *temp,double *hum) {
\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
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
67 if (calcCRCSHT3x(f1,f2)==fc)
\r
68 *hum=100.0f*(double)(((uint16_t)f1<<8)|f2)/65535.0f;
\r