When nothing moves
Two LEDs in the corner tell you which rail is missing before you open a single file: red is VCC, the chip, and blue is V+, the servos. After that, an I²C scan says whether the chip answers, and the rest of the faults each have a symptom that points at them.
Look at the LEDs first
| Red (VCC) | Blue (V+) | What it means |
|---|---|---|
| off | off | No power at all. Check the adapter and the VCC wire. |
| off | on | Servo power, but the chip is unpowered: wire VCC, or bridge one V+TO VCC pad. |
| on | off | The chip runs, the servos have nothing. Plug in the adapter. |
| on | on | Both rails are up. The fault is on the bus, in the sketch, or at the servo. |
Each LED sits straight across its rail through 5.1 kΩ, so it proves that rail and nothing else.
Both lit: does the chip answer?
Run an I²C scan, or the first-servo sketch, which says No PCA9685 at 0x40.
when nothing answers. If the chip is silent:
- SDA and SCL swapped. SDA goes to GPIO 8 or A4, SCL to GPIO 9 or A5.
- No GND wire between the board and the microcontroller.
- The sketch starts I²C on other pins than the ones wired. On an ESP32 the pins
are whatever
Wire.begin()was given. - An address pad is bridged, so the board answers somewhere other than 0x40. A scan of the whole bus shows where.
It answers, and the servo still does not move
- OE is HIGH. Anything wired to OE that sits HIGH holds every output LOW, while the bus carries on normally. Disconnect it.
- The servo is on another channel, or its plug is turned round. Channel 0 is the left-hand column; brown or black goes on the bottom row.
- The pulse is going to an empty channel. Check the channel number in the sketch against the number printed above the pins.
It moves, badly
- It buzzes at the ends: its pulse is past what the servo can reach. Bring that end 50 µs toward 1500 at a time. The 150 and 600 counts from older tutorials, 732 and 2928 µs, do this to most servos.
- The microcontroller resets when servos move: servo current is reaching its supply. V+ must come from its own adapter, never the microcontroller's 5V pin or a computer port.
- Servos twitch when several move: the supply is too small for the stall current (Sizing the supply).
A meter goes a long way
| Measure | Against | Expect |
|---|---|---|
| VCC pin | GND | 3.3 V or 5 V, the microcontroller's logic |
| V+ pin | GND | the adapter's voltage, 6 V at most |
| OE pin | GND | 0 V |
| SDA and SCL, bus idle | GND | the same as VCC |
SDA at 5 V with an ESP32 on the other end means VCC is on the wrong supply, and the fix is in V+ and VCC.
When it does not work
The EXTCLK bit was probably set. It stays set until the power is cycled or the chip is reset, and on this board the external clock pin is grounded, so the PWM stops. Unplug everything and power it up again, or write 0x06 to I²C address 0x00, the general call software reset.
The chip's oscillator is not at the frequency the sketch assumes. Measure one channel's period and set the real oscillator frequency, as in 4096 counts. If the error differs from channel to channel on one board, it is the servos, not the chip.
Both are at 0x40. Bridge A0 on one of them and address it as 0x41 in the sketch. A scan should then show two addresses.
It is at 0x70, which is also the All Call address every chip listens to from power-up. Unbridge A4 or A5 so it has an address of its own.
The reference page: specifications, pins, downloads and the quick reference.
PCA9685 16-channel servo driver →Edit this page — content/books/pca9685/when-nothing-moves.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.