Skip to content

All items ship from our office in Colorado USA - $5.95 Flat-Rate US shipping & free shipping on orders over $75!

CD74HC4067 16-Channel Analog/Digital Multiplexer Breakout Board User Guide

CD74HC4067 16-Channel Analog/Digital Multiplexer Breakout Board

📋 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.

CD74HC4067 16 - Channel Analog Digital Multiplexer Breakout Board Module - Envistia Mall

⭐ 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.print statements to confirm which channel is being selected.

Analog readings are unstable or noisy

  • Increase the settling delay — try delayMicroseconds(100) after calling selectChannel().
  • 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


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.

Share this guide:
in

🛒 Related Products

Find the components mentioned in this guide in our store.

Browse Products →