1
\$\begingroup\$

I had a problem when implementing I2C communication between NXP Kinetis K50 micro-controller and Honeywell Humidlcon I2C RH sensor. The RH sensor doesn't acknowledge when receiving the default address 0x27. After testing SCL and SDA signals with oscilloscope, I realized the sensor failed to acknowledgebecause the SDA line fluctuated between around VDD and VDD/2. In my program, the RH sensor receives a measurement command and a read command alternately for every 100ms. In general the signal rises to VDD after the write-bit (logic LOW) following the 7-bit address, whereas drops to about VDD/2 after the read-bit (logic HIGH) following the 7-bit address. Waveform of the SDA line fluctuation (with larger time scale), and detailed I2C SCL and impaired SDA signals are attached.

My pull-up resistors are 2.2K as suggested by the datasheet, current drawn by the RH sensor is below 1mA during I2C communication. This same I2C interface ever worked well with Sensirion SHT35 sensor. After we switched to Honeywell RH sensor, I did minor modification to the code, because Honeywell RH sensors perform measurement and return data without command, but controlled by the last bit of the first byte received from the master. The application circuit of the sensor can be find at https://sensing.honeywell.com/index.php?ci_id=147072

and the communication document can be found at https://sensing.honeywell.com/i2c-co...al-07jun12.pdfenter image description here

enter image description here

enter image description here


Now I have a new problem with the SHT35 RH sensor after I2C pin changed into open-drain.

Since the I2C communication between Honeywell Humidlcon and the microcontroller has been solved, I would like to check if the open-drain setting works with SHT35 or not. Previously (with the above setting) when the failure occurred, it's only the RH sensor doesn't acknowledge, but now when open-drain is enabled I got fluctuation on the SDA line again and the fluctuation frequency (about 0.34ms) is not related to my data updating frequency. The waveform is attached.

I also tried to internally pull-up the the pins and disable open-drain, again RH sensor no acknowledge

enter image description here

enter image description here

\$\endgroup\$
  • 4
    \$\begingroup\$ This looks as a push and a pull transistor are fighting against each other. You have to check your code whether it accidentally enables the push transistor of your µC pin. It shouldn't, I²C is open-drain. \$\endgroup\$ – Janka Nov 5 '18 at 18:47
  • 1
    \$\begingroup\$ Hi Janka, you are right. After changing to open-drain, it's working now! But the same code has been working with previous I2C sensor \$\endgroup\$ – Shishiker Nov 5 '18 at 20:54
  • 1
    \$\begingroup\$ That other sensor detects VDD/2 as low then. \$\endgroup\$ – Janka Nov 5 '18 at 21:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.