SNAS685A May 2016 – August 2016 HDC1010
The HDC1010 is a digital humidity sensor with integrated temperature sensor that provides excellent measurement accuracy at very low power. The sensing element of the HDC1010 is placed on the bottom part of the device, which makes the HDC1010 more robust against dirt, dust, and other environmental contaminants. Measurement results can be read out through the I2C compatible interface. Resolution is based on the measurement time and can be 8, 11, or 14 bits for humidity; 11 or 14 bits for temperature.
One of the key features of the HDC1010 is its low power consumption, which makes the device suitable in battery or power harvesting applications. In these applications the HDC1010 spends most of the time in sleep mode: with a typical 100nA of current consumption in sleep mode, the averaged current consumption is minimal. Its low consumption in measurement mode minimizes any self-heating.
The HDC1010 monitors the supply voltage level and indicates when the voltage supply of the HDC1010 is less than 2.8V. This information is useful in battery-powered systems in order to inform the user to replace the battery. This is reported in the BTST field (register address 0x02:bit) which is updated after power-on reset (POR) and after each measurement request.
The heater is an integrated resistive element that can be used to test the sensor or to drive condensation off the sensor. The heater can be activated using HEAT, bit 13 in Configuration Register. The heater helps in reducing the accumulated offset after long exposure at high humidity conditions.
Once enabled the heater is turned on only in the measurement mode. To have a reasonable increase of the temperature it is suggested to increase the measurement data rate.
The HDC1010 has two modes of operation: sleep mode and measurement mode. After power up, the HDC1010 is in sleep mode. In this mode, the HDC1010 waits for I2C input including commands to configure the conversion times, read the status of the battery, trigger a measurement, and read measurements. Once it receives a command to trigger a measurement, the HDC1010 moves from sleep mode to measurement mode. In measurement mode, the HDC1010 acquires the configured measurements and sets the DRDYn line low when the measurement is complete. After completing the measurement and setting DRDYn low, the HDC1010 returns to sleep mode.
To communicate with the HDC1010, the master must first address slave devices via a slave address byte. The slave address byte consists of seven address bits and a direction bit that indicates the intent to execute a read or write operation. The HDC1010 features two address pins to allow up to 4 devices to be addressed on a single bus. Table 1 describes the pin logic levels used to properly connect up to 4 devices. The state of the ADR0 and ADR1 pins is sampled on every bus communication and should be set before any activity on the interface occurs. The address pin is read at the start of each communication event.
|ADR1||ADR0||ADDRESS (7-bit address)|
The HDC1010 operates only as a slave device on the I2C bus interface. It is not allowed to have on the I2C bus multiple devices with the same address. Connection to the bus is made via the open-drain I/O lines, SDA, and SCL. The SDA and SCL pins feature integrated spike-suppression filters and Schmitt triggers to minimize the effects of input spikes and bus noise. After power-up, the sensor needs at most 15 ms, to be ready to start RH and temperature measurement. During this power-up time the HDC1010 is only able to provide the content of the serial number registers (0xFB to 0xFF) if requested. After the power-up the sensor is in the sleep mode until a communication or measurement is performed. All data bytes are transmitted MSB first.
To communicate with the HDC1010, the master must first address slave devices via a slave address byte. The slave address byte consists of seven address bits, and a direction bit that indicates the intent to execute a read or write operation.
To access a particular register on the HDC1010, write the desired register address value to the Pointer Register. The pointer value is the first byte transferred after the slave address byte with the R/W bit low. Every write operation to the HDC1010 requires a value for the pointer register (refer to Figure 10).
When reading from the HDC1010, the last value stored in the pointer by a write operation is used to determine which register is read by a read operation. To change the pointer register for a read operation, a new value must be written to the pointer. This transaction is accomplished by issuing the slave address byte with the R/W bit low, followed by the pointer byte. No additional data is required (refer to Figure 11).
The master can then generate a START condition and send the slave address byte with the R/W bit high to initiate the read command. Note that register bytes are sent MSB first, followed by the LSB. A write operation in a read-only register such as (DEVICE ID, MANUFACTURER ID, SERIAL ID) returns a NACK after each data byte; read/write operation to unused address returns a NACK after the pointer; a read/write operation with incorrect I2C address returns a NACK after the I2C address.
By default the HDC1010 will first perform a temperature measurement followed by a humidity measurement. On power-up, the HDC1010 enters a low power sleep mode and is not actively measuring. Use the following steps to perform a measurement of both temperature and humidity and then retrieve the results:
Read the temperature data from register address 0x00, followed by the humidity data from register address 0x01 in a single transaction as shown in Figure 14. A read operation will return a NACK if the contents of the registers have not been updated as shown in Figure 13.
To perform another acquisition with the same measurement configuration simply repeat steps 2 through 4.
If only a humidity or temperature measurement is desired, the following steps will perform a measurement and retrieve the result:
Retrieve the completed measurement result from register address 0x00 or 0x01, as appropriate, as shown in Figure 10. A read operation will return a NACK if the measurement result is not yet available, as shown in Figure 13.
To perform another acquisition with the same measurement configuration repeat steps 2 through 4.
It is possible to read the output registers (addresses 0x00 and 0x01) during an Temperature or Relative Humidity measurement without affecting any ongoing measurement. Note that a write to address 0x00 or 0x01 while a measurement is ongoing will abort the ongoing measurement. If the newest acquired measurement is not read, DRDYn stays low until the next measurement is triggered.
The HDC1010 contains data registers that hold configuration information, temperature and humidity measurement results, and status information.
|0x00||Temperature||0x0000||Temperature measurement output|
|0x01||Humidity||0x0000||Relative Humidity measurement output|
|0x02||Configuration||0x1000||HDC1010 configuration and status|
|0xFB||Serial ID||device dependent||First 2 bytes of the serial ID of the part|
|0xFC||Serial ID||device dependent||Mid 2 bytes of the serial ID of the part|
|0xFD||Serial ID||device dependent||Last byte bit of the serial ID of the part|
|0xFE||Manufacturer ID||0x5449||ID of Texas Instruments|
|0xFF||Device ID||0x1000||ID of HDC1010 device|
Registers from 0x03 to 0xFA are reserved and should not be written.
The HDC1010 has an 8-bit pointer used to address a given data register. The pointer identifies which of the data registers should respond to a read or write command on the two-wire bus. This register is set with every write command. A write command must be issued to set the proper value in the pointer before executing a read command. The power-on reset (POR) value of the pointer is 0x00, which selects a temperature measurement.
The temperature register is a 16-bit result register in binary format (the 2 LSBs D1 and D0 are always 0). The result of the acquisition is always a 14 bit value. The accuracy of the result is related to the selected conversion time (refer to Electrical Characteristics). The temperature can be calculated from the output data with:
|TEMPERATURE||[15:02]||Temperature||Temperature measurement (read only)|
|[01:00]||Reserved||Reserved, always 0 (read only)|
The humidity register is a 16-bit result register in binary format (the 2 LSBs D1 and D0 are always 0). The result of the acquisition is always a 14 bit value, while the accuracy is related to the selected conversion time (refer to Electrical Characteristics). The humidity can be calculated from the output data with:
|HUMIDITY||[15:02]||Relative Humidity||Relative Humidity measurement (read only)|
|[01:00]||Reserved||Reserved, always 0 (read only)|
This register configures device functionality and returns status.
|RST||||Software reset bit||0||Normal Operation, this bit self clears|
|Reserved||||Reserved||0||Reserved, must be 0|
|MODE||||Mode of acquisition||0||Temperature or Humidity is acquired.|
|1||Temperature and Humidity are acquired in sequence, Temperature first.|
|BTST||||Battery Status||0||Battery voltage > 2.8V (read only)|
|1||Battery voltage < 2.8V (read only)|
|TRES||||Temperature Measurement Resolution||0||14 bit|
|HRES||[9:8]||Humidity Measurement Resolution||00||14 bit|
|Reserved||[7:0]||Reserved||0||Reserved, must be 0|
These registers contain a 40bit unique serial number for each individual HDC1010.
|SERIAL ID[40:25]||[15:0]||Serial Id bits||Device Serial Number bits from 40 to 25 (read only)|
|SERIAL ID[24:9]||[15:0]||Serial Id bits||Device Serial Number bits from 24 to 9 (read only)|
|SERIAL ID[8:0]||[15:7]||Serial Id bits||Device Serial Number bits from 8 to 0 (read only)|
|[6:0]||Reserved||Reserved, always 0 (read only)|
This register contains a factory-programmable identification value that identifies this device as being manufactured by Texas Instruments. This register distinguishes this device from other devices that are on the same I2C bus. The manufacturer ID reads 0x5449.
|MANUFACTURER ID||[15:0]||Manufacturer ID||0x5449||Texas instruments ID (read only)|
This register contains a factory-programmable identification value that identifies this device as a HDC1010. This register distinguishes this device from other devices that are on the same I2C bus. The Device ID for the HDC1010 is 0x1000.
|DEVICE ID||[15:0]||Device ID||0x1000||HDC1010 Device ID (read only)|