📋 Overview
The CD74HC4067 is a 16-channel analog/digital multiplexer and demultiplexer breakout board that solves a very common problem in Arduino and microcontroller projects: running out of input pins. Think of it as an electronically controlled rotary switch — it connects one common signal pin (labeled SIG on the board) to any one of 16 channel pins (C0 through C15) based on a 4-bit binary address you provide on the select pins (S0–S3).
The result is dramatic pin savings. Instead of needing 16 separate analog or digital input pins to read 16 sensors, you only need 5 pins total — four for the address (S0–S3) and one for the signal (SIG). That frees up the rest of your microcontroller for other tasks.
The CD74HC4067 works equally well with analog and digital signals, and its internal switches are bidirectional — signals can flow in either direction. This makes it useful not just for reading multiple sensors, but also for routing data to multiple devices, multiplexing serial communication lines, and many other applications.

⭐ Key Features
- 16-Channel Multiplexing: Route one common signal to any of 16 individual channels using just 4 address select pins.
- Analog & Digital Compatible: Works with analog voltage signals and digital logic signals on the same board.
- Bidirectional Signal Flow: Internal switches work in either direction — use as a multiplexer (many-to-one) or demultiplexer (one-to-many).
- Only 5 Pins Required: Control 16 channels using S0, S1, S2, S3 (address) + SIG (signal) — ideal for pin-limited microcontrollers.
- Enable Pin (EN): Drive EN HIGH to disconnect the SIG pin from all channels at once — useful for power saving or bus isolation.
- Low On-Resistance: 70Ω at 4.5V — suitable for clean signal switching with minimal voltage drop.
- Break-Before-Make Switching: Prevents momentary short-circuits when switching between channels (6 ns transition at 4.5V).
- Wide Supply Voltage Range: Operates from 2V to 6V, compatible with both 3.3V and 5V microcontroller systems.
- Wide Temperature Range: Rated from −55°C to +125°C for reliable operation in demanding environments.
🎯 Applications
- Reading 16 analog sensors (temperature, light, moisture, flex, force, etc.) using a single Arduino analog pin
- Scanning 16 buttons or switches with a single digital input pin
- Routing TTL-level serial TX signals from 16 devices to one microcontroller RX pin
- Multiplexing I2C or SPI buses across multiple devices with different addresses
- Controlling up to 16 LEDs, relays, or actuators from a single digital output pin
- Data acquisition systems requiring many analog inputs on a single ADC channel
- Cascading multiple boards for 32, 48, or 64-channel expandable input/output systems
- Audio signal routing and switching circuits
📊 Specifications
| Parameter | Value |
|---|---|
| IC | CD74HC4067 CMOS 16-Channel Analog/Digital Multiplexer |
| Number of Channels | 16 (C0 – C15) |
| Supply Voltage (VCC) | 2V to 6V |
| Maximum Signal Voltage | Must not exceed VCC |
| On-Resistance | 70Ω @ 4.5V |
| Break-Before-Make Transition | 6 ns @ 4.5V |
| Signal Type | Analog and digital |
| Signal Direction | Bidirectional |
| Address Select Pins | S0, S1, S2, S3 (4-bit binary address) |
| Enable Pin | EN — active LOW (HIGH = all channels disconnected) |
| Operating Temperature | −55°C to +125°C |
| Dimensions | Approx. 41 × 18.7 mm (1.6 × 0.74 inches) L × W |
📌 Pinout / Pin Diagram
The breakout board exposes two groups of pins: a control/signal header and a channel header.
Control and Signal Pins
| Pin Label | Description |
|---|---|
| VCC | Power supply — connect to 2V to 6V (typically 3.3V or 5V) |
| GND | Ground — connect to the ground of your circuit |
| SIG | Common signal pin — the single input or output shared by all 16 channels. Connect to your microcontroller's analog or digital pin. |
| EN | Enable — active LOW. Connect to GND (or a digital output held LOW) to enable the chip. Drive HIGH to disconnect SIG from all channels. |
| S0 | Address select bit 0 (LSB) — connect to a digital output pin |
| S1 | Address select bit 1 — connect to a digital output pin |
| S2 | Address select bit 2 — connect to a digital output pin |
| S3 | Address select bit 3 (MSB) — connect to a digital output pin |
Channel Pins
| Pin Label | Description |
|---|---|
| C0 – C15 | The 16 individual signal channels. Connect sensors, devices, or signal sources/destinations to these pins. Only the channel selected by the S0–S3 address will be connected to SIG at any given time. |
Important: The voltage on any channel pin (C0–C15) or the SIG pin must never exceed VCC. Applying a voltage higher than VCC to a signal pin can damage the chip permanently.
🔌 Wiring / Connections
Basic Wiring — Arduino Uno
| CD74HC4067 Pin | Connect To | Notes |
|---|---|---|
| VCC | Arduino 5V | Or 3.3V for 3.3V systems |
| GND | Arduino GND | Common ground |
| SIG | Arduino A0 | Analog input (or any digital pin for digital use) |
| EN | Arduino GND or pin 8 | Tie to GND to keep always enabled, or use a digital pin for software control |
| S0 | Arduino pin 4 | Address bit 0 (LSB) |
| S1 | Arduino pin 5 | Address bit 1 |
| S2 | Arduino pin 6 | Address bit 2 |
| S3 | Arduino pin 7 | Address bit 3 (MSB) |
| C0 – C15 | Sensors / devices | Connect up to 16 signal sources or destinations |
Note: If you don't need software control of the enable function, simply connect the EN pin directly to GND. This keeps the chip permanently enabled without using an Arduino pin.
🔧 Channel Addressing
You select a channel by writing a 4-bit binary number to the S0–S3 pins. S0 is the least-significant bit (LSB) and S3 is the most-significant bit (MSB). The table below shows the pin states required to select each channel.
| Channel | S3 | S2 | S1 | S0 |
|---|---|---|---|---|
| C0 | 0 | 0 | 0 | 0 |
| C1 | 0 | 0 | 0 | 1 |
| C2 | 0 | 0 | 1 | 0 |
| C3 | 0 | 0 | 1 | 1 |
| C4 | 0 | 1 | 0 | 0 |
| C5 | 0 | 1 | 0 | 1 |
| C6 | 0 | 1 | 1 | 0 |
| C7 | 0 | 1 | 1 | 1 |
| C8 | 1 | 0 | 0 | 0 |
| C9 | 1 | 0 | 0 | 1 |
| C10 | 1 | 0 | 1 | 0 |
| C11 | 1 | 0 | 1 | 1 |
| C12 | 1 | 1 | 0 | 0 |
| C13 | 1 | 1 | 0 | 1 |
| C14 | 1 | 1 | 1 | 0 |
| C15 | 1 | 1 | 1 | 1 |
Tip: Notice that the channel number in decimal is the binary address. Channel 5 = binary 0101 (S3=0, S2=1, S1=0, S0=1). Channel 12 = binary 1100 (S3=1, S2=1, S1=0, S0=0). You can use bit-shifting in your code to set the address pins directly from the channel number — see the code example below.
🚀 Getting Started
The following Arduino sketch reads all 16 channels sequentially and prints each value to the Serial Monitor. It uses the wiring described in the Wiring section above, with SIG connected to analog pin A0 and the address pins on digital pins 4–7.
Arduino Sketch — Read 16 Analog Channels
// CD74HC4067 16-Channel Multiplexer — Arduino Example
// Reads 16 analog inputs using only 5 pins
const int S0_PIN = 4; // Address select bit 0 (LSB)
const int S1_PIN = 5; // Address select bit 1
const int S2_PIN = 6; // Address select bit 2
const int S3_PIN = 7; // Address select bit 3 (MSB)
const int EN_PIN = 8; // Enable (LOW = chip enabled)
const int SIG_PIN = A0; // Common signal pin
// Set S0-S3 to select the desired channel (0-15)
void selectChannel(int channel) {
digitalWrite(S0_PIN, (channel >> 0) & 1);
digitalWrite(S1_PIN, (channel >> 1) & 1);
digitalWrite(S2_PIN, (channel >> 2) & 1);
digitalWrite(S3_PIN, (channel >> 3) & 1);
}
void setup() {
pinMode(S0_PIN, OUTPUT);
pinMode(S1_PIN, OUTPUT);
pinMode(S2_PIN, OUTPUT);
pinMode(S3_PIN, OUTPUT);
pinMode(EN_PIN, OUTPUT);
digitalWrite(EN_PIN, LOW); // Enable the multiplexer
Serial.begin(9600);
Serial.println("CD74HC4067 — Reading all 16 channels...");
}
void loop() {
for (int ch = 0; ch < 16; ch++) {
selectChannel(ch);
delayMicroseconds(10); // Allow signal to settle after channel switch
int value = analogRead(SIG_PIN);
Serial.print("C");
Serial.print(ch);
Serial.print(": ");
Serial.println(value);
}
Serial.println("----------");
delay(1000); // Wait 1 second, then repeat
}
Open the Serial Monitor at 9600 baud. You will see the ADC readings (0–1023) for all 16 channels printed once per second. Connect sensors, potentiometers, or other analog sources to C0–C15 to see their values cycle through.
How the selectChannel() Function Works
The function uses bit-shifting to extract each bit of the channel number and write it to the corresponding address pin. For example, for channel 9 (binary 1001):
-
(9 >> 0) & 1 = 1→ S0 = HIGH -
(9 >> 1) & 1 = 0→ S1 = LOW -
(9 >> 2) & 1 = 0→ S2 = LOW -
(9 >> 3) & 1 = 1→ S3 = HIGH
This selects channel C9, connecting it to the SIG pin.
Using the Enable Pin in Code
If you wired EN to an Arduino digital pin (rather than directly to GND), you can disable the multiplexer in software:
digitalWrite(EN_PIN, HIGH); // Disconnect SIG from all channels digitalWrite(EN_PIN, LOW); // Re-enable — selected channel reconnects
This is useful for power saving, bus isolation, or pausing multiplexer operation without resetting the channel address.
💡 Tips
Tip 1 — Signal voltage must not exceed VCC. This is the most important rule for this chip. If your sensor output voltage exceeds VCC, you risk permanently damaging the CD74HC4067. For 3.3V sensors on a 5V Arduino, connect VCC to 5V and ensure sensor outputs do not exceed 5V — or use a logic level converter on the signal lines.
Tip 2 — Add a settling delay after switching channels. After changing the address pins, allow at least 1–10 microseconds before taking an analog reading. The delayMicroseconds(10) call in the sample sketch handles this. Skipping this step can result in readings from the previous channel bleeding into the new one.
Tip 3 — On-resistance matters for analog accuracy. The chip's 70Ω on-resistance forms a voltage divider with your microcontroller ADC's input impedance (typically 10kΩ–100MΩ). For most applications this is negligible, but for very precise analog measurements, buffer the SIG pin with a unity-gain op-amp to eliminate the error.
Tip 4 — Cascade boards for more than 16 channels. You can connect multiple CD74HC4067 boards together. Use the EN pin to select which board is active, and share the S0–S3 and SIG lines between all boards. This lets you multiply to 32, 48, 64, or more channels while only adding one EN pin per additional board.
Tip 5 — Use for digital multiplexing too. Connect the SIG pin to a digital I/O pin on your microcontroller. You can then route serial TX/RX, button inputs, PWM outputs, or any other digital signal to up to 16 devices. You can even create multiple independent I2C or SPI buses by combining two boards (one for each signal direction).
🚫 Limitations
- One channel at a time: Only one channel (C0–C15) is connected to SIG at any moment. The chip cannot simultaneously connect multiple channels.
- Signal voltage ceiling: Signals on any pin must stay between GND and VCC. Voltages outside this range can damage the IC.
- On-resistance introduces small voltage drop: The 70Ω switch resistance may affect precision analog readings. For most projects this is not an issue, but for high-accuracy measurements, buffer the SIG line.
- Speed limits: The CD74HC4067 is suitable for audio-frequency and moderate-speed digital signals, but is not intended for high-frequency RF or very high-speed digital switching (hundreds of MHz).
- No built-in pull-up/pull-down resistors: Unused channel pins can float and pick up noise. Connect unused channels to GND (for analog) or to a defined logic level (for digital) to prevent spurious readings.
🛠️ Troubleshooting
Readings are all zero or don't change between channels
- Verify VCC and GND are connected and the supply voltage is within 2–6V.
- Check that the EN pin is connected to GND or driven LOW — a floating or HIGH EN pin disables all channels.
- Confirm S0–S3 are connected to the correct Arduino output pins and the
selectChannel()function is called before each read.
All channels read the same value
- Verify each Cx pin is wired to a unique sensor or signal source — if all channels are tied together or floating, they will read the same value.
- Check that the address pins (S0–S3) are changing correctly. Add
Serial.printstatements to confirm which channel is being selected.
Analog readings are unstable or noisy
- Increase the settling delay — try
delayMicroseconds(100)after callingselectChannel(). - Add decoupling capacitors (0.1µF ceramic) between VCC and GND close to the chip to reduce power supply noise.
- Ensure unused channel pins are not left floating — connect them to GND to prevent them from adding noise to the SIG line.
- Check that signal source voltages do not exceed VCC — signals above VCC can cause erratic behaviour and chip damage.
The chip is warm or not responding after wiring
- Power down immediately. A warm or hot chip almost always indicates a wiring error — most commonly a channel pin receiving a voltage higher than VCC.
- Recheck all connections carefully before re-applying power.
🏪 Where to Buy
This CD74HC4067 Multiplexer Breakout Board is available from Envistia Mall
CD74HC4067 16-Channel Analog Digital Multiplexer Breakout Board →
- 📦 Fast US Shipping
- 🔄 Hassle-Free Returns
- 📧 Responsive Customer Support
📚 Resources & Downloads
- CD74HC4067 IC Datasheet (Texas Instruments)
Sold and supported by Envistia Mall. Ships from the USA. The manufacturer and Envistia LLC (dba Envistia Mall) are not responsible for any damages or losses resulting from the use of this product. Always follow proper electrical safety practices when working with electronic components. Specifications are based on manufacturer data and are subject to change without notice.