Digital Humidity Sensor with Temperature Sensor by TI. Default address sets Akizuki kit module.

Dependents:   AmbientExampleLPC1768 HumidifierController_LPC824 TYBLE16_mbedlized_Thermometer

Committer:
kenjiArai
Date:
Tue Aug 22 10:11:30 2017 +0000
Revision:
1:c8f2c01befe1
Parent:
0:927110422689
countermeasure for  NonCopyable

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:927110422689 1 /*
kenjiArai 0:927110422689 2 * mbed library program
kenjiArai 0:927110422689 3 * Low Power, High Accuracy Digital Humidity Sensor with Integrated Temperature Sensor
kenjiArai 0:927110422689 4 * HDC1000 Texas Instruments
kenjiArai 0:927110422689 5 *
kenjiArai 1:c8f2c01befe1 6 * Copyright (c) 2015,'17 Kenji Arai / JH1PJL
kenjiArai 0:927110422689 7 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:927110422689 8 * http://mbed.org/users/kenjiArai/
kenjiArai 0:927110422689 9 * Created: Feburary 9th, 2015
kenjiArai 1:c8f2c01befe1 10 * Revised: AAugust 21st, 2017
kenjiArai 0:927110422689 11 */
kenjiArai 0:927110422689 12 /*
kenjiArai 0:927110422689 13 *---------------- REFERENCE ----------------------------------------------------------------------
kenjiArai 0:927110422689 14 * http://www.ti.com/product/HDC1000/description
kenjiArai 1:c8f2c01befe1 15 * http://akizukidenshi.com/catalog/g/gM-08775/ (Not avairable now)
kenjiArai 0:927110422689 16 */
kenjiArai 0:927110422689 17
kenjiArai 0:927110422689 18 #ifndef HDC1000_H
kenjiArai 0:927110422689 19 #define HDC1000_H
kenjiArai 0:927110422689 20
kenjiArai 0:927110422689 21 #include "mbed.h"
kenjiArai 0:927110422689 22
kenjiArai 0:927110422689 23 // Humidity / Temperature Sensor, HDC1000 T.I.
kenjiArai 0:927110422689 24 // Address b7=1,b6=0,b5=0,b4=0,b3=0,b2=0,b1=0, b0=R/W
kenjiArai 0:927110422689 25 #define HDC1000ADDR (0x40 << 1) // Akizuki Module (No other choice)
kenjiArai 0:927110422689 26 #define HDC1000ADDR1 (0x41 << 1) // ADR1=0, ADR0=1
kenjiArai 0:927110422689 27 #define HDC1000ADDR2 (0x42 << 1) // ADR1=1, ADR0=0
kenjiArai 0:927110422689 28 #define HDC1000ADDR3 (0x43 << 1) // ADR1=1, ADR0=1
kenjiArai 0:927110422689 29
kenjiArai 0:927110422689 30 ////////////// Registers //////////////////////////////////
kenjiArai 0:927110422689 31 // Register definition
kenjiArai 0:927110422689 32 #define HDC1000_REG_TEMP 0x00
kenjiArai 0:927110422689 33 #define HDC1000_REG_HUMI 0x01
kenjiArai 0:927110422689 34 #define HDC1000_REG_CONFIG 0x02
kenjiArai 0:927110422689 35 #define HDC1000_REG_S_ID_F 0xfb
kenjiArai 0:927110422689 36 #define HDC1000_REG_S_ID_M 0xfc
kenjiArai 0:927110422689 37 #define HDC1000_REG_S_ID_L 0xfd
kenjiArai 0:927110422689 38 #define HDC1000_REG_M_ID 0xfe
kenjiArai 0:927110422689 39 #define HDC1000_REG_D_ID 0xff
kenjiArai 0:927110422689 40
kenjiArai 0:927110422689 41 ////////////// ID /////////////////////////////////////////
kenjiArai 0:927110422689 42 #define I_AM_HDC1000 0x1000
kenjiArai 0:927110422689 43 #define DEV_REG_ID 0x5449
kenjiArai 0:927110422689 44
kenjiArai 0:927110422689 45 ////////////// Operating mode ///////////////////
kenjiArai 0:927110422689 46 #define ACQ_MODE_SEPARETE (0UL << 12)
kenjiArai 0:927110422689 47 #define ACQ_MODE_BOTH (1UL << 12)
kenjiArai 0:927110422689 48 #define TRES_14BIT (0UL << 10)
kenjiArai 0:927110422689 49 #define TRES_11BIT (1UL << 10)
kenjiArai 0:927110422689 50 #define HRES_14BIT (0UL << 8)
kenjiArai 0:927110422689 51 #define HRES_11BIT (1UL << 8)
kenjiArai 0:927110422689 52 #define HRES_08BIT (2UL << 8)
kenjiArai 0:927110422689 53 #define BOTH_T_14_H_14 (TRES_14BIT + HRES_14BIT + ACQ_MODE_BOTH)
kenjiArai 0:927110422689 54
kenjiArai 0:927110422689 55 /** Interface for Humidity / Temperature Sensor, HDC1000
kenjiArai 0:927110422689 56 * @code
kenjiArai 0:927110422689 57 * #include "mbed.h"
kenjiArai 0:927110422689 58 * #include "HDC1000.h"
kenjiArai 0:927110422689 59 *
kenjiArai 0:927110422689 60 * // I2C Communication
kenjiArai 0:927110422689 61 * HDC1000 hmtp(dp5,dp27); // HDC1000 SDA, SCL (Akizuki module)
kenjiArai 0:927110422689 62 * // If you connected I2C line not only this device but also other devices,
kenjiArai 0:927110422689 63 * // you need to declare following method.
kenjiArai 0:927110422689 64 * I2C i2c(dp5,dp27); // SDA, SCL
kenjiArai 0:927110422689 65 * HDC1000 hmtp(i2c); // HDC1000 SDA, SCL (Akizuki module)
kenjiArai 0:927110422689 66 *
kenjiArai 0:927110422689 67 * int main() {;
kenjiArai 0:927110422689 68 * while(true){
kenjiArai 0:927110422689 69 * hmtp.get(); // Triger conversion
kenjiArai 0:927110422689 70 * printf("Temp: %+4.1fC, Humid: %4.1f%%\r\n", hmtp.temperature(), hmtp.humidity());
kenjiArai 0:927110422689 71 * wait(1.0);
kenjiArai 0:927110422689 72 * }
kenjiArai 0:927110422689 73 * }
kenjiArai 0:927110422689 74 * @endcode
kenjiArai 0:927110422689 75 */
kenjiArai 0:927110422689 76
kenjiArai 0:927110422689 77 class HDC1000
kenjiArai 0:927110422689 78 {
kenjiArai 0:927110422689 79 public:
kenjiArai 1:c8f2c01befe1 80 /** Configure data pin (with other devices on I2C line)
kenjiArai 0:927110422689 81 * @param data SDA and SCL pins
kenjiArai 0:927110422689 82 */
kenjiArai 0:927110422689 83 HDC1000(PinName p_sda, PinName p_scl);
kenjiArai 1:c8f2c01befe1 84
kenjiArai 1:c8f2c01befe1 85 /** Configure data pin (with other devices on I2C line)
kenjiArai 1:c8f2c01befe1 86 * @param data SDA and SCL pins
kenjiArai 1:c8f2c01befe1 87 * @param device address
kenjiArai 1:c8f2c01befe1 88 */
kenjiArai 0:927110422689 89 HDC1000(PinName p_sda, PinName p_scl, uint8_t addr);
kenjiArai 0:927110422689 90
kenjiArai 0:927110422689 91 /** Configure data pin (with other devices on I2C line)
kenjiArai 0:927110422689 92 * @param I2C previous definition
kenjiArai 0:927110422689 93 */
kenjiArai 0:927110422689 94 HDC1000(I2C& p_i2c);
kenjiArai 0:927110422689 95 HDC1000(I2C& p_i2c, uint8_t addr);
kenjiArai 0:927110422689 96
kenjiArai 0:927110422689 97 /** Start convertion & data save
kenjiArai 0:927110422689 98 * @param none
kenjiArai 0:927110422689 99 * @return none
kenjiArai 0:927110422689 100 */
kenjiArai 0:927110422689 101 void get(void);
kenjiArai 0:927110422689 102
kenjiArai 0:927110422689 103 /** Read temperature data
kenjiArai 0:927110422689 104 * @param none
kenjiArai 0:927110422689 105 * @return temperature
kenjiArai 0:927110422689 106 */
kenjiArai 0:927110422689 107 float temperature(void);
kenjiArai 0:927110422689 108
kenjiArai 0:927110422689 109 /** Read humidity data
kenjiArai 0:927110422689 110 * @param none
kenjiArai 0:927110422689 111 * @return humidity
kenjiArai 0:927110422689 112 */
kenjiArai 0:927110422689 113 float humidity(void);
kenjiArai 0:927110422689 114
kenjiArai 0:927110422689 115 /** HDC1000 Configuration
kenjiArai 0:927110422689 116 * @param none
kenjiArai 0:927110422689 117 * @return none
kenjiArai 0:927110422689 118 */
kenjiArai 0:927110422689 119 void config(void);
kenjiArai 0:927110422689 120
kenjiArai 0:927110422689 121 /** Read Configuration
kenjiArai 0:927110422689 122 * @param none
kenjiArai 0:927110422689 123 * @return config. data
kenjiArai 0:927110422689 124 */
kenjiArai 0:927110422689 125 uint16_t read_config(void);
kenjiArai 0:927110422689 126
kenjiArai 0:927110422689 127 /** Set config register
kenjiArai 0:927110422689 128 * @param config parameter
kenjiArai 0:927110422689 129 * @return config read data
kenjiArai 0:927110422689 130 */
kenjiArai 0:927110422689 131 uint16_t set_config(uint16_t cfg);
kenjiArai 0:927110422689 132
kenjiArai 0:927110422689 133 /** Set I2C clock frequency
kenjiArai 0:927110422689 134 * @param freq.
kenjiArai 0:927110422689 135 * @return none
kenjiArai 0:927110422689 136 */
kenjiArai 0:927110422689 137 void frequency(int hz);
kenjiArai 0:927110422689 138
kenjiArai 0:927110422689 139 /** check Device ID number
kenjiArai 0:927110422689 140 * @param none
kenjiArai 0:927110422689 141 * @return HDC1000 = 1, others 0
kenjiArai 0:927110422689 142 */
kenjiArai 0:927110422689 143 uint8_t who_am_i(void);
kenjiArai 0:927110422689 144
kenjiArai 0:927110422689 145 /** Read Manufacturer ID
kenjiArai 0:927110422689 146 * @param none
kenjiArai 0:927110422689 147 * @return ID
kenjiArai 0:927110422689 148 */
kenjiArai 0:927110422689 149 uint16_t read_M_ID(void);
kenjiArai 0:927110422689 150
kenjiArai 0:927110422689 151 /** Read Device ID
kenjiArai 0:927110422689 152 * @param none
kenjiArai 0:927110422689 153 * @return ID
kenjiArai 0:927110422689 154 */
kenjiArai 0:927110422689 155 uint16_t read_D_ID(void);
kenjiArai 0:927110422689 156
kenjiArai 0:927110422689 157 protected:
kenjiArai 1:c8f2c01befe1 158 I2C *_i2c_p;
kenjiArai 1:c8f2c01befe1 159 I2C &_i2c;
kenjiArai 0:927110422689 160
kenjiArai 0:927110422689 161 void get_IDs(void);
kenjiArai 0:927110422689 162 void init(void);
kenjiArai 0:927110422689 163
kenjiArai 0:927110422689 164 private:
kenjiArai 0:927110422689 165 uint8_t HDC1000_addr;
kenjiArai 0:927110422689 166 uint8_t dt[4];
kenjiArai 0:927110422689 167 uint16_t temp;
kenjiArai 0:927110422689 168 uint16_t humi;
kenjiArai 0:927110422689 169 uint16_t manufacturer_id_number;
kenjiArai 0:927110422689 170 uint16_t device_id_number;
kenjiArai 0:927110422689 171 };
kenjiArai 0:927110422689 172
kenjiArai 0:927110422689 173 #endif // HDC1000_H