2

I know that I2C devices are supposed to have unique addresses when used. What if I still use multiple devices with the same address, what can go wrong? Let me describe the situation:

I have multiple digital capacitors (NCD2400M by IXYS) and I would be using them so, that I always send the same command to every chip. I have no need of reading anything from those, which is the reason I was thinking why should I bother multiplexing my I2C line. I have no reason to identify them, only commanding. For the commanding I use Arduino (Nano currently, might change to some other Arduino model).

I have already tried commanding them simultaneously and it works like a charm. I tried so that I connected SDA and SCL of four chips and used RC circuit and square wave to check the rise time to verify that every chip indeed changes their capacitance.

enter image description here

However, I'm new to I2C protocol and I'm not yet aware of every detail. I guess there could be issues when one of the chips fail? Can I assume in this case that nothing goes wrong with the ACK/NACK bit since the chips are "identical"?

-RautSa

EDIT: After using correct keywords for searching I found this previously asked question. Based on that I now understand at least there would be a problem when only one of the chips tries to send NACK bit.

  • Please add a link to the sensor to your question. ixysiss.com/ncd2400 – Jot Feb 20 at 9:23
  • @Jot Thanks for the note, I added the link. – RautSa Feb 20 at 10:00
  • @Jaromanda X I guess you didn't bother reading my post? It does work, I have tested. The question is does it pose risks when used in a way it isn't intended to be used. – RautSa Feb 20 at 10:02
  • @Jaromanda X You really should elaborate your answers. If I expect it to not work correctly, it propably works correctly? Comments like "propably won't work" aren't helpful. If you had commented why it propably won't work, now that would have been helpful. – RautSa Feb 20 at 10:27
2

There is no risk for damaging something, but the risk is the reliability.

The NCD2400M operates at 3.3V and 5V, so that will work with every Arduino board.

Your question is very similar to the question that you already found: electronics.stackexchange.com/questions/417263/multiple-instances-of-same-device-on-i2c-bus.
There are a few specific Arduino things to mention.

During Arduino setup() a sensor is often checked if it is connected and if it is possible to communicate with a sensor. That would be impossible when the sensors share the I2C address.

The Arduino Wire library detects a bus error, for example when there are other I2C Masters on the bus, and returns with an error.
Since your NCD2400M are only Slaves, I think that they will not trigger a bus error.

You need some luck, and I can not guarantee that it will always work:

  1. When the NCD2400M behaves like a normal I2C Slave and it is not too smart, then it does not detect that another one pulls the SDA low for an acknowledge.
  2. Some sensors send a NACK when they are busy, I can not find such a note in the datasheet. You could write to the NCD2400M twice to be sure that they have received it.
  3. When they have an internal clock and respond with different timings on the I2C bus, then you can set the SCL clock lower. For example Wire.setClock(50000); after Wire.begin() for a 50kHz SCL clock.

When one of NCD2400M is blown, then you are not able to identify the bad one. However, when one of the NCD2400M is blown, perhaps the whole circuit is no longer reliable.

For a good design, you should know if you are actually communicating with a sensor or just talking into thin air. When you have made more Arduino projects, then you know that it is essential to know if a sensor is connected or not.

Trying this solution to make it "easy" for now, might cause a lot of troubles later.

Conclusion: It will work. You can use it for a test. When you use it in the final version, you take the risk that it can cause a lot of troubles.

More about the basics of the I2C bus: http://www.gammon.com.au/i2c

  • Thank you for your answer and the tips. With my current prototype I'll proceed with this configuration, and later on I'll add multiplexing to the more final design. Not getting the NACK information is a reason serious enough to implement the multiplexing. Too bad they only have two addresses available for the chip. – RautSa Feb 20 at 10:12
  • @RautSa with 4 chips and no multiplexer, you need 5 digital pins of the arduino nano. With a software i2c library and a single scl and four sda, you have four i2c busses. When each chip can have two addresses, then you need only two i2c busses, that is 3 pins with a software i2c library. – Jot Feb 20 at 12:15
0

Could always add a switch like DG406, DG409, or equivalent to select which cap is connected to SDA so that only one is commanded at a time. Pullup SDA on the output side so it is not floating at the chip.

  • True, that's possible. Most likely I'll have to go with the implementation which takes the least amount of space on the final designs PCB, so I'll have to check the options. – RautSa Feb 21 at 7:03

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.