아두이노 강좌 #22 7-SEGMENT FND 기본 동작 원리
Lucy Archive
Lucy / Facilitate4U
2020. 8. 15. 18:06

Arduino Uno FND 동작 원리Arduino Uno FND 동작 원리

Arduino Uno 7-Segment

7-Segment 는 7개의 문자용 SEGMENT와 1개의 DP SEGMENT 로 구성된 LED 표시기 입니다. 본 포스트에서는

FND 의 내부 회로 구성에 따른 종류를 알아보고, 아두이노에서 공통 캐소드 타입의 FND를 구동하는 예제

를 소개합니다.

7-Segment

7-Segment 는 FND(Flexible Numeric display)라고 불리며, 아래 사진과 같은 숫자를 표시 할 수 있는 LED 표시 장치 입니다. FND 는 컬러에 따라, 자리수에 따라, 동작방식에 따라 다양한 종류가 있습니다. 

4자리 FND, 1자리 FND4자리 FND, 1자리 FND

공통 애노드, 공통 캐소드

FND는 아래 그림과 같이 내부 회로의 종류에 따라 공통 캐소드, 공통 애노드 타입으로 구분 됩니다.

FND 내부 회로에 따른 구분 - 공통 캐소드, 공통 애노드FND 내부 회로에 따른 구분 - 공통 캐소드, 공통 애노드

공통 애노드(Common-Anode) 와 공통 캐소드 (Common-Cathode) 구동 방식의 차이는 아래 그림과 같이 LED 를 켜기/끄기 위한 방식의 차이입니다. 두 가지 방식의 FND 에서 'a' SEGMENT 를 켜기 위해 아래와 같이 전압이 연결 되어야 합니다.

  • Common-Anode

    • 7번핀 : GND

    • 3 또는 8번핀 : HIGH 전압

  • Common-Cathode

    • 7번핀 : HIGH 전압

    • 3 또는 8번핀 : GND

공통 캐소드, 공통 애노드공통 캐소드, 공통 애노드

FND 를 사용하실 때 또는 구매하실 때 종류에 따라 회로 또는 코드가 수정 되어야 할 수 있으므로 공통 애노드인지, 공통 캐소드인지 확인이 반드시 필요합니다. 

FND Data Table

앞서 FND 의 'a' 세그먼트를 켜는 방법으로 FND에 숫자를 표시하기 위해서 아래와 표를 만들 수 있습니다. 7-Segment 의 그림은 대표적으로 4만 표시하였습니다. 아두이노에서 코딩 방법에 따라 편하신대로 Binary 또는 Hex 값을 사용 하실 수 있습니다.

공통 캐소드 FND(7-Segment) 진리표공통 캐소드 FND 진리표

공통 애노드 7세그먼트 진리표공통 애노드 FND 진리표


아두이노에서 FND 사용하기

Hardware 연결

아두이노 에서 FND 를 사용하기 위해 아래 회로와 같이 FND 를 연결 합니다. 

Arduino Uno 와 FND 연결 회로도와 연결 예시Arduino Uno 와 FND 연결 회로도와 연결 예시

아래의 사용 예제에 사용한 FND 은 Common-Cathode 타입입니다. 각 세그먼트의 LED 를 켜기 위해 연결된 아두이노 핀은 HIGH 를 출력해야 점등이 됩니다.

  • Arduino Uno 13pin : SEG DP

  • Arduino Uno 12pin : SEG C 

  • Arduino Uno 11pin : SEG B

  • Arduino Uno 10pin : SEG A

  • Arduino Uno 9pin : SEG F

  • Arduino Uno 8pin : SEG G

  • Arduino Uno 7pin : SEG D

  • Arduino Uno 6pin : SEG E

FND 에 연결 되는 저항은 200Ω ~ 1kΩ 사이의 값으로 연결 하시면 됩니다. 저항이 1kΩ 보다 좀 더 큰 값을 사용해도 무방합니다.


예제1 : 숫자 0 출력

위의 진리표를 보고 숫자 '0'을 출력하는 예제입니다. 이래를 돕기 위해 코드는 단순하게 작성하였습니다. FND에 출력되는 모든 핀은 출력모드로 설정하고, 위에서 소개한 공통 캐소드용 진리표에서 숫자0을 출력하는 방법대로 HIGH 또는 LOW 를 출력 합니다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#define segA 10  // 'a' 세그먼트 연결 핀 번호
#define segB 11  // 'b' 세그먼트 연결 핀 번호
#define segC 12  // 'c' 세그먼트 연결 핀 번호
#define segD 7  // 'd' 세그먼트 연결 핀 번호
#define segE 6  // 'e' 세그먼트 연결 핀 번호
#define segF 9  // 'f' 세그먼트 연결 핀 번호
#define segG 8  // 'g' 세그먼트 연결 핀 번호
#define segDP 13 // 'dp' 세그먼트 연결 핀 번호
 
 
void setup(){
    // SEGMENT 연결 핀 출력 모드로 설정
    pinMode(segA, OUTPUT);
    pinMode(segB, OUTPUT);
    pinMode(segC, OUTPUT);
    pinMode(segD, OUTPUT);
    pinMode(segE, OUTPUT);
    pinMode(segF, OUTPUT);
    pinMode(segG, OUTPUT);
    pinMode(segDP, OUTPUT);
 
    // 숫자 0 출력
    digitalWrite(segA, HIGH); // SEG.A HIGH
    digitalWrite(segB, HIGH); // SEG.B HIGH
    digitalWrite(segC, HIGH); // SEG.C HIGH
    digitalWrite(segD, HIGH); // SEG.D HIGH
    digitalWrite(segE, HIGH); // SEG.E HIGH
    digitalWrite(segF, HIGH); // SEG.F HIGH
    digitalWrite(segG, LOW);  // SEG.G LOW
    digitalWrite(segDP, LOW); // SEG.A LOW
}
 
void loop(){
}
cs

실행 결과

위의 코드를 실행하면 아래와 같이 FND 에 숫자 0이 표시 됩니다.

예제1 코드 실행 결과예제1 코드 실행 결과

예제2 : 숫자 순차적으로 켜기

이번 예제에서는 배열과 반복문 For()문을 사용 숫자가 0 ~ 9 까지 반복하는 코드를 작성하였습니다. 회로도 연결이 다른 경우 선언 문에서 mapping 할 수 있습니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#define segA 10  // 'a' 세그먼트 연결 핀 번호
#define segB 11  // 'b' 세그먼트 연결 핀 번호
#define segC 12  // 'c' 세그먼트 연결 핀 번호
#define segD 7  // 'd' 세그먼트 연결 핀 번호
#define segE 6  // 'e' 세그먼트 연결 핀 번호
#define segF 9  // 'f' 세그먼트 연결 핀 번호
#define segG 8  // 'g' 세그먼트 연결 핀 번호
#define segDP 13 // 'dp' 세그먼트 연결 핀 번호
 
// main 함수에서 처리 편하게 하기 위해 핀번호 배열을 생성
int fndPort[8= {segA, segB, segC, segD, segE, segF, segG, segDP};
// index 0-9 -> 숫자 1~9
// index 10 -> Blank
int fndData[11][8= {
                    { 11111100 }, // 0
                    { 01100000 }, // 1
                    { 11011010 }, // 2
                    { 11110010 }, // 3
                    { 01100110 }, // 4
                    { 10110110 }, // 5
                    { 10111110 }, // 6
                    { 11100100 }, // 7
                    { 11111110 }, // 8
                    { 11110110 }, // 9
                    { 00000000 }, // 10 - Blank
                };   
 
void setup(){
    // 7 Segment 연결된 포트 모두 출력으로 설정
    for(int i = 0 ; i < 8 ; i++)
    {
        pinMode(fndPort[i],OUTPUT);
    }
}
 
void loop(){
    for(int i = 0 ; i < 10 ; i++){
        for(int j = 0 ; j < 8 ; j++){
            digitalWrite(fndPort[j], fndData[i][j]); 
        }
        delay(500);
    }
}
cs


실행 결과

위의 프로그램을 실행하면 아래와 같이 FND 가  0~9 까지 순차적으로 출력이 변하는 것을 확인 할 수 있습니다.


마무리

본 포스트에서는 FND의 내부 회로 구성 및 동작 방법을 알아보고,

Arduino Uno 를 사용하여 FND 를 구동하는 간단한 예제

를 소개하였습니다. 

끝까지 읽어주셔서 감사합니다.😁

관련포스트

👉 아두이노 FND 관련글 목록 보기

👉 아두이노 디스플레이 장치 관련글 목록 보기

👉 아두이노 관련글 전체 목록 보기