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

Dependents:   AmbientExampleLPC1768 HumidifierController_LPC824 TYBLE16_mbedlized_Thermometer

Committer:
kenjiArai
Date:
Sun Feb 22 01:04:44 2015 +0000
Revision:
0:927110422689
Child:
1:c8f2c01befe1
Digital Humidity Sensor with Temperature Sensor by TI. Default address sets Akizuki kit module.

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 0:927110422689 6 * Copyright (c) 2015 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 0:927110422689 10 * Revised: Feburary 22nd, 2015
kenjiArai 0:927110422689 11 *
kenjiArai 0:927110422689 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 0:927110422689 13 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 0:927110422689 14 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 0:927110422689 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 0:927110422689 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 0:927110422689 17 */
kenjiArai 0:927110422689 18 /*
kenjiArai 0:927110422689 19 *---------------- REFERENCE ----------------------------------------------------------------------
kenjiArai 0:927110422689 20 * http://www.ti.com/product/HDC1000/description
kenjiArai 0:927110422689 21 * http://akizukidenshi.com/catalog/g/gM-08775/
kenjiArai 0:927110422689 22 */
kenjiArai 0:927110422689 23
kenjiArai 0:927110422689 24 #ifndef HDC1000_H
kenjiArai 0:927110422689 25 #define HDC1000_H
kenjiArai 0:927110422689 26
kenjiArai 0:927110422689 27 #include "mbed.h"
kenjiArai 0:927110422689 28
kenjiArai 0:927110422689 29 // Humidity / Temperature Sensor, HDC1000 T.I.
kenjiArai 0:927110422689 30 // Address b7=1,b6=0,b5=0,b4=0,b3=0,b2=0,b1=0, b0=R/W
kenjiArai 0:927110422689 31 #define HDC1000ADDR (0x40 << 1) // Akizuki Module (No other choice)
kenjiArai 0:927110422689 32 #define HDC1000ADDR1 (0x41 << 1) // ADR1=0, ADR0=1
kenjiArai 0:927110422689 33 #define HDC1000ADDR2 (0x42 << 1) // ADR1=1, ADR0=0
kenjiArai 0:927110422689 34 #define HDC1000ADDR3 (0x43 << 1) // ADR1=1, ADR0=1
kenjiArai 0:927110422689 35
kenjiArai 0:927110422689 36 ////////////// Registers //////////////////////////////////
kenjiArai 0:927110422689 37 // Register definition
kenjiArai 0:927110422689 38 #define HDC1000_REG_TEMP 0x00
kenjiArai 0:927110422689 39 #define HDC1000_REG_HUMI 0x01
kenjiArai 0:927110422689 40 #define HDC1000_REG_CONFIG 0x02
kenjiArai 0:927110422689 41 #define HDC1000_REG_S_ID_F 0xfb
kenjiArai 0:927110422689 42 #define HDC1000_REG_S_ID_M 0xfc
kenjiArai 0:927110422689 43 #define HDC1000_REG_S_ID_L 0xfd
kenjiArai 0:927110422689 44 #define HDC1000_REG_M_ID 0xfe
kenjiArai 0:927110422689 45 #define HDC1000_REG_D_ID 0xff
kenjiArai 0:927110422689 46
kenjiArai 0:927110422689 47 ////////////// ID /////////////////////////////////////////
kenjiArai 0:927110422689 48 #define I_AM_HDC1000 0x1000
kenjiArai 0:927110422689 49 #define DEV_REG_ID 0x5449
kenjiArai 0:927110422689 50
kenjiArai 0:927110422689 51 ////////////// Operating mode ///////////////////
kenjiArai 0:927110422689 52 #define ACQ_MODE_SEPARETE (0UL << 12)
kenjiArai 0:927110422689 53 #define ACQ_MODE_BOTH (1UL << 12)
kenjiArai 0:927110422689 54 #define TRES_14BIT (0UL << 10)
kenjiArai 0:927110422689 55 #define TRES_11BIT (1UL << 10)
kenjiArai 0:927110422689 56 #define HRES_14BIT (0UL << 8)
kenjiArai 0:927110422689 57 #define HRES_11BIT (1UL << 8)
kenjiArai 0:927110422689 58 #define HRES_08BIT (2UL << 8)
kenjiArai 0:927110422689 59 #define BOTH_T_14_H_14 (TRES_14BIT + HRES_14BIT + ACQ_MODE_BOTH)
kenjiArai 0:927110422689 60
kenjiArai 0:927110422689 61 /** Interface for Humidity / Temperature Sensor, HDC1000
kenjiArai 0:927110422689 62 * @code
kenjiArai 0:927110422689 63 * #include "mbed.h"
kenjiArai 0:927110422689 64 * #include "HDC1000.h"
kenjiArai 0:927110422689 65 *
kenjiArai 0:927110422689 66 * // I2C Communication
kenjiArai 0:927110422689 67 * HDC1000 hmtp(dp5,dp27); // HDC1000 SDA, SCL (Akizuki module)
kenjiArai 0:927110422689 68 * // If you connected I2C line not only this device but also other devices,
kenjiArai 0:927110422689 69 * // you need to declare following method.
kenjiArai 0:927110422689 70 * I2C i2c(dp5,dp27); // SDA, SCL
kenjiArai 0:927110422689 71 * HDC1000 hmtp(i2c); // HDC1000 SDA, SCL (Akizuki module)
kenjiArai 0:927110422689 72 *
kenjiArai 0:927110422689 73 * int main() {;
kenjiArai 0:927110422689 74 * while(true){
kenjiArai 0:927110422689 75 * hmtp.get(); // Triger conversion
kenjiArai 0:927110422689 76 * printf("Temp: %+4.1fC, Humid: %4.1f%%\r\n", hmtp.temperature(), hmtp.humidity());
kenjiArai 0:927110422689 77 * wait(1.0);
kenjiArai 0:927110422689 78 * }
kenjiArai 0:927110422689 79 * }
kenjiArai 0:927110422689 80 * @endcode
kenjiArai 0:927110422689 81 */
kenjiArai 0:927110422689 82
kenjiArai 0:927110422689 83 class HDC1000
kenjiArai 0:927110422689 84 {
kenjiArai 0:927110422689 85 public:
kenjiArai 0:927110422689 86 /** Configure data pin
kenjiArai 0:927110422689 87 * @param data SDA and SCL pins
kenjiArai 0:927110422689 88 */
kenjiArai 0:927110422689 89 HDC1000(PinName p_sda, PinName p_scl);
kenjiArai 0:927110422689 90 HDC1000(PinName p_sda, PinName p_scl, uint8_t addr);
kenjiArai 0:927110422689 91
kenjiArai 0:927110422689 92 /** Configure data pin (with other devices on I2C line)
kenjiArai 0:927110422689 93 * @param I2C previous definition
kenjiArai 0:927110422689 94 */
kenjiArai 0:927110422689 95 HDC1000(I2C& p_i2c);
kenjiArai 0:927110422689 96 HDC1000(I2C& p_i2c, uint8_t addr);
kenjiArai 0:927110422689 97
kenjiArai 0:927110422689 98 /** Start convertion & data save
kenjiArai 0:927110422689 99 * @param none
kenjiArai 0:927110422689 100 * @return none
kenjiArai 0:927110422689 101 */
kenjiArai 0:927110422689 102 void get(void);
kenjiArai 0:927110422689 103
kenjiArai 0:927110422689 104 /** Read temperature data
kenjiArai 0:927110422689 105 * @param none
kenjiArai 0:927110422689 106 * @return temperature
kenjiArai 0:927110422689 107 */
kenjiArai 0:927110422689 108 float temperature(void);
kenjiArai 0:927110422689 109
kenjiArai 0:927110422689 110 /** Read humidity data
kenjiArai 0:927110422689 111 * @param none
kenjiArai 0:927110422689 112 * @return humidity
kenjiArai 0:927110422689 113 */
kenjiArai 0:927110422689 114 float humidity(void);
kenjiArai 0:927110422689 115
kenjiArai 0:927110422689 116 /** HDC1000 Configuration
kenjiArai 0:927110422689 117 * @param none
kenjiArai 0:927110422689 118 * @return none
kenjiArai 0:927110422689 119 */
kenjiArai 0:927110422689 120 void config(void);
kenjiArai 0:927110422689 121
kenjiArai 0:927110422689 122 /** Read Configuration
kenjiArai 0:927110422689 123 * @param none
kenjiArai 0:927110422689 124 * @return config. data
kenjiArai 0:927110422689 125 */
kenjiArai 0:927110422689 126 uint16_t read_config(void);
kenjiArai 0:927110422689 127
kenjiArai 0:927110422689 128 /** Set config register
kenjiArai 0:927110422689 129 * @param config parameter
kenjiArai 0:927110422689 130 * @return config read data
kenjiArai 0:927110422689 131 */
kenjiArai 0:927110422689 132 uint16_t set_config(uint16_t cfg);
kenjiArai 0:927110422689 133
kenjiArai 0:927110422689 134 /** Set I2C clock frequency
kenjiArai 0:927110422689 135 * @param freq.
kenjiArai 0:927110422689 136 * @return none
kenjiArai 0:927110422689 137 */
kenjiArai 0:927110422689 138 void frequency(int hz);
kenjiArai 0:927110422689 139
kenjiArai 0:927110422689 140 /** check Device ID number
kenjiArai 0:927110422689 141 * @param none
kenjiArai 0:927110422689 142 * @return HDC1000 = 1, others 0
kenjiArai 0:927110422689 143 */
kenjiArai 0:927110422689 144 uint8_t who_am_i(void);
kenjiArai 0:927110422689 145
kenjiArai 0:927110422689 146 /** Read Manufacturer ID
kenjiArai 0:927110422689 147 * @param none
kenjiArai 0:927110422689 148 * @return ID
kenjiArai 0:927110422689 149 */
kenjiArai 0:927110422689 150 uint16_t read_M_ID(void);
kenjiArai 0:927110422689 151
kenjiArai 0:927110422689 152 /** Read Device ID
kenjiArai 0:927110422689 153 * @param none
kenjiArai 0:927110422689 154 * @return ID
kenjiArai 0:927110422689 155 */
kenjiArai 0:927110422689 156 uint16_t read_D_ID(void);
kenjiArai 0:927110422689 157
kenjiArai 0:927110422689 158 protected:
kenjiArai 0:927110422689 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