PCA9685 board/Addresses and chains/08. Six pads, one address
Addresses and chains · 08 of 13

Six pads, one address

Every board leaves the factory at 0x40. Six solder pads on the underside, A0 to A5, add 1, 2, 4, 8, 16 and 32 to that when bridged, so two boards on one bus need at least one bridge between them. One combination, 0x70, is also the chip's broadcast address and is never safe to use.

Where the pads are

The underside of the board with the male header on the right-hand edge: in the middle, a column printed I2C ADDR with six small split pads labelled A0 at the top down to A5 at the bottom, all open, and to their right a smaller box printed V+TO VCC with two pads, 5V and 3V3.
The six address pads, A0 at the top. All open: 0x40.

Turn the board over. The column printed I2C ADDR holds six pads, A0 at the top to A5 at the bottom. Each pad is two halves with a gap between them.

Open is 0, bridged is 1

Each of the chip's six address pins has a 10 kΩ resistor to GND, so an open pad reads 0. A blob of solder across the gap connects that pin to VCC, and it reads

  1. The address is 0x40 plus the bridged pads' values:
Six pads, one address
0x40
Bridge a pad
Address
0x40
Binary
1000000
Pads bridged
0
All open: 0x40, as shipped. Each open pad is held at 0 by a 10 kΩ resistor. Every board in the box starts here, so a second board on the same bus needs at least one pad bridged.
PadAdds
A01
A12
A24
A38
A416 (0x10)
A532 (0x20)

For the three boards in the box: leave one open (0x40), bridge A0 on the second (0x41), and bridge A1 on the third (0x42). Solder with the board unpowered and unplugged from everything.

The address to avoid: 0x70

Bridging A4 and A5 together gives 0x70. The PCA9685 has a second, shared address, LED All Call, that every chip answers at power-up so one write can reach all of them, and it is 0x70. A board jumpered there answers its own writes and everyone else's broadcasts. Never jumper a board to 0x70.

The datasheet counts 62 usable addresses. Other devices on the bus take some of the same range: check that no sensor already sits at the address you pick.

Talking to a second board

In the Adafruit library, each board is its own object with its own address:

Adafruit_PWMServoDriver left  = Adafruit_PWMServoDriver(0x40);
Adafruit_PWMServoDriver right = Adafruit_PWMServoDriver(0x41);

Call begin(), setOscillatorFrequency() and setPWMFreq() on each.

To see which pads a board really has, the serial console example in the Servo-and-Motor repository has a pca command that scans the bus and prints the pad pattern for every board that answers.

When it does not work

Two boards on one bus, and only one of them works.

Both are still at 0x40, so both answer every write and neither can be told apart. Bridge A0 on one of them to move it to 0x41, and create a second driver object at 0x41 in the sketch.

The board is not at the address I soldered.

A blob that also touched a neighbouring pad sets two bits, or a joint that looks bridged is not. Run an I²C scan: the address it reports tells you which pads the chip actually sees. Look at the pads under a magnifier and reflow the one that disagrees.

A board moves when I command a different board.

It is probably at 0x70, which is also the All Call address every board answers at power-up. Unbridge A4 or A5 on it so it has an ordinary address.

How do I undo a bridge?

Lay solder wick across the bridge, press it with the iron until the solder soaks in, and lift both together. Check with a meter that the two halves of the pad are apart before powering the board.

Where this goes next

What changes on the bus and on V+ when boards plug into each other.

Chaining boards →

Edit this page — content/books/pca9685/six-pads-one-address.mdx

Community

Questions about this product

See what other owners have asked, and read their solutions.

Ask a question ↗

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.

Browse Modules and blocks on the forum →