mirror of
https://github.com/1991Patrick/I2C_SHT2x.git
synced 2025-03-14 20:37:29 +03:00
127 lines
5.2 KiB
C
127 lines
5.2 KiB
C
![]() |
/*!
|
|||
|
* \file I2C_SHT2x.h
|
|||
|
* \author Patrick Taling (not the original author from the original code of SENSIRION AG)
|
|||
|
* \date 31/03/2017
|
|||
|
* \version 1.0
|
|||
|
*
|
|||
|
* \brief Simple I2C SHT2x library to measure relative humidity and temperature and write it to an I2C LCD with the ATxmega256a3u.
|
|||
|
*
|
|||
|
* \details The file I2C_SHT2x.h is the library for the SHT2x humidity and temperature sensor
|
|||
|
*
|
|||
|
* The library needs the i2c library from w.e.dolman (<a href="mailto:w.e.dolman@hva.nl">w.e.dolman@hva.nl</a>)
|
|||
|
* For i2c.c use code 21.8 from "de taal C en de Xmega tweede druk" http://dolman-wim.nl/xmega/book/index.php
|
|||
|
* For i2c.h use code 21.9 from "de taal C en de Xmega tweede druk" http://dolman-wim.nl/xmega/book/index.php
|
|||
|
*
|
|||
|
* The libraby needs some parts of the the SHT2x library from SENIRION from https://www.sensirion.com/en/products/humidity-sensors/humidity-temperature-sensor-sht2x-digital-i2c-accurate/
|
|||
|
* The libraby can be download from: https://www.sensirion.com/en/products/all-documents-of-sensirions-humidity-sensors-for-download/
|
|||
|
* Go to SHT2x/ Sample Code SHT21 and download the zip file Sensirion_Humidity_Sensors_SHT21_Sample_Code_C-file
|
|||
|
*
|
|||
|
* \note the following files aren't fully used. Most parts are used in other .c of .h files or disabled.
|
|||
|
* DisplayDip204.C, DisplayDip204.h,
|
|||
|
* I2C_HAL.c, I2C_HAL.h,
|
|||
|
* System.c, System.h and
|
|||
|
* io70f3740.h.
|
|||
|
* \note for the use of two SHT2X you should use different IOs for SDA or additional hardware such as I2C multiplexer.
|
|||
|
* The adress of the SHT2x can’t be changed.
|
|||
|
*
|
|||
|
*
|
|||
|
* \ORIGINAL AUTHOR INFORMATION
|
|||
|
* ==============================================================================
|
|||
|
* S E N S I R I O N AG, Laubisruetistr. 50, CH-8712 Staefa, Switzerland
|
|||
|
* ==============================================================================
|
|||
|
* Project : SHT2x Sample Code (V1.2)
|
|||
|
* File : SHT2x.c
|
|||
|
* Author : MST
|
|||
|
* Controller: NEC V850/SG3 (uPD70F3740)
|
|||
|
* Compiler : IAR compiler for V850 (3.50A)
|
|||
|
* Brief : Sensor layer. Functions for sensor access
|
|||
|
* ==============================================================================
|
|||
|
*
|
|||
|
*
|
|||
|
* \verbatim
|
|||
|
#include <I2C_SHT2x.h>
|
|||
|
#include <i2c.h>
|
|||
|
#include <Typedefs.h>
|
|||
|
\endverbatim
|
|||
|
* \par
|
|||
|
*
|
|||
|
* \note An AVR-project can use multiple I2C's. One shoud take care that
|
|||
|
* in different source files there are no multiple I2C
|
|||
|
* definitions for the same I2C.
|
|||
|
*/
|
|||
|
|
|||
|
#ifndef SHT2x_H
|
|||
|
#define SHT2x_H
|
|||
|
|
|||
|
#include "i2c.h"
|
|||
|
#include "Typedefs.h"
|
|||
|
|
|||
|
// CRC
|
|||
|
#define POLYNOMIAL 0x131; //P(x)=x^8+x^5+x^4+1 = 100110001
|
|||
|
|
|||
|
#define TRIG_T_MEASUREMENT_HM 0xE3 // command trig. temp meas. hold master
|
|||
|
#define TRIG_RH_MEASUREMENT_HM 0xE5 // command trig. humidity meas. hold master
|
|||
|
#define TRIG_T_MEASUREMENT_POLL 0xF3 // command trig. temp meas. no hold master
|
|||
|
#define TRIG_RH_MEASUREMENT_POLL 0xF5 // command trig. humidity meas. no hold master
|
|||
|
#define USER_REG_W 0xE6 // command writing user register
|
|||
|
#define USER_REG_R 0xE7 // command reading user register
|
|||
|
#define SOFT_RESET 0xFE // command soft reset
|
|||
|
|
|||
|
#define SHT2x_RES_12_14BIT 0x00 // RH=12bit, T=14bit
|
|||
|
#define SHT2x_RES_8_12BIT 0x01 // RH= 8bit, T=12bit
|
|||
|
#define SHT2x_RES_10_13BIT 0x80 // RH=10bit, T=13bit
|
|||
|
#define SHT2x_RES_11_11BIT 0x81 // RH=11bit, T=11bit
|
|||
|
#define SHT2x_RES_MASK 0x81 // Mask for res. bits (7,0) in user reg.
|
|||
|
|
|||
|
#define SHT2x_EOB_ON 0x40 // end of battery
|
|||
|
#define SHT2x_EOB_MASK 0x40 // Mask for EOB bit(6) in user reg.
|
|||
|
|
|||
|
#define SHT2x_HEATER_ON 0x04 // heater on
|
|||
|
#define SHT2x_HEATER_OFF 0x00 // heater off
|
|||
|
#define SHT2x_HEATER_MASK 0x04 // Mask for Heater bit(2) in user reg.
|
|||
|
|
|||
|
#define LOW 0
|
|||
|
#define HIGH 1
|
|||
|
|
|||
|
#define TRUE 1
|
|||
|
#define FALSE 0
|
|||
|
|
|||
|
#define CONSTANT_6 6
|
|||
|
#define CONSTANT_125 125
|
|||
|
#define CONSTANT_46_85 46.85
|
|||
|
#define CONSTANT_175_72 175.72
|
|||
|
#define RESOLUTION_16 65536 //2^16
|
|||
|
|
|||
|
#define ACK_ERROR 0x01
|
|||
|
#define TIME_OUT_ERROR 0x02
|
|||
|
#define CHECKSUM_ERROR 0x04
|
|||
|
#define UNIT_ERROR 0x08
|
|||
|
|
|||
|
#define CMD_CHIP_MEMORY_LOC_1 0xFA
|
|||
|
#define ADR_CHIP_MEMORY_LOC_1 0x0F
|
|||
|
#define CMD_CHIP_MEMORY_LOC_2 0xFC
|
|||
|
#define ADR_CHIP_MEMORY_LOC_2 0xC9
|
|||
|
|
|||
|
// #define ACK 0 in i2c.h
|
|||
|
// #define NO_ACK 1 in i2c.h
|
|||
|
|
|||
|
typedef enum{
|
|||
|
HUMIDITY,
|
|||
|
TEMP
|
|||
|
}etSHT2xMeasureType;
|
|||
|
|
|||
|
#define I2C_SHT2x_ADR 0x40 // 0x80 -> 128 sensor I2C address + write bit 0x81 -> 129 sensor I2C address + read bit
|
|||
|
// Watch out for bit shifting with the I2C (TWI) protocol in i2c.c
|
|||
|
#define I2C_SHT2x_ADR_W 0x80
|
|||
|
#define I2C_SHT2x_ADR_R 0x81
|
|||
|
|
|||
|
uint8_t i2c_SHT2x_CheckCrc(uint8_t data[], uint8_t nbrOfBytes, uint8_t checksum);
|
|||
|
uint8_t i2c_SHT2x_ReadUserRegister(uint8_t *pRegisterValue);
|
|||
|
uint8_t i2c_SHT2x_WriteUserRegister(uint8_t *pRegisterValue);
|
|||
|
uint8_t i2c_SHT2x_MeasurePoll(etSHT2xMeasureType eSHT2xMeasureType, nt16 *pMeasurand);
|
|||
|
uint8_t i2c_SHT2x_MeasureHM(etSHT2xMeasureType eSHT2xMeasureType, nt16 *pMeasurand);
|
|||
|
uint8_t i2c_SHT2x_SoftReset();
|
|||
|
float i2c_SHT2x_CalcRH(uint16_t sRH);
|
|||
|
float i2c_SHT2x_CalcTemperatureC(uint16_t sT);
|
|||
|
uint8_t i2c_SHT2x_GetSerialNumber(uint8_t SerialNumber[]);
|
|||
|
#endif
|