mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
139 lines
4.1 KiB
C
139 lines
4.1 KiB
C
/*
|
|
* Copyright (C) 2014 PHYTEC Messtechnik GmbH
|
|
*
|
|
* This file is subject to the terms and conditions of the GNU Lesser
|
|
* General Public License v2.1. See the file LICENSE in the top level
|
|
* directory for more details.
|
|
*/
|
|
|
|
/**
|
|
* @defgroup drivers_hdc1000 HDC1000 Humidity and Temperature Sensor
|
|
* @ingroup drivers_sensors
|
|
* @brief Driver for the Texas Instruments HDC1000
|
|
* Humidity and Temperature Sensor.
|
|
* The driver will initialize the sensor for best
|
|
* resolution (14 bit). Currently the driver doesn't use the heater.
|
|
* Temperature and humidity are acquired in sequence.
|
|
* The sensor is always in sleep mode. The measurement must
|
|
* be started by a write access to the address 0x00
|
|
* (HDC1000_TEMPERATURE). After completing the measurement
|
|
* the sensor will return to sleep mode. Typical
|
|
* Conversion Time by 14 bit resolution is 6.50ms
|
|
* for humidity and 6.35ms for temperature.
|
|
* HDC1000_CONVERSION_TIME is twice as large to prevent
|
|
* the problems with timer resolution.
|
|
*
|
|
* @{
|
|
*
|
|
* @file
|
|
* @brief Interface definition for the HDC1000 sensor driver.
|
|
*
|
|
* @author Johann Fischer <j.fischer@phytec.de>
|
|
*/
|
|
|
|
#ifndef HDC1000_H
|
|
#define HDC1000_H
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
#include "periph/i2c.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
#ifndef HDC1000_I2C_ADDRESS
|
|
#define HDC1000_I2C_ADDRESS 0x43 /**< Default Device Address */
|
|
#endif
|
|
|
|
#ifndef HDC1000_CONVERSION_TIME
|
|
#define HDC1000_CONVERSION_TIME 26000 /**< Default Conversion Time */
|
|
#endif
|
|
|
|
/**
|
|
* @brief Device descriptor for HDC1000 sensors.
|
|
*/
|
|
typedef struct {
|
|
i2c_t i2c; /**< I2C device the sensor is connected to */
|
|
uint8_t addr; /**< the sensor's slave address on the I2C bus */
|
|
bool initialized; /**< sensor status, true if sensor is initialized */
|
|
} hdc1000_t;
|
|
|
|
/**
|
|
* @brief HDC1000 sensor test.
|
|
* This function looks for Manufacturer ID of the HDC1000 sensor.
|
|
*
|
|
* @param[in] dev device descriptor of sensor
|
|
*
|
|
* @return 0 on success
|
|
* @return -1 on error
|
|
*/
|
|
int hdc1000_test(hdc1000_t *dev);
|
|
|
|
/**
|
|
* @brief Initialise the HDC1000 sensor driver.
|
|
* 14 bit resolution, heater off, temperature and humidity
|
|
* are acquired in sequence.
|
|
*
|
|
* @param[out] dev device descriptor of sensor to initialize
|
|
* @param[in] i2c I2C bus the sensor is connected to
|
|
* @param[in] address sensor's I2C slave address
|
|
*
|
|
* @return 0 on success
|
|
* @return -1 if initialization of I2C bus failed
|
|
* @return -2 if sensor test failed
|
|
* @return -3 if sensor configuration failed
|
|
*/
|
|
int hdc1000_init(hdc1000_t *dev, i2c_t i2c, uint8_t address);
|
|
|
|
/**
|
|
* @brief Reset the HDC1000 sensor. After that sensor should be reinitialized.
|
|
*
|
|
* @param[out] dev device descriptor of sensor to reset
|
|
*
|
|
* @return 0 on success
|
|
* @return -1 on error
|
|
*/
|
|
int hdc1000_reset(hdc1000_t *dev);
|
|
|
|
/**
|
|
* @brief Trigger the measurements.
|
|
* Conversion Time by 14 bit resolution is 6.50ms.
|
|
*
|
|
* @param[in] dev device descriptor of sensor
|
|
*
|
|
* @return 0 on success
|
|
* @return -1 on error
|
|
*/
|
|
int hdc1000_startmeasure(hdc1000_t *dev);
|
|
|
|
/**
|
|
* @brief Read sensor's data.
|
|
*
|
|
* @param[in] dev device descriptor of sensor
|
|
* @param[out] rawtemp raw temperature value
|
|
* @param[out] rawhum raw humidity value
|
|
*
|
|
* @return 0 on success
|
|
* @return -1 on error
|
|
*/
|
|
int hdc1000_read(hdc1000_t *dev, uint16_t *rawtemp, uint16_t *rawhum);
|
|
|
|
/**
|
|
* @brief Convert raw sensor values to temperature and humidity.
|
|
*
|
|
* @param[in] rawtemp raw temperature value
|
|
* @param[in] rawhum raw humidity value
|
|
* @param[out] temp converted temperature*100
|
|
* @param[out] hum converted humidity*100
|
|
*/
|
|
void hdc1000_convert(uint16_t rawtemp, uint16_t rawhum, int *temp, int *hum);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
/** @} */
|