본문 바로가기
MCU/아두이노

아두이노에서 74HC154 제어하기

by linuxgo 2025. 9. 3.

📌 74HC154란?

74HC1544-to-16 라인 디코더/디멀티플렉서 IC입니다.

74HC154

  • 입력: 4비트 주소 (A0~A3)
  • 출력: 16채널 (Y0~Y15) 중 하나만 LOW (나머지는 HIGH)
  • Enable 핀(/G1(/E1), /G2(/E2))을 통해 전체 출력을 활성/비활성 가능
  • 주 용도: LED 매트릭스 제어, 여러 장치 선택(Chip Select), 멀티플렉싱 회로

즉, 마이컴이 4개의 핀만 사용해 최대 16개의 출력 중 하나를 선택할 수 있게 해줍니다.

⚡ 동작 원리

  • A0~A3에 이진수 값을 주면, 해당 값에 대응하는 출력만 LOW 상태가 됩니다.

A3  A2  A1  A0  출력
0 0 0 0 Y0
0 0 0 1 Y1
0 0 1 0 Y2
1 1 1 1 Y15

출력은 Low Active이므로, LED를 켜려면 LED의 애노드(+)를 Vcc, 캐소드(-)를 Y핀에 연결해야 합니다.

🛠️ 아두이노 라이브러리 구현

📜 헤더 파일 (HC154.h)

#ifndef HC154_H
#define HC154_H

#include <Arduino.h>

class HC154 {
  private:
    uint8_t a0, a1, a2, a3;
    uint8_t g1, g2;
    bool useEnable;

  public:
    // Enable 핀 없는 경우
    HC154(uint8_t _a0, uint8_t _a1, uint8_t _a2, uint8_t _a3);

    // Enable 핀 있는 경우
    HC154(uint8_t _a0, uint8_t _a1, uint8_t _a2, uint8_t _a3,
          uint8_t _g1, uint8_t _g2);

    void begin();

    // 채널 선택 (0~15)
    void select(uint8_t channel);

    // Enable 제어
    void enable(bool en);
};

#endif

 

📜 구현 파일 (HC154.cpp)

#include "HC154.h"

// Enable 핀 없는 버전
HC154::HC154(uint8_t _a0, uint8_t _a1, uint8_t _a2, uint8_t _a3) {
  a0 = _a0; a1 = _a1; a2 = _a2; a3 = _a3;
  useEnable = false;
}

// Enable 핀 있는 버전
HC154::HC154(uint8_t _a0, uint8_t _a1, uint8_t _a2, uint8_t _a3,
             uint8_t _g1, uint8_t _g2) {
  a0 = _a0; a1 = _a1; a2 = _a2; a3 = _a3;
  g1 = _g1; g2 = _g2;
  useEnable = true;
}

void HC154::begin() {
  pinMode(a0, OUTPUT);
  pinMode(a1, OUTPUT);
  pinMode(a2, OUTPUT);
  pinMode(a3, OUTPUT);
  if (useEnable) {
    pinMode(g1, OUTPUT);
    pinMode(g2, OUTPUT);
    enable(true); // 기본 활성화
  }
}

void HC154::select(uint8_t channel) {
  if (channel > 15) return; // 범위 초과 방지
  digitalWrite(a0, (channel >> 0) & 0x01);
  digitalWrite(a1, (channel >> 1) & 0x01);
  digitalWrite(a2, (channel >> 2) & 0x01);
  digitalWrite(a3, (channel >> 3) & 0x01);
}

void HC154::enable(bool en) {
  if (useEnable) {
    if (en) {
      digitalWrite(g1, LOW);  // 활성 조건
      digitalWrite(g2, LOW);
    } else {
      digitalWrite(g1, HIGH); // 비활성 조건
      digitalWrite(g2, HIGH);
    }
  }
}

 

📜 예제 코드 (example.ino)

#include "HC154.h"

// 74HC154 A0~A3 핀을 아두이노 2~5번 핀에 연결
HC154 decoder(2, 3, 4, 5);

void setup() {
  decoder.begin();
}

void loop() {
  for (int i = 0; i < 16; i++) {
    decoder.select(i);  // i번째 출력 선택 (Low Active)
    delay(500);
  }
}

 

✅ 정리

  • 74HC154는 4비트 입력 → 16개 출력 중 하나 선택하는 디코더 IC입니다.
  • 아두이노에서는 단 4개의 핀만 사용해 16개의 출력을 제어할 수 있습니다.
  • LED, 릴레이, 매트릭스 디스플레이, 여러 개의 외부 칩 선택 신호 등에 활용할 수 있습니다.
  • 위 라이브러리 코드를 사용하면 decoder.select(채널번호) 한 줄로 손쉽게 원하는 출력 채널을 선택할 수 있습니다.