08-20-2020 11:07 PM - edited 08-20-2020 11:19 PM
What could be the problem, when after power-on reset I get temperature and pressure right, but humidity value is the reset value (0x8000).
The next read returns the reset values for all of them.
The communication looks good (saleae) taken from the BME280 board pins.
Could that be caused by floating CSB? Too frequent reading? Bad oversampling setting? I'm using XinaBox SW1 with threads soldered on the connection pads and DuPonts in the other end. The processor is STM32L425 also running with VCC 1.8V.
It's hard to imagine how that could be power issue, because of the low current consumption compared the 3A output of the power supply.
I'm using 1.8V for Vcc and Vccio, though.
08-21-2020 12:22 AM
In order to check the issue, you need to double check the register 0xF2 and 0xF4.
Whether you use Force mode or normal mode?
If use Force mode, did you trigger the measure by writting the Force mode into register 00xF4 every time? then wait after measurement time to get data out?
If use normal mode, what is the oversampling settings and your read out frequency?
Did you use our latets API from Github for BME280 already in your project?
08-21-2020 06:20 AM - edited 08-21-2020 07:11 AM
That was quick!
I wrote my own driver. I tried both normal and forced mode. And I polled until status register has bits 0 and 3 reset before burst read of data registers.
I don't remember the oversampling settings. But I checked (in normal mode) that when I read, the mode seemed to be sleeping mode.
Is that how it works, or should the mode register contain the value written there?
Oversampling settings are 0 for humidity, 1 for temperature and pressure. I'm trying to read about every 500 ms.
And yes, in force mode trials I write force mode into the config-register before each read attempt.
But after one succesful read, should the register values to contain reset values (0x080000 or 0x8000)?
08-21-2020 01:03 PM - edited 08-21-2020 01:21 PM
Raising the voltage from 1.8V to 3.3V changed the situation such that no reset values are seen anymore, but still humidity raw value is wrong, I think. I also set the ovarsampling for humidity to 1.
The data read from the chip is:
buff uint8_t 0x48 (Hex)
buff uint8_t 0x87 (Hex)
buff uint8_t 0x0 (Hex)
buff uint8_t 0x85 (Hex)
buff uint8_t 0xeb (Hex)
buff uint8_t 0x0 (Hex)
buff uint8_t 0x52 (Hex)
buff uint8_t 0x95 (Hex)
Since I have no idea what the raw values represent, I can't figure out whether they make sense or not.
The compensation constants read from the chip are:
digH int32_t 75
digH int32_t 397
digH int32_t 0
digH int32_t 783
digH int32_t 50
digH int32_t 30
The configuration registers contain:
status uint8_t 0x4 (Hex)
ctrl_meas uint8_t 0x27 (Hex)
ctrl_hum uint8_t 0x1 (Hex)
config uint8_t 0x1 (Hex)
right after the data read.
08-21-2020 06:14 PM
The mode is bit [1:0] in same register (0xF4) as oversampling of temperature and pressure.
And every time you write register 0xF4, you should not forget to keep the value for oversampling of temperature and pressure.
The oversampling of humidity should not be 0 if you need humidity value.
and you need to follow the compensate formula in our API in Github to convert the register value to meaningful physical value.
Sensor supports 1.8V operation, it should not have reset issue under 1.8V. Maybe you need to check the whole circuit.