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에 연결해서 나온 데이터 입니다. 

 

반응형