b. 임베디드/아두이노
[아두이노] 74HC4051 모듈 사용하기
로봇쟁이
2022. 5. 1. 11:27
74HC4051은 멀티플렉서로서 부족한 GPIO를 확장 가능하도록 만든 핀입니다.
근데 4051은 아날로그 즉 ADC도 확장이 가능합니다.
멀티플렉서는 특별한건 많이 없습니다.
용도에 맞게 연결해서 사용만 하면 됩니다.
데이터 시트를 한번 살펴보겠습니다.
일단 기본 특징입니다.
아날로그 입력 범위는 +5V ~ -5V까지입니다.
저항 값이 전압에 따라 달라짐을 확인 할 수 있습니다.
다음은 핀 연결방법입니다.
해당 핀들은 모듈로서 나와 있는 핀이 아니고 IC로서 나와 있는 부분임으로 혼동하시면 안됩니다.
모듈과 IC SYMBOL을 꼭 확인하셔야 합니다.
저의 경우는 Enable핀(Active LOW)과 VEE를 GND에 연결하였습니다.
다음은 S0~S2 입력 신호에 따른 출력채널입니다.
그럼 코드를 작성해보겠습니다.
#define S0 2
#define S1 3
#define S2 4
const int selectPin[3] = { S0, S1, S2 };
int adcVal[8];
void setup() {
pinMode(13, OUTPUT);
hc4051_Init();
Serial.begin(9600);
}
void loop() {
for(int i=0; i<8; i++)
{
hc4051_selectMuxPin(i);
adcVal[i] = analogRead(A0);
delay(20);
}
for(int i=0; i<8; i++)
{
Serial.print("\tY");
Serial.print(i);
Serial.print(" = ");
Serial.print(adcVal[i]);
}
Serial.println();
}
void hc4051_Init(void)
{
for(int i=0; i<3; i++)
{
pinMode(selectPin[i], OUTPUT);
digitalWrite(selectPin[i], HIGH);
}
}
void hc4051_selectMuxPin(int pin)
{
if(pin < 8)
{
for(int i=0; i<3; i++)
{
if(pin & (1 << i))
{
digitalWrite(selectPin[i], HIGH);
}
else
{
digitalWrite(selectPin[i], LOW);
}
}
}
}
간단하게 작성을 했는데 이미 모듈 제조처에서 만든 예제 코드들이 있어서 큰 어려움은 없습니다.
단, 멀티플렉서 특성상 약간의 지연시간이 필요하다는거는 유념해야 합니다.
2채널만 가변저항을 연결해서 출력해봤고 나머지는 5v나 GND에 연결해서 나온 데이터 입니다.
반응형