I2c 3.3V pressure sensor not detected

Hi, I need some help to connect a i2c 3.3V digital pressure sensor to the Arduino board.
I am using an Arduino Uno R3 board in order to acquire pressure values from the sensor. I connected the sensor to the board following the information in the datasheet (pag. 24) in the following way:
Arduino GND connected to sensor pin 1
Arduino 3.3V connected to sensor pin 2
Arduino pin A5 to sensor pin 3 (SCL)
Arduino pin A4 to sensor pin 4 (SDA)

This is the datasheet of the HSPPAD143A pressure sensor: https://www.mouser.com/datasheet/2/15/Alps_09242019_HSPPAD143A_data-1651688.pdf

I used a breadboard to implement the circuit shown in datasheet (pag.26):
I put two 3.3kOhm resistors between VDD and SCL and SDA
I put a 0.1uF Bypass capacitor between VDD and GND.

Then I used the attached code to see if the i2c connection works and to find the address of the device. But it returns "Unknown error at address 0x" for all the addresses and seems that the Arduino is not able to connect with the sensor.

Any suggestions to solve the problem?

Thank you very much!

#include <Wire.h>
 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
 
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
 
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknown error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
}

Show us images of your breadboard circuit.

Vdd being 3.3V or 5V?

I use the 3.3V Vdd of Arduino
Thank you

Often, it is not enough to just power a 3.3V device from the Arduino 3.3V pin, if the processor is running on 5V. The I/O pins still have 5V on them, so you need level translators between the Arduino pins and the sensor pins SCL and SDA.

That is an SMD part. How did you connect to it? Any possibility of heat damage, stray solder etc.? Can you show actual images of your hardware?

Thank you very much for your reply.
So I need to put a level shifter between Arduino pins and sensor pins? Is it possible to realize an equivalent circuit just using resistors instead of the level shifter?

I used wires that I soldered to the sensor pins, I tried with two different sensors but I got the same error so I don't think it's a soldering problem.

I am not able to send images of the actual hardware right now, I will provide them ASAP.
Thank you for your help!

You do realize, the pin diagram is a "top view"? So if you're facing the unit from the back the connections will be mirrored...

I haven't done the 5V to 3.3V on I2C myself, so I will let someone who has, answer that one.

This circuit is my go to I2C level shifter.

I2C LEVEL SHIFT

Thank you!

Here is a pre-fabricated board (Fig-1) containing 4 level sifters.
levelSifter-4
Figure-1:

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.