I2C bus clashes

Hello
Quick question regarding I2C address clashes.

What happens (usually) if an I2C bus has 2 or more devices on it that are the same address?
Will said devices (assuming they are the same device) just act in unison, or will there be some kind of conflict on the bus?

I need to control quite a few servos and would like to use an 'off the shelf' controller PCB.
Just wondered if I could wire 4 up in parallel with them all having the same address (I know that means the 4 boards would operate identically).

Thanks

which board exactly do you have in mind ?

It is very likely that you can change the address of the board

Something like this maybe Overview | Adafruit PCA9685 16-Channel Servo Driver | Adafruit Learning System

I don't want to change the address Bob, I actually want all 4 boards to identically mimic each other.
Its a PCA9685 based board as you have linked

You would be better off giving each a unique address and controlling them properly from the sketch

Thanks Bob, but that doesn't answer the question as to what happens if they have the same address.
I don't want them to have separate addresses. The code is already being issued by an existing Servo controller that I didn't make. I know the address it is using to supply an existing servo board.

I want to make 4x of the item it is controlling and don't want to have to make a new controller.

I'll just buy 4 and try it

Further Googling reveals you can't

Which is often my advice with electronics, this is a great hobby for trying things that others say can't be done. Do please try and report what you find. I suspect that you will have problems, but if you don't try you'll never know.

It helps when answering questions here if we are in possession of all of the facts. For instance, what is this mysterious servo controller that you didn't make, how many servos are being controlled and what is the purpose of the project ?

Why not wire 4 servos to each channel of the controller? The servo control inputs are probably reasonably high impedance so 1-into-4 might work fine. If not, use some buffer chips on the controller outputs.

These servo's are pretty hefty babies. I am going to run 4x servos off each output but through a signal buffer/amplifier.

The main controller is a puppet control rig from a theatre... based on a horribly made Uno control board.
I don't have the code and this is a basically a freebie... I don't want to get into writing new code.
They are only paying for the extra mechanical stuff.

The have one puppet, and now want 4.

Each I2C device will pull the bus low, and that will causes issues if they all do that

Sounds like a broadcast use case.
EDIT: General call

Broadcast?

Is that the same as General call? You send out data on 0x00 and only those that understand the data respond?

It won't cause issues if they all do exactly the same thing at the same time. Maybe.

1 Like

I think the issue would be if one of them returns the bus high (or attempts to) slightly before everyone else.
Sounds like a recipe for unreliability to me

No I2C device can actively force the bus high.

There appears to be no way to answer this without trying it and then EXTENSIVE testing.
I think the safe route is to use the existing servo outputs and buffer/boost the signal to run 4x servos

1 Like

You could use a multiplexer to select conflicting addresses one at a time, this requires code however and you don’t want to write code so it may not be of much help.

If this is essentially one way communication, so you aren't ever getting data back from the slaves, then the only issue might be when they do an ACK after you send something to them. It seems like there might not be a problem if all bring a line low at about the same time. But if there is, maybe you could allow only one of them to ACK. That might be done by inserting diodes in the other three, so they could be brought low, but could not themselves bring the line low.

In any case, you need to look out for the pullup resistors if each slave has them installed onboard. The parallel resistance could be too low.

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