PCA9685 board/Addresses and chains/10. OE stops everything
Addresses and chains · 10 of 13

OE stops everything

OE, output enable, switches all sixteen outputs off at once when it is pulled HIGH, whatever the sketch or the bus is doing. A 10 kΩ resistor holds it LOW, so it can be left unconnected. Wired to a GPIO, it is a stop button that works even when the I²C bus does not.

A pin that overrides the bus

OE is the fifth pin on the control header, and the underside prints HIGH - DISABLE beside it. It goes straight to the chip's output-enable pin, which is active LOW: LOW means outputs on.

OE high: everything stops, the bus does not
OE LOW: outputs on
Running. OE is LOW, held there by its resistor.
OE
LOW
Outputs
pulsing
I²C
idle
OE is LOW, so the outputs are live. A 10 kΩ resistor holds it there, which is why you can leave the pin unconnected. Press the button to pull it HIGH.

A 10 kΩ resistor on the board pulls OE to GND. Leave the pin unconnected and the outputs are always on, which is how every build in this book is wired. Pull it HIGH and all sixteen outputs are driven LOW at once: no pulses leave the board.

What it does and does not stop

It stops the pulses. The chip keeps running, keeps answering on I²C, and keeps every channel's setting; drop OE LOW again and the same pulses come back.

It does not cut servo power. V+ stays on the red row. What a servo does with no pulse depends on the servo: many simply stop driving and can be turned by hand, but do not count on a particular one to go limp.

OE is one of the six chained pins, so in a plugged-together chain one OE wire stops every board.

Wiring a stop

Any free GPIO to OE:

const int KILL = 4;           // any free GPIO, wired to OE

void setup() {
  pinMode(KILL, OUTPUT);
  digitalWrite(KILL, LOW);    // outputs on
}

void stopAll()  { digitalWrite(KILL, HIGH); }
void startAll() { digitalWrite(KILL, LOW); }

Because it is one wire and one GPIO, it works when a stuck I²C bus would not let a command through. Until the sketch sets the pin as an output, the board's resistor holds OE LOW and the outputs stay live, unless the microcontroller itself pulls that GPIO up while it boots.

When it does not work

The board answers on I²C but no channel has a pulse.

Check OE. If it is wired to 3V3, 5V or a GPIO that sits HIGH, every output is held LOW while the bus carries on normally. Disconnect OE, or drive it LOW, and the pulses return.

One OE wire stopped every board in my chain.

That is how it is wired: OE is one of the six chained pins, so every plugged-in board shares it. To stop boards separately, join them with jumper wires and give each board's OE its own GPIO.

My LEDs came on when I pulled OE HIGH.

They are wired from VCC to the channel pins, so they light when a pin is LOW, and OE HIGH drives every pin LOW. Servos on the same board get no pulse at that moment; the LEDs simply work the other way round.

Alongside this page
Where this goes next

One servo on channel 0, from an ESP32-S3 or an Arduino Uno, with a sketch that says what it is doing.

The first servo →

Edit this page — content/books/pca9685/oe-stops-everything.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 →