Port of the SHT2x example code from Sensirion

Dependents:   sht21_test ENVLogger

Committer:
ssozonoff
Date:
Sat Apr 23 18:10:56 2011 +0000
Revision:
1:d0f691423bf1
Parent:
0:74df6ab91c79
Child:
2:2464fed17980
Got Master Hold mode working, Thanks Andy!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ssozonoff 0:74df6ab91c79 1 #include "mbed.h"
ssozonoff 1:d0f691423bf1 2 #include "SHT21_I2C.h"
ssozonoff 0:74df6ab91c79 3
ssozonoff 0:74df6ab91c79 4 #ifndef SHT2x_H
ssozonoff 0:74df6ab91c79 5 #define SHT2x_H
ssozonoff 0:74df6ab91c79 6 //==============================================================================
ssozonoff 0:74df6ab91c79 7 // S E N S I R I O N AG, Laubisruetistr. 50, CH-8712 Staefa, Switzerland
ssozonoff 0:74df6ab91c79 8 //==============================================================================
ssozonoff 0:74df6ab91c79 9 // Project : SHT2x Sample Code (V1.2)
ssozonoff 0:74df6ab91c79 10 // File : SHT2x.h
ssozonoff 0:74df6ab91c79 11 // Author : MST
ssozonoff 0:74df6ab91c79 12 // Controller: NEC V850/SG3 (uPD70F3740)
ssozonoff 0:74df6ab91c79 13 // Compiler : IAR compiler for V850 (3.50A)
ssozonoff 0:74df6ab91c79 14 // Brief : Sensor layer. Definitions of commands and registers,
ssozonoff 0:74df6ab91c79 15 // functions for sensor access
ssozonoff 0:74df6ab91c79 16 //==============================================================================
ssozonoff 0:74df6ab91c79 17 // CRC
ssozonoff 0:74df6ab91c79 18
ssozonoff 0:74df6ab91c79 19 const int POLYNOMIAL = 0x131; //P(x)=x^8+x^5+x^4+1 = 100110001
ssozonoff 1:d0f691423bf1 20 const int ACK = 1;
ssozonoff 1:d0f691423bf1 21 const int NoACK = 0;
ssozonoff 1:d0f691423bf1 22
ssozonoff 0:74df6ab91c79 23 // sensor command
ssozonoff 0:74df6ab91c79 24 enum etSHT2xCommand {
ssozonoff 0:74df6ab91c79 25 TRIG_T_MEASUREMENT_HM = 0xE3, // command trig. temp meas. hold master
ssozonoff 0:74df6ab91c79 26 TRIG_RH_MEASUREMENT_HM = 0xE5, // command trig. humidity meas. hold master
ssozonoff 0:74df6ab91c79 27 TRIG_T_MEASUREMENT_POLL = 0xF3, // command trig. temp meas. no hold master
ssozonoff 0:74df6ab91c79 28 TRIG_RH_MEASUREMENT_POLL = 0xF5, // command trig. humidity meas. no hold master
ssozonoff 0:74df6ab91c79 29 USER_REG_W = 0xE6, // command writing user register
ssozonoff 0:74df6ab91c79 30 USER_REG_R = 0xE7, // command reading user register
ssozonoff 0:74df6ab91c79 31 SOFT_RESET = 0xFE // command soft reset
ssozonoff 0:74df6ab91c79 32 };
ssozonoff 0:74df6ab91c79 33
ssozonoff 0:74df6ab91c79 34 enum etSHT2xResolution {
ssozonoff 0:74df6ab91c79 35 SHT2x_RES_12_14BIT = 0x00, // RH=12bit, T=14bit
ssozonoff 0:74df6ab91c79 36 SHT2x_RES_8_12BIT = 0x01, // RH= 8bit, T=12bit
ssozonoff 0:74df6ab91c79 37 SHT2x_RES_10_13BIT = 0x80, // RH=10bit, T=13bit
ssozonoff 0:74df6ab91c79 38 SHT2x_RES_11_11BIT = 0x81, // RH=11bit, T=11bit
ssozonoff 0:74df6ab91c79 39 SHT2x_RES_MASK = 0x81 // Mask for res. bits (7,0) in user reg.
ssozonoff 0:74df6ab91c79 40 };
ssozonoff 0:74df6ab91c79 41
ssozonoff 0:74df6ab91c79 42 enum etSHT2xEob {
ssozonoff 0:74df6ab91c79 43 SHT2x_EOB_ON = 0x40, // end of battery
ssozonoff 0:74df6ab91c79 44 SHT2x_EOB_MASK = 0x40, // Mask for EOB bit(6) in user reg.
ssozonoff 0:74df6ab91c79 45 };
ssozonoff 0:74df6ab91c79 46
ssozonoff 0:74df6ab91c79 47 enum etSHT2xHeater {
ssozonoff 0:74df6ab91c79 48 SHT2x_HEATER_ON = 0x04, // heater on
ssozonoff 0:74df6ab91c79 49 SHT2x_HEATER_OFF = 0x00, // heater off
ssozonoff 0:74df6ab91c79 50 SHT2x_HEATER_MASK = 0x04, // Mask for Heater bit(2) in user reg.
ssozonoff 0:74df6ab91c79 51 };
ssozonoff 0:74df6ab91c79 52 // measurement signal selection
ssozonoff 0:74df6ab91c79 53
ssozonoff 0:74df6ab91c79 54 enum etSHT2xMeasureType {
ssozonoff 0:74df6ab91c79 55 HUMIDITY,
ssozonoff 0:74df6ab91c79 56 TEMP
ssozonoff 0:74df6ab91c79 57 };
ssozonoff 0:74df6ab91c79 58
ssozonoff 0:74df6ab91c79 59 enum etI2cHeader {
ssozonoff 0:74df6ab91c79 60 I2C_ADR_W = 128, // sensor I2C address + write bit
ssozonoff 0:74df6ab91c79 61 I2C_ADR_R = 129 // sensor I2C address + read bit
ssozonoff 0:74df6ab91c79 62 };
ssozonoff 0:74df6ab91c79 63
ssozonoff 0:74df6ab91c79 64 // Error codes
ssozonoff 0:74df6ab91c79 65 enum etError {
ssozonoff 0:74df6ab91c79 66 ACK_ERROR = 0x01,
ssozonoff 0:74df6ab91c79 67 TIME_OUT_ERROR = 0x02,
ssozonoff 0:74df6ab91c79 68 CHECKSUM_ERROR = 0x04,
ssozonoff 0:74df6ab91c79 69 UNIT_ERROR = 0x08
ssozonoff 0:74df6ab91c79 70 };
ssozonoff 0:74df6ab91c79 71
ssozonoff 0:74df6ab91c79 72 class SHT2x : public Base {
ssozonoff 0:74df6ab91c79 73 public:
ssozonoff 0:74df6ab91c79 74 SHT2x (PinName p_sda, PinName p_scl);
ssozonoff 0:74df6ab91c79 75
ssozonoff 0:74df6ab91c79 76 int SHT2x_CheckCrc(int data[], int nbrOfBytes, int checksum);
ssozonoff 0:74df6ab91c79 77 int SHT2x_ReadUserRegister(int *pRegisterValue);
ssozonoff 0:74df6ab91c79 78 int SHT2x_WriteUserRegister(int *pRegisterValue);
ssozonoff 0:74df6ab91c79 79 int SHT2x_MeasurePoll(etSHT2xMeasureType eSHT2xMeasureType, int *pMeasurand);
ssozonoff 0:74df6ab91c79 80 int SHT2x_MeasureHM(etSHT2xMeasureType eSHT2xMeasureType, int *pMeasurand);
ssozonoff 0:74df6ab91c79 81 int SHT2x_SoftReset();
ssozonoff 0:74df6ab91c79 82 float SHT2x_CalcRH(int u16sRH);
ssozonoff 0:74df6ab91c79 83 float SHT2x_CalcTemperatureC(int u16sT);
ssozonoff 0:74df6ab91c79 84 int SHT2x_GetSerialNumber(int u8SerialNumber[]);
ssozonoff 0:74df6ab91c79 85
ssozonoff 0:74df6ab91c79 86 protected:
ssozonoff 1:d0f691423bf1 87 SHT_I2C i2c;
ssozonoff 1:d0f691423bf1 88 Serial out;
ssozonoff 0:74df6ab91c79 89
ssozonoff 0:74df6ab91c79 90 private:
ssozonoff 0:74df6ab91c79 91
ssozonoff 0:74df6ab91c79 92 };
ssozonoff 0:74df6ab91c79 93 #endif