Chaining boards
The socket on each board's right edge takes the next board's header, so boards chain without a wire. All six signals pass along, and that has two costs: every board adds its own pair of 10 kΩ pull-ups to SDA and SCL, and every servo's current on V+ runs through the first board's header pins.
Board to board
The male header on a board's left edge fits the female socket on the right edge of the one before it. The six pins are in the same order on both, GND, VCC, SDA, SCL, OE and V+, so plugging boards together joins all six. The microcontroller wires to the first board's header.
Each board still needs its own address. Three boards from the box, chained, are 0x40, 0x41 and 0x42 once A0 and A1 are bridged on two of them (Six pads, one address).
Pull-ups add up
Every board fits a 10 kΩ pull-up on SDA and another on SCL. Chained, they are in parallel: two boards are 5 kΩ, eight are 1.25 kΩ.
Whatever pulls a line LOW has to take all that current. At 3.3 V, eight boards make 2.6 mA and nine make almost 3 mA. At 5 V, six boards reach 3 mA. The I²C standard only requires a device in standard and fast mode to pull a line down against 3 mA, so past those counts some device on the bus may not reach a clean LOW. The PCA9685 can pull harder; a small sensor on the same bus may not.
Three boards from one box are nowhere near the limit: 3.3 kΩ, 1 mA at 3.3 V.
Past the limit: a second bus
Past about eight boards the parallel pull-ups get stiff, and the board has no jumper to disconnect them. They are also not a part to desolder: SDA's and SCL's pull-ups share one four-resistor array with the pull-downs that hold A0 and A5 at 0, so lifting it leaves the address floating.
So keep chains short. For more boards than one bus carries comfortably, and a microcontroller with a second I²C bus, put the rest on that bus, on its own pins.
V+ rides the chain too
The sixth pin is V+. Plugged together, the boards' V+ rails are one rail, fed from wherever power comes in. If one adapter powers the chain through the first board, every servo's current passes through that board's 2.54 mm header pins and back through its GND pin. Pins like these are typically rated around 3 A.
Two adapters on a plugged chain are no better: their V+ rails are joined, so the adapters are connected to each other.
For more than a few small servos:
- Give every board its own adapter, in its own terminal or USB-C.
- Join the boards with jumper wires, not edge to edge: GND, VCC, SDA and SCL, plus OE if you use it.
- Leave V+ unconnected between boards.
GND stays joined, because the pulses need one ground to be measured against.
When it does not work
Two boards at the same address fight over every reply. Check the new board's address pads against every other board's; each board in a chain needs its own pattern, and none of them 0x70, the All Call address.
Ten boards' pull-ups in parallel pull SDA and SCL up harder than the I²C standard lets a device be asked to pull down. The board has no jumper to disconnect its pull-ups, so split the chain: fewer boards on this bus, and the rest on a second I²C bus.
Servo current for the whole chain is passing through its V+ and GND pins. Stop the load at once, give each board its own supply, and join the boards with jumper wires that leave V+ out.
Not safely. The SDA and SCL pull-ups share one four-resistor array, RN6, with the pull-downs that hold A0 and A5 at 0. Lift it and those two address pins float, so the board's address becomes a guess. Keep the chain short instead.
The one pin that turns every output off at once, on every board in the chain.
OE stops everything →Edit this page — content/books/pca9685/chaining-boards.mdx
Questions about this product
See what other owners have asked, and read their solutions.
PCA9685 16-Channel Servo Driver Board, USB-C Powered
Loading discussions…
Discuss this article
Ask about this page. The answer stays here, on the page it belongs to, for whoever hits the same wall next.