This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

HDC2080: HDC2080 invalid results

Part Number: HDC2080

Hi, it looks like this kind of question has been asked quite a few times already, but I still have to do it again. Why my HDC2080 is returning invalid values?

I am trying to use it in "on demand" mode like this:

//After device boots up, reset sensor
[00:00:10.205,108] <dbg> i2c: Write: 0e 80

//Wait for 3ms and write all zeros to 0x0E(Auto disabled, heater off, no int)
[00:00:10.208,587] <dbg> i2c: Write: 0e 00

//Write all zeros to 0x0F, not sure what the purpose of this is, but programming guide says to do this. No effect on the problem
[00:00:10.209,014] <dbg> i2c: Write: 0f 00

// Enable data ready interrupt/flag
[00:00:10.209,411] <dbg> i2c: Write: 07 80

// Then, every time I want to make a measurement I do this(a loop starts here)
// Start command
[00:00:10.209,869] <dbg> i2c: Write: 0f 01

// After 2ms(time 2-100ms does not affect to results) read data
[00:00:10.213,378] <dbg> i2c: RW(W): 00
[00:00:10.214,202] <dbg> i2c: RW(R): d8 61 fe ff
[00:00:10.214,233] <inf> hdc2080: Measured temperature: 23.06
[00:00:10.214,233] <inf> hdc2080: Measured humidity: 99.99
// Results are rubbish. Results are sometimes sane, but usually humidity is FFFF or FEFF
// Also temperature is about 2 degrees higher than what it is when the measurement actually works

I have tried to use the auto mode and tried all sane and insane timings that I can think of, but no luck. I also tried to dump the whole 16 bytes of registers in every step. Then I noticed this:

// Register dump after reset command. Register 0x04 is not at 0x00 what it says in data sheet.
// Register 0x0F is also not 0x00
00 00 00 00 28 00 00 00 00 00 00 ff 00 ff 00 f6

// After the init I describe above, everything is what I except them to be
00 00 00 00 00 00 00 80 00 00 00 ff 00 ff 00 00

// After Start command, still ok
00 00 00 00 00 00 00 80 00 00 00 ff 00 ff 00 00

// After sleeping for 2ms
// Interrupt at 0x04 tells that data is ready, data in temp&hum registers is f1 61 01 00
// And also 0x05 and 0x06 have changed?
f1 61 01 00 10 61 00 80 00 00 00 ff 00 ff 00 00

// If I read them again immediately Data ready bit is cleared as expected, but humidity changed to FFFF,
f1 61 ff ff 00 61 00 80 00 00 00 ff 00 ff 00 00

// In a loop after this first reading(10s from last I2C communication above) registers are otherwise unchanged
// but 0x06 has again mysteriously changed (0x00->0xFF)
// Before next start command
f1 61 ff ff 00 61 ff 80 00 00 00 ff 00 ff 00 00

// After start command and 2ms sleep, data again ready, both temp and hum have changed, but they are still rubbish
ec 61 fe ff 10 61 ff 80 00 00 00 ff 00 ff 00 00

 

Any hints what to test or try next? I have used this sensor in other HWs succesfully and never having these kind of problems. So it might be something HW related.

-Jussi-

  • Hi Jussi,

    Welcome to the E2E Forums.

    Do you have a schematic you can share? If not, can you share what your operating voltage and I2C pullup values are?

    Also, have you looked at your I2C waveforms on a logic analyzer or oscilloscope? 

    Best Regards,
    Brandon Fisher

  • Hi and thanks,

    I added two captures. Sending the Start measurement command and reading the temp/hum registers. I also added the schema of the sensor. I2C captures are taken from the sensor side of R99 and R100. I also measured that VDD remains stable at 3.3V when measurements are made. There are lots of other I2C slaves connected to the same bus.

    -Jussi-

  • Oh yes and the pullups are 2.7k

  • Hi Jussi,

    Thank you for sharing your schematic and I2C waveforms.

    Jussi Ratilainen said:
    // After sleeping for 2ms
    // Interrupt at 0x04 tells that data is ready, data in temp&hum registers is f1 61 01 00
    // And also 0x05 and 0x06 have changed?
    f1 61 01 00 10 61 00 80 00 00 00 ff 00 ff 00 00

    In regards to your original post, it looks like your register 0x04 is reading 0x10, which would correspond to a high humidity warning instead of a DRDY flag, are you never seeing 0x80 in the 0x04 register no matter how long the device runs?

    Registers 0x05 and 0x06 will update to hold the maximum temperature and humidity values that have been shown since the last reset, so they seem to be working correctly (although the 0xFF value is due to the erroneously high humidity value you are seeing). Your temperature readings do seem to be okay around 23C. Has the HDC2080 been directly exposed to any moisture, such as during a board wash?

    Your I2C waveforms look like the part is properly ACKing your commands, but it seems like you may have a lot of bus capacitance based on the shape of the rising edges, possibly due to the multiple devices you have on the bus. Have you ensured that none of these devices are inadvertently configured for the same address of the HDC2080? 

    Also, are your I2C Controller and the HDC2080 sharing a ground plane? The HDC definitely appears to have a lower VOL than your controller based on these waveforms. 

    Best Regards,
    Brandon Fisher

  • Hi Brandon,

    Yes I have seen 0x80, not sure why that dump was missing that bit. Definitely sure that results are rubbish after DRDY bit is being set. I also see a lots of other interrupts set in 0x04 even though I am not enabling them in 0x07.

    Temperature is not ok because it always shows few degrees more than what it actually is when I hit this problem.

    I am 99.99% sure that there are no other devices using the same address. But I will have to raise that sureness level to 100% by trying to disconnect one sensor from one of the boards.

    We are trying to make sure what are the steps that have been used in board assembly. I am starting to think that this really has to be something other than SW fault. Maybe we should also try to replace the sensor and see if it helps

    To give you some more details: We have done hundreds of PCBs with HDC2080 and never had any problems with it. Now I have a new prototype PCB in my hands, 12 pieces of them. From these 12 pieces around 10 have been powered on for 1day-2 weeks now. Now I have:

    - One board that is having these problems very frequently, but not always

    - Another board that has reported 3 times this 100% humidity during the 8 days it has been on

    Devices are measuring TRH every 5 minutes. One could be a mistake, but since I have two failing boards in my hands, it feels like an actual problem...

    About the ground plane. This sensor is isolated from the rest of the board quite well(to reduce self heating effects) and only few traces are going to that area. See the attached picture. Maybe this is what is causing the voltage difference. Do you think it might be a source for the problem here?

  • Hi Jussi,

    Jussi Ratilainen said:
    Temperature is not ok because it always shows few degrees more than what it actually is when I hit this problem.

    Have you measured the current draw during one of these failures? A few degrees of heating is possible if higher current draw is occurring for some reason.

    Jussi Ratilainen said:
    About the ground plane. This sensor is isolated from the rest of the board quite well(to reduce self heating effects) and only few traces are going to that area. See the attached picture. Maybe this is what is causing the voltage difference. Do you think it might be a source for the problem here?

    I've seen voltage differences like this before, but your traces don't seem like they are really long enough to cause this much difference in the ground level. It appears that this kind of voltage offset is common with serial resistances (see https://www.i2c-bus.org/i2c-primer/serial-resistances-and-debugging/). If you can short these series resistors on one of the failing boards it would be a good way to prove or disprove this. Most of our sensors are rarely used with these series resistances. I would also try shorting R39 at the same time just to remove that as a variable.

    You do not have D3, 4 and 10 populated correct? 

    Best Regards,
    Brandon Fisher

  • To get back to this one, I've shorted the series resistors and it did not help.

    We changed the sensor to a new one and now the new sensor now reports 0% humidity. It can work for a day and then be at 0% for two days, then work for few hours etc...

    I just have to give up because I am just totally out of ideas. I hope that this PCB is somehow cursed and in the next patch they will work.

  • Hi Jussi,

    I am sorry to hear you are still having trouble. 

    This behavior isn't something that I've seen reported before, but you could try the I2C workaround presented at the end of this thread: https://e2e.ti.com/support/sensors/f/1023/t/879641

    Another thing you could to try is a reflow the boards showing this issue just to ensure all the solder joints are good. I would caution that humidity sensors can have their RH readings shifted by multiple reflows, so it would only really be viable as a troubleshooting step for these prototypes. 

    Best Regards,
    Brandon Fisher