📌 74HC154란?
74HC154는 4-to-16 라인 디코더/디멀티플렉서 IC입니다.
- 입력: 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(채널번호) 한 줄로 손쉽게 원하는 출력 채널을 선택할 수 있습니다.
'MCU > 아두이노' 카테고리의 다른 글
아두이노에서 74HC157 / 74HC153 멀티플렉서(MUX) 제어 (0) | 2025.09.10 |
---|---|
아두이노에서 74HC93 / 74HC161 / 74HC163 Binary Counter 사용하기 (0) | 2025.09.10 |
아두이노에서 74HC165 (병렬 → 직렬 변환기) 사용하기 (0) | 2025.09.03 |
아두이노에서 74HC573 사용하기 (0) | 2025.09.03 |
Arduino UNO R4에서 DMA 설정 및 사용하기 (0) | 2025.08.20 |
AVR128DA48 Curiosity Nano를 아두이노 보드 만들기 | 어셈블리 코드로 1602 LCD 제어(Controlling 1602 LCD with AVR128DA48 Curiosity Nano Using Arduino DxCore) (0) | 2025.08.14 |
Arduino UNO R4: RA4M1 I2C 드라이버 구현 (Implementing I2C Driver with RA4M1) (0) | 2025.08.13 |
Arduino Nano 33 IoT로 LSM6DS3 센서 데이터를 BLE로 전송하기(Sending LSM6DS3 Sensor Data via BLE with Arduino Nano 33 IoT) (0) | 2025.08.03 |