3

I'm using an Arduino Due with a logic level converter to interface with two different 5v sensors via I2C. Being of poor quality, these sensors have no data sheet.

When either one of these sensors is plugged in, I am able to read from it without issue. The moment I plug the other one in as well, the I2C stops working, and I just get 0. I know that it's not an address collision issue, because they have different addresses.

I tried adding an additional set of pull-up resistors (such that they are in parallel with the built-in ones) in order to counteract potentially increased bus capacitance, but no dice.

What could be causing this issue? I apologise for asking such a noob question.

  • 1
    The best way to diagnose I2C problems is to look at the signals with a scope. Then you can see whether the slaves are acknowledging the master's commands, check each sensor address and all. Can you do that and post the shot? Also, schematics would help a lot. – Ricardo May 3 '14 at 17:39
  • 1
    Another guess is that maybe you should remove one set of pullups from one of the boards. But that would probably damage it, so think carefully about it. – Ricardo May 3 '14 at 17:41
  • @Ricardo unforunately, I'm in high school and don't have access to a scope. can I ask how removing a set of pullups might resolve the issue? – Dr Coconut May 4 '14 at 8:53
  • Well, I was just guessing. As I said, without a scope, there's no way of knowing what's going on. But I read somewhere that each I2C module comes with its own set of pullups. Then, if you place too many of them on a bus, their resistance will divide up, changing the optimal pullup value. So, someone suggested that the modules should come without the pullups, so that one would calculate the optimal pullup resistance of the set of modules and solder it up in one of them (closer to the master I guess). – Ricardo May 4 '14 at 12:08
  • Somebody else said that it's easier to ship the modules with the pullups and then remove some of them if you combine several modules. – Ricardo May 4 '14 at 12:09
1

Your problem is probably from the level converter. Which one did you use? Most level converters are uni-directional, and don't work for I2C. See the App note and device from NXP: http://www.adafruit.com/datasheets/an97055.pdf

  • 1
    OP said it worked with one device – geometrikal Nov 13 '14 at 12:18

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.