마하전자기술연구소 LOGO

제품검색 고객센터053-604-2355
기술자료실

Home > 기술자료실 기술자료실

제 목 09. 다이나믹 표시 제어법
첨부파일


발광 다이오드의 다이나믹점등 제어법

1. 7 세그먼트(segment) 발광 다이오드란?

 7 세그먼트(segment) 발광 다이오드는 어떤 것일까하고 말하면(자), 밑그림에 나타내는 것 같은 배열로
발광 다이오드가 줄서 있어 a~g까지의 각 발광 다이오드의 적당한 것만을
번뜩거릴 수 있으면(자) 숫자를 표시할 수 있게 되어 있습니다.
즉, 예를 들면 「2」의 표시를 하려면 「a, b, g, e, d」에 상당하는 발광 다이오드
(을)를 점등 하면 좋게 됩니다.
이 「a~g」까지의 발광 다이오드를 세그먼트(segment)를 불러, 7개의 세그먼트(segment)가
있는 것으로부터 7 세그먼트(segment) 발광 다이오드로 불리고 있습니다.
실제로 점 켜게 하기 위해서(때문에)는, common 단자에 마이너스를, 필요한 세그먼트(segment)의 단자
에 저항을 통해 플러스가 전압을 걸어, 10 mA정도의 전류를 흘리면(자) 점 켭니다.    
 (실제로는 윗 그림은 음극 코먼이라고 하는 타입입니다만, 그 밖에 어노드 코먼
 그렇다고 하는 타입도 있어, 이 경우에는 플러스, 마이너스가 거꾸로 됩니다. 음극
 코먼 타입에서는, 상기와 같이 common 단자에 마이너스를 각 세그먼트(segment)(a~g)
 에 플러스를 접속하면(자), 그 세그먼트(segment)의 발광 다이오드(LED)가 점등 하는 것
 (이)가 됩니다. )


2. 다이나믹점등 제어란?

 상기와 같이, 1개만 즉 1자리수의 숫자만의 표시이면 (일)것은 간단합니다.
문제가 되는 것은 다형의 표시를 할 때입니다. 모든 자리수의 세그먼트(segment)를 독립에 제어
하면, 다이나믹점등 제어는 필요 없습니다만, 그러면 제어 포토가 전부
그리고 자리수 x7개도 필요하게 되어 끝실용적이지는 않습니다.
거기서 다이나믹점등 제어 방식이라고 하는 방식이 나옵니다. 즉, 7 세그먼트(segment)
의 제어는 전형공통으로 해 1자리수 x7인 만큼 해 버려, 어느 자리수를 점 켜게 할까를
common의 변환을 실시하는 것으로 제어합니다.
 그렇게 해서 두어 단시간의 사이 하나의 자리수를 번뜩거릴 수 있으면(자), 곧 다음의 자리수를 번뜩거릴 수 있다고 한다
일을 고속으로 반복합니다.
이렇게 하면(자) 있는 순간으로는 1개의 자리수만이 점 켜고 있게 됩니다만, 인간의 눈
에는 잔상 현상이 있어, 한 번 빛을 보면(자), 약 100 msec 정도 그 빛을 연속해 봐
있도록(듯이) 착각합니다.
거기서, 상기점등의 반복을 수 10 msec의 속도로 반복하면(자), 마치 연속해
각 형이 연속해 점 켜고 있는 것처럼 보여 버립니다.
이것이 다이나믹점등 제어의 원리입니다.


3. PIC에 의한 제어 방법은?

다이나믹 제어를하기 위한 , 7 세그먼트(segment) LED와 PIC의 접속은,
우선 PORT B측에전형공통의 7 세그먼트(segment)의 제어 신호를 접속해, 포토의 비트에
"High"가 출력되면(자) 점등 하도록(듯이) 합니다.
이렇게 하면(자), 숫자 표시를 하기 위해서는, 필요한 세그먼트(segment), 예를 들면 「2」의 표시를
하려면 , 「a, b, g, e, d」의 세그먼트(segment)에 상당하는 PORT B의 비트에"High"를 출력
한다, 즉”1”을 세트 하면 좋게 됩니다.
 한층 더 각 형의 표시 제어를 PORT A로 실시하기로 하겠습니다. 이 때문에는 각 세그먼트(segment)
LED의 common 단자를 PORT A의 각 비트마다 접속하면 좋겠습니다만, 각 형의
전세그먼트(segment)가 동시에 점등 하면(자), 70 mA이상의 전류가 흐르기 때문에, PIC로 직접
제어하면(자) 포토의 최대정격을 넘어 버립니다.
거기서 전류 증폭용으로서 각 형 마다, 즉 PORT A의 각 비트마다 트랜지스터를
1개씩 추가합니다.
결과적으로, PORTA가"1"가 된 (곳)것의 자리수로, 한편 PORTB가"1"가 된 곳의
세그먼트(segment)만이 점등 하게 됩니다.
이것을 실제의 회로도로 하면(자) 밑그림이 됩니다.  

4. 샘플 프로그램예

 그런데, 그러면, 실제의 다이나믹점등 제어의 샘플 프로그램을 만들어
봅니다. 내용은 아래와 같은 움직임을 합니다.
 ·5자리수의 16 진수의 표시를 약 1초간격으로 반복한다.
 ·표시하는 숫자는 자리수마다+1해, 한편 1초 마다의 반복시에도 모든 자리수가
  +1한다.
 ·16 진수는 0으로부터 F까지 반복한다.
  이것을 실현하기 위한 프로그램의 전체의 흐름은 아래와 같이가 됩니다.

    초기화전포토를 출력으로 지정
     ↓
-----→ 반복 회수 세트  같은 표시를 1초간 유지하기 위한 반복 회수
|     ↓
| --→ 최초의 자리수에 세트 다이나믹 제어의 초기화
| |    ↓
| | → 표시 데이터+1    16 진수의+1
| | |  ↓
| | | 표시 출력 세그먼트(segment) 데이터에의 변환 포함한다
| | |  ↓
| | | 다음의 자리수에 옮긴다     5 msec마다     
| | |  ↓
| | ---5자리수 종료?
| |    ↓
| ---- 반복 종료?
|     ↓
|___ 최초부터 반복해  

5. 프로그램 리스트

아래와 같은 실제의 프로그램 리스트와 그 설명을 합니다.
MPLAB로 사용 가능한 원시 파일은 아래와 같이입니다. 다운로드해 사용해 주세요.

   세그먼트(segment) LED 제어 프로그램 원시 파일

【원시 파일 해설】
 여기에서는 일본어의 코멘트로 프로그램의 해설을 합니다.
 원래의 원시 파일은 영문이 되어 있습니다.

;**************************************************************
; 이것은 표준적인 7 세그먼트(segment) LED의 다이나믹점등 제어예입니다.
;  5자리수의 LED에 16 진수의 숫자가, 1초 주기에 갱신 표시됩니다.
;  표시 갱신시에 숫자가+1됩니다. 또 자리수마다도 숫자가+1됩니다.
;***************************************************************
     LIST   P=PIC16F84    ;CPU 팁의 종류를 지정합니다
     INCLUDE "P16F84.INC"   ;각종의 정수 라벨의 표준 파일
                   ;(을)를 결합해 둡니다.
;****************************
; 프로그램중에서 사용하는 변수의 정의
;****************************
CNT1   EQU   0DH       ;타이머용의 카운터
CNT2   EQU   0EH       ; 〃
CNT3   EQU   0FH       ;1초간의 반복용의 카운터
COLUM   EQU   10H       ;Display Digit Position
NUMBER  EQU   11H       ;Test Display Data
TEMP   EQU   12H       ;Work
;****************************
; 세치기의 벡터(미사용)
;****************************
     ORG    0
     GOTO    MAIN      ;RESET시의 스타트
     ORG    4
     GOTO    INT_      ;끼어들어 나는 일처(미사용)
     ORG    8H       ;프로그램 개시 번지 지정

;********************************
; 메인 프로그램
;********************************
MAIN
     BCF    INTCON, GIE   ;끼어들어 모두 금지
     CLRF   NUMBER     ;표시 데이터 0 세트
; 입출력 포토 초기화
     BSF    STATUS, RP0   ;페이지 1을 지정
     CLRF   TRISA      ;포토 A모두 출력
     CLRF   TRISB      ;포토 B모두 출력
     BCF    STATUS, RP0   ;페이지 0에 되돌린다
MAINLP
     MOVLW   28H       ;반복 회수 세트(1초)
     MOVWF   CNT3      ;카운터에
LOOP                ;자리수 반복 루프
     MOVLW   10H       ;최초의 자리수를 지정
     MOVWF   COLUM      ;보존
     MOVF   NUMBER, W    ;표시하는 숫자 데이터 꺼내
     MOVWF   TEMP       ;일시 보관
NEXT                ;각 형표시
     MOVF   TEMP, W     ;표시 데이터 꺼내
     CALL   DISP      ;세그먼트(segment) 표시 출력, 5 msec 대기
     INCF   TEMP, F     ;표시 데이터+1
     BCF    STATUS, C    ;쉬프트시에 1이 들어가지 않게
     RRF    COLUM, F     ;자리수 비트 쉬프트
     MOVF   COLUM, W     ;자리수 데이터 꺼내
     ANDLW   1FH       ;5자리수 완료 체크
     BTFSS   STATUS, Z    ;완료했어?
     GOTO   NEXT      ;아직 때 다음의 자리수에
     DECFSZ  CNT3, F     ;반복 완료인가?
     GOTO   LOOP      ;아직의 시 같은 표시 반복
INCF
     NUMBER, F         ;표시 데이터+1
     GOTO   MAINLP     ;최초부터 반복해

;********************************
; 표시 제어 써브루틴
; 5 msec 대기
;********************************
DISP
     CALL   GET_7SEG    ;숫자 데이터를 세그먼트(segment) 데이터에 변환
     MOVWF   PORTB      ;포토 B에 세그먼트(segment) 데이터 출력
     MOVF   COLUM, W     ;자리수 데이터 꺼내
     MOVWF   PORTA      ;포토 A에 자리수 데이터 출력
     CALL   TIME5M     ;5 msec 대기 타이머
     CLRF   PORTB      ;다음의 자리수로 옮길 때 후등 다하고 방지
     RETURN

;*************************************************
; 16 진수를 세그먼트(segment) 데이터로 변환한다
; 세그먼트(segment) 데이터는 PORTB1~PORTB7용으로 되어 있다
; 즉 0비트째는 사용하지 않는다
;*************************************************
GET_7SEG
     ANDLW   0FH       ;하위 4비트만 꺼내
     ADDWF   PCL, F      ;PC레지스터에 숫자를 더해 점프
     RETLW   B'01111110'   ;Code 0
     RETLW   B'00001100'   ;Code 1 
     RETLW   B'10110110'   ;Code 2 여기의 데이터를 가져 
     RETLW   B'10011110'   ;Code 3 리턴
     RETLW   B'11001100'   ;Code 4
     RETLW   B'11011010'   ;Code 5
     RETLW   B'11111010'   ;Code 6
     RETLW   B'00001110'   ;Code 7
     RETLW   B'11111110'   ;Code 8
     RETLW   B'11001110'   ;Code 9
     RETLW   B'11101110'   ;Code A
     RETLW   B'11111000'   ;Code b
     RETLW   B'01110010'   ;Code C
     RETLW   B'10111100'   ;Code d
     RETLW   B'11110010'   ;Code E
     RETLW   B'11100010'   ;Code F

;**************************************
; Timer Routine
; TIM5M:5msec
;**************************************
TIME5M
     MOVLW   9H        ;About 5msec
     MOVWF   CNT2       ;
TIMLP2
     CLRF   CNT1       ;
TIMLP1
     NOP            ;dumy nop
     NOP
     DECFSZ  CNT1, F
     GOTO   TIMLP1      ;5*256-1
     DECFSZ  CNT2, F
     GOTO   TIMLP2      ;10*((5*256-1)+3)-1
     RETURN           ;+3=12822*0. 4usec=5. 1msec
;****************************************************
; INT Interrupt Dumy Routine (ignored)
;****************************************************
INT_ RETURN 
     END

목록보기

www.1chip.com, www.1chip.co.kr
www.micom114.com
자료실바로가기

대구광역시 북구 산격2동 1629 산업용재관 10동 13호 (2층) / Tel. 053-604-2355 / Fax. 053-383-2354 / E-mail. maha@paran.com