I'm trying to connect different sensors (sensor A/B/C) via I2C (same bus).
However, from datasheets, I noticed "sensor A" needs pull-up = 1Kohm.
And "sensor B" needs pull-up ranges from 2.2Kohm to 10Kohm.
The other one, datasheet did not mention ( typ. 4.7K ohm pull-up is OK for "sensor C").
I think just one set of pull-up may be enough for 3 sensors in same bus.
However, for the contradiction between sensor A & B, how should I do?
Is there any good way to connect all 3 together with smooth & safe I2C communication?
I2C only needs one pullup, at the end of chain of devices preferably. 4.7K is generally pretty good for pullup to 5V.
If you have a lot of messy wiring, 3.3K or 2.7K might be needed instead.
Can you tell which Arduino board you use ?
And which sensors modules do you have, please give links to them.
And perhaps also links to the manufacturer page or datasheets of the sensors.
Many sensor modules on Ebay have already pullup resistors. Some sensors modules are 3.3V, some Arduino boards are 5V. Some modules from Ebay have the wrong value for the pullup resistors soldered on the module.
A datasheet that tells that the pullup resistor must be 1k (either for 3.3V or 5V) is wrong. That is not possible, because that is outside the specifications of the I2C bus.
For Arduino boards, I have UNO and DUE could be chose.
And one of my sensor (sensor A) is MPL3115A2.
From datasheet (page7) of MPL3115A2, pull-up should be 1K by my understanding.
I'll use other sensor together such as BMP180 together.
However, datasheet shows pull-up range 2.2K~10K ohm in page19.
Due to multiple connecting sensors in same bus, I won't assemble existing modules.
I'll combine sensors and recreate an assembled module together.
So I'm really seeking suitable pull-up to let I2C smooth communicate and no device will be damaged.
The numbers in the datasheet are for 1k pullup resistors. That is to get the maximum speed. It means that the MPL3115A2 can do a little more than the standard I2C specifications. But it does not require the 1k pullup resistor. It will work 100% okay with 4k7 or 10k or even higher values. As long as it can see good low and high values on the I2C bus.
The Arduino Uno can not handle a 1k pullup resistor according to the datasheet of the ATmega328P, so the I2C bus would not work anyway with 1k pullup.
The Arduino Uno doesn't have the 4MHz Fast Mode Plus for I2C. Just the normal 100kHz, and 200kHz and 400kHz will often work also. I don't know about the Due.
The Arduino Uno has an internal pullup resistor (to 5V !) of about 50k.
When you use the bare sensors, a single pullup resistor of 4k7 to 3.3V for the whole I2C bus will be fine.
You know that you can't use long wires with the I2C bus ?