Arduino Uno 7-Segment
FND 의 내부 회로 구성에 따른 종류를 알아보고, 아두이노에서 공통 캐소드 타입의 FND를 구동하는 예제
를 소개합니다.7-Segment
7-Segment 는 FND(Flexible Numeric display)라고 불리며, 아래 사진과 같은 숫자를 표시 할 수 있는 LED 표시 장치 입니다. FND 는 컬러에 따라, 자리수에 따라, 동작방식에 따라 다양한 종류가 있습니다.
4자리 FND, 1자리 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 진리표
공통 애노드 FND 진리표
아두이노에서 FND 사용하기
Hardware 연결
Arduino Uno 와 FND 연결 회로도와 연결 예시
아래의 사용 예제에 사용한 FND 은 Common-Cathode 타입입니다. 각 세그먼트의 LED 를 켜기 위해 연결된 아두이노 핀은 HIGH 를 출력해야 점등이 됩니다.
Arduino Uno
13pin: SEGDPArduino Uno
12pin: SEGCArduino Uno
11pin: SEGBArduino Uno
10pin: SEGAArduino Uno
9pin: SEGFArduino Uno
8pin: SEGGArduino Uno
7pin: SEGDArduino Uno
6pin: SEGE
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 코드 실행 결과
예제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] = { { 1, 1, 1, 1, 1, 1, 0, 0 }, // 0 { 0, 1, 1, 0, 0, 0, 0, 0 }, // 1 { 1, 1, 0, 1, 1, 0, 1, 0 }, // 2 { 1, 1, 1, 1, 0, 0, 1, 0 }, // 3 { 0, 1, 1, 0, 0, 1, 1, 0 }, // 4 { 1, 0, 1, 1, 0, 1, 1, 0 }, // 5 { 1, 0, 1, 1, 1, 1, 1, 0 }, // 6 { 1, 1, 1, 0, 0, 1, 0, 0 }, // 7 { 1, 1, 1, 1, 1, 1, 1, 0 }, // 8 { 1, 1, 1, 1, 0, 1, 1, 0 }, // 9 { 0, 0, 0, 0, 0, 0, 0, 0 }, // 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 까지 순차적으로 출력이 변하는 것을 확인 할 수 있습니다.
마무리
Arduino Uno 를 사용하여 FND 를 구동하는 간단한 예제
를 소개하였습니다.끝까지 읽어주셔서 감사합니다.😁
'Embedded > Arduino' 카테고리의 다른 글
아두이노 강좌 #24 8x8 LED Dot Matrix 내부 구성과 기본 동작 방법 (0) | 2020.08.17 |
---|---|
아두이노 강좌 #23 4-Digit 7Segment 기본 동작 원리 (0) | 2020.08.16 |
아두이노 코딩 : 74HC595로 7-Segment (FND) 제어하기 with 키보드 (0) | 2020.08.09 |
아두이노 강좌 #21 Shift Register 74HC595 로 LED 점멸하기 (1) | 2020.08.09 |
아두이노 강좌 #20 시프트 레지스터 74HC595 내부 구조 및 동작 원리 (2) | 2020.08.08 |