decoder에 해당하는 글 1

[아두이노] 7 Segment Decoder(CD4511) 제어

IOT/아두이노|2019. 2. 16. 14:57

[아두이노] 7 Segment Decoder(CD4511) 제어



이번에도 새로운 칩을 소개 합니다. 7-segment Decoder(CD4511)은 7 Segment LED를 제어하는데 효율적인 칩입니다. 다른곳에서 원리만 이해하셨다면 사용 가능합니다. 이 칩은 4가지 값에 의해서 7개의 출력값을 만들어 낼 수 있습니다. 이 칩도 제 블로그에서 소개했던 내용인데 7 Segment LED를 포스팅 할때 한번에 소개하는게 나을 것 같아서 가상시뮬레이터에서도 제공되는 칩으로 이번에는 CD4511 칩을 이용해 실험하고자 합니다.

1. 7 segment Decoder(CD4511)



위 그림에서 보는것 처럼 입력 A,B,C,D 핀으로 아두이노에서 4개의 핀의 출력값을 CD4511 칩에 입력으로 받게 됩니다. CD4511 칩의 연결은 다음 과 같습니다.

  • Vcc핀 과 Gnd핀은 아두이노에 5V와 Gnd 핀에 연결
  • LT핀와 BI핀은 Vcc로 연결
  • LE핀은 Gnd로 연결
  • 입력 A,B,C,D핀은 아두이노 디지털핀 4개 연결(실험에서는 2,3,4,5핀 사용)
  • 출력 a,b,c,d,e,f,g핀은 7 Segment LED의 DP핀을 제외한 나머지 순차적으로 A,B,C,D,E,F,G핀에 연결

여기서 회로도 설계할때에 선 연결이 노가다 작업으로 좀 힘들지만 그래도 한번 이해하면 나중에 쉽게 사용이 가능해 집니다. CD4511 칩에 선들을 어떻게 연결하는지가 숙지하시면 됩니다.

2. 회로도 구성


  • 준비물 : CD4511 칩 1개, 7 Segment LED 1개(캐소드형임), 저항 330옴 1개, 저항 10k옴 4개, 아두이노우노, 뻥판
  • 내용 : CD4511 칩을 이용해서 7 Segment LED에 숫자를 출력하게 하자. 참고로 7 Segment LED(캐소드형)


CD4511 칩에 입력을 바로 아두이노의 출력값 5V를 보내지 않고 10K옴의 저항을 붙여줍니다. 스위치 버턴을 연상하시면 됩니다. 어짜피 상태값만 보내주면 되기 때문인거죠. 정확히 CD4511 칩의 허용 전압이 기억이 안나서 안전하게 저항을 붙였습니다. 데이터시트를 인터넷에서 찾아보셔서 허용 전압을 참고하시면 되겠습니다. 위에서 설명한 CD4511 칩의 핀들이 어디에 연결하는지 설명한대로 실제 선을 연결하시면 됩니다. 그리고 주의할 것은 7 Segment LED은 캐소드형 입니다.

처음에만 복잡해 보일뿐 익숙해지면 단순합니다. 핀에 마우스를 대면 핀 이름이 나오고 해당된 부품과 연결하시면 됩니다.

3. 코딩


  • 사용함수 : pinMode(출력핀, 모드), digitalWrite(출력핀, 상태값)
  • 내용 : 아두이노에서 4개의 출력 상태를 값을 CD4511 칩을 제어하여 7 Segment LED에 숫자를 0~9까지 순차적으로 출력해보자.(7 Segment LED은 캐소드형으로 이 기준으로 코딩함)

  • CD4511 제어 :
    • digitalWrite(출력핀, 상태값)으로 CD4511 칩의 출력값을 결정

참쉽죠. LED 제어할대 배운 PinMode()와 digitalWrite()함수만 사용하시면 됩니다.

설계

(1) 숫자 패턴만들기

CD4511 4개의 입력값을 받습니다. 그러면 4개의 상태를 8421 BCD 코드표를 참조하시면 좋습니다. 캐소드형 7 Segment LED를 하면 정확히 아두이노 핀의 역순으로 코딩하면 일치하게 됩니다. 그래서 이번 실험은 이해하기 쉽게 캐소드형 코딩을 선택했습니다.

0000 => 0
0001 => 1
0010 => 2
...

0은 0000 => 출력값은 1111110 됩니다.
0은 A[4] = {0,0,0,0}
그러면 0~9까지 10개의 패턴이니깐 2차배열변수로 만들면은 아래와 같이 만들어 지겠죠.

int data[10][4]={
   {0,0,0,0}, //0
   {0,0,0,1}, //1
   {0,0,1,0}, //2
   {0,0,1,1}, //3
   {0,1,0,0}, //4
   {0,1,0,1}, //5
   {0,1,1,0}, //6
   {0,1,1,1}, //7
   {1,0,0,0}, //8
   {1,0,0,1}  //9
};

(2) 숫자 출력

0은 A[4] = {0,0,0,0} 이고,
datapin은 datatpin[4] = { 5,4,3,2} 하면

 for(int j=0;j<4;j++){
    digitalWrite(datapin[j],A[j]);
 }

이렇게 됩니다. 하지만 10개의 패턴과 각 패턴의 상태값 4개를 2차 배열 위의 date[10][4]로 만들면 2차 for문을 사용하면

  for(int i=0;i<10;i++){
     for(int j=0;j<4;j++){
       digitalWrite(datapin[j],data[i][j]);
     }
     delay(1000);
  }     

여기서 delay(1000)을 두어 1초 단위로 0~9까지 7 Segment LED에 출력되게 됩니다.

코딩을 하면

int data[10][4]={
   {0,0,0,0}, //0
   {0,0,0,1}, //1
   {0,0,1,0}, //2
   {0,0,1,1}, //3
   {0,1,0,0}, //4
   {0,1,0,1}, //5
   {0,1,1,0}, //6
   {0,1,1,1}, //7
   {1,0,0,0}, //8
   {1,0,0,1}  //9
};
int datapin[4] ={5,4,3,2};

void setup(){
  for(int i=0;i<4;i++){
    pinMode(datapin[i],OUTPUT);
  }
}
void loop(){
   for(int i=0;i<10;i++){
     for(int j=0;j<4;j++){
       digitalWrite(datapin[j],data[i][j]);
     }
     delay(1000);
  } 
} 

4. 결과


결과 동영상을 보면 다이렉트로 전 과정을 동영상 촬영을 했는데 회로도를 만드는 과정에서 Vcc 선을 Gnd로 잘못 연결해서 가상시뮬레이터 처음 실행에서 CD4511 칩이 망가졌습니다. 가상시뮬레이터라서 실제로 CD4511 칩이 망가지는 것이 아니기 때문에 그렇게 큰 의미는 없지만 이걸 실제로 선을 잘못 연결한다면 칩에 문제가 생기겠지요. 다시 동영상으로 촬영할려다가 선 연결의 중요성과 이런 점에서 가상시뮬레이터를 사용의 장점이 될 것 같아서 그냥 올립니다.(실제로 다시 촬영하기 귀찮음!)

마무리


74HC595 칩은 3핀을 사용했지만 CD4511 칩은 4핀을 사용합니다. 그러면 이전 시간에 배운 74HC595 칩으로 하는게 좋을 것 같다는 생각을 하실 수 있습니다. CD4511 칩을 제어는 무지 간단 합니다. 아두이노 없이도 이 칩을 이용해서 7 Segment LED를 제어가 가능합니다.

그리고 74HC595+CD4511으로 7 Segment LED를 제어를 한번 해보세요. 이 두 칩을 배우고 나서 이걸 합쳐서 실험해보고 싶어져서 7 Segment LED를 제어 해보았어요. 이 내용은 다음 포스팅에 쓰도록 할께요. 한번 두 칩에 동작 원리를 생각하고 회로도를 구성하고 코딩해보세요.

한번 74HC595칩과 CD4511을 결합을 하면 어떻게 회로도가 표현 되는지 상상의 나래를 펼쳐보세요.


댓글()