On combined environmental sensors MS8607 and HDC1000.
Please read this first.


Sergei Bezrukov

Due to a huge variety of sensor models on todays market, it is difficult to surprise a spoiled user with a new model or to invent something really different. Nevertheless, many companies do not give up and keep developing sensors having better specs than their older counterparts and equipped with new features. This is exactly the case of the new sensors from the title, which I could not refrain from testing. The MEMS sensor MS8607 from Measurement Specialties appeared on the market at the end of 2014 and combines under the hood 3 different sensors for measuring atmospheric pressure, air temperature, and relative humidity. The sensors are assembled in an 8-pin package of dimensions 5×3×1 mm.


However, just 4 pins of the package are utilized. Those pins are easily identified by vias in the right image above. The package pitch of 1.27 mm makes it easy to solder. The device actually contains 2 independent chip dies that have common power and I2C interface pins but different I2C addresses. The dies are located in diagonally opposite package corners which minimizes their cross-heating. One of the sensors is intended for measuring only the humidity while the other one is for the pressure and temperature. The sensors are designed to operate within a wide range of voltages (1.5 to 3.6V) and have ultra-low power consumption. Conversion of every environmental parameter takes about 20ms. Unfortunately, the sensors are not equipped with a dust protecting cover. Moreover, one should avoid using them under bright light conditions that might affect sensor readings.

The humidity sensor provides a 3% accuracy and 16-bit resolution. Converting the sensor reading h into percentages of relative humidity is accomplished by using the same formula as for many other models: RH(%) = -6 + 125*h/216. Note that the formula assumes only integer operations and can be easily implemented on any microcontroller.
On the other hand, computing the pressure based on sensors data requires more work. First, one has to read the calibration coefficients from sensor. Those coefficients are stored in sensors memory by the manufacturer, are individual for every sensor, and are needed to be read just once. After that one can apply the formulas from the sensor data-sheet. However, the formulas assume 32-bit multiplication with accumulation of 64-bit products. Since I enjoy programming the microcontrollers on assembly language at home, to simplify the matters I decided to use Kinetis ARM-CM4 microcontroller in my test circuit.

MS8607 Schematic

The micro is clocked at 4 MHz frequency from the internal RC oscillator (the clock crystal on schematic is not utilized). Interfacing with the sensor and with the graphics128×32 LCD is provided, respectively, by the hardware I2C module at 100 KHz and by SPI module at 1 MHz.

ms8607 humidity and temperature ms8607 pressure

The humidity/temperature (first photo) and pressure (second photo) values alternate on the LCD with a 2s period. This is controlled by the low-power timer LPTMR0. The circuit is powered from a 3.3V voltage regulator mounted at the right edge of the breadboard. Note, that for an operation within a wide range of temperatures one should temperature compensate the raw temperature and pressure sensor readings by converting them into the corresponding physical units (see the formulas in the data-sheet). However, according to my numerical analysis, the compensation is unnecessary for using the sensor under leaving room temperature conditions (+15C to +35C). In this case the difference between compensated and uncompensated converted values does not exceed 0.07C and 0.1 mmHg, respectively, with maximum attaining at the lower temperature edge.
Furthermore, if one only needs to display integer values of pressure and temperature, the conversion formulas can be simplified by dropping the 4 lower-order bits of raw temperature readings as follows:
dT = (D2 >> 4) + (C5 << 4)      T(C)*100 = 2000 + (dT*C6 >> 19)
OFF = (C2 << 13) + (dT*C4 >> 6)      SENS = (C1 << 12) + (dT*C3 >> 7)
P(mbar) = ((D1*SENS >> 21) OFF) >> 11
This simplification results in 32-bit computations only and the loss of accuracy turned out to be below the integer values resolution.

I ran the test circuit nonstop for about 2 weeks and did not notice any difference between its displayed values and the values provided by a reference unit based on STH15 and BMP180 sensors. I did not do any software filtering after requesting raw sensor data conversion with oversampling value of 8192.

The next considered here temperature and humidity sensor HDC1000 from Texas Instruments also appeared on the market at the end of 2014. We all got used to seeing a hole on such sensors top cover that provides an air access to the sensing element. An interesting feature of HDC100 is mounting the capacitive sensor plates at the bottom face of the package. The BGA package balls result in a low sitting of sensor on the board. All this delivers a good natural protection from dust particles as well as from direct light hitting and makes the sensor look very cool. However, you can enjoy this nice sensor look only before soldering the sensor on board and only under a microscope. Besides, extremely small sensor dimensions (2×1.6mm) can save a bunch of space on your PCB in case of its deficit.


I was wondering if the low sensor mounting would prevent it from operative monitoring the changing air conditions. However, it turned out that my doubts were for nothing the sensor works just fine. The testing circuit I use is pretty standard, and the formulas for converting the raw sensor data into physical units are the same as for many other sensor models:
() = (t*165 >> 16) 40   and   RH(%) = h*100 >> 16,
These formulas can be easily implemented on any micro. I used Freescale ARM only because I work with them now and do not want to be distracted.

HDC1000 Schematic

The test circuit was assembled on a solderless breadboard and draws about the same current as the first one: ~100 μA including the LCD (with background light off) and 2 μA excluding the LCD.

hdc1000 humidity and temperature

The sensor working voltage range is 2.7 to 5V, its conversion time is below 7ms, and the average drawn current is about 1.2μA at 1 conversion per second rate. Similarly to other sensors, it is also equipped with a heater for removing the moisture condensing on plates and for eliminating the offset after working under high humidity conditions for a long time. Following the request, the sensor makes a single conversion and then enters a sleep mode with the current consumption dropping down into the nano-amper range. Completion of the conversion can be noted by the falling level edge at the RDY pin or by expiration of the conversion time interval, which depends on settings in the configuration register.

Sergei Bezrukov, april 2015

Discuss on the forum

Feedback E-mail            Other electronics  Other electronics


Counter of vizits

sensor for measuring atmospheric pressure sensor for measuring air temperature sensor for measuring relative humidity

Copyright © 2015-2021 by Dmitry Dubrovenko.