본문 바로가기

AVR(ATmega128)로 장난하기

AVR(ATmaga128)로 FND 1Digt 7세그먼트 전자회로 장난하기




1. 1-Digit FND 7세그먼트 특성 및 전자회로
   

1> 1-digit FND 7세그먼트 전자회로



FND 1-Digit 7세그먼트 외형과 회로

 

 

  FND 7세그먼트는 7개의 세그먼트로 이루어져 있으며, dot를 포함하고 있기 때문에 8개의 세그먼트로 이루어졌다고 볼 수도 있다. 8개의 세그먼트는 위쪽 세그먼트부터 시계방향으로 a부터 f까지 부여되고 가운데는 g가 된다. 한편, 핀 배열은 순서적이지 않다. e이름을 가진 세그먼트가 1번핀과 연결된다.

 

2> 1-digit FND 7세그먼트의 공통단자 전자회로

 

Fnd 7세그먼트

 

 

FND 7세그먼트는 공통 음극(cathode)방식과 공통 양극(anode)방식 두 가지가 존재한다. 콘트롤러의 전자부품이나 전자회로로 지금도 많이 사용되고 있다.

 


2. FND 7세그먼트 제어에 사용되는 디지털 출력 레지스터

 

DDRx 레지스터는 포트의 입출력 방향을 결정하는 레지스터이며 DDRxn의 값이 0이면 입력, 1이면 출력으로 설정된다. x는 포트명을 가리키는 문자이고 n은 비트를 나타내는 숫자이다. ATmega128에서 레지스터는 0번부터 7번까지 8비트가 존재한다. PORTx 레지스터는 포트에 출력할 논리 값을 저장하는 레지스터이며 x는 포트명이다.


 

 

 

3. AVR 연습용 키트를 사용한 실제 FND 7세그먼트 전자회로

 


 

AVR 연습용 키트에는 4-Digit로 구성된  7세그먼트 블록이 있으며, 7세그먼트의 a ~ g,dp핀이 연결된 DATA 커넥터와 7세그먼트의 Common핀과 연결된 COM커넥터로 구성된다.


 

 

위 표는 주로 사용되는 FND 7세그먼트의 디스플레이 폰트를 나타내고 있다. FND 7세그먼트의 핀 이름이 알파벳에 연속된 조건에서 a핀을 MSB(최상의 비트)로 하고, dp 핀을 LSB(최하위 비트)로 설정하여 폰트를 2진수로 나타내면 0=0B11111100, 1=0B01100000, ....이 된다.

 


4. AVR 연습용 메인 키트에서 동작시켜 보기


 



10pin 케이블을이나 점퍼선을 이용해 메인 키트의 PORTA와 7세그먼트 블록의 DATA커넥터와 연결하고, PORTC와 COM 커넥터와 연결한다.

 


 


>>> (예제 1.) 오른쪽 1번 FND 7세그먼트에 0 ~ 9 까지 숫자를 카운터하여 화면에 표시하기

 

 

[단계 1] AVR Studio4로 Project를 생성하고, C언어 소스 작성하기 링크

AVR Studio4 편집 화면에 아래 C언어 소스 프로그램을 작성하여 화일명.c로 저장한다.

 

▶ C언어 소스 예제


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
44
45
46
// ATmega128의 레지스터 등이 정의되어 있음
#include <avr/io.h>
 // _delay_ms() 함수 등이 정의되어 있음
#include <util/delay.h>
 
#define COM4 0
#define COM3 1
#define COM2 2
#define COM1 3 
// C 언어의 주 실행 함수
int main(void){
 
char i;    // 8비트의 변수 선언
 // FND에 출력되는 문자 모양(Font, 폰트)을 배열을 이용해 설정
char FND_Font[ ] = {
    0B11111100// FND Font 0
    0B01100000// FND Font 1
    0B11011010// FND Font 2
    0B11110010// FND Font 3
    0B01100110// FND Font 4
    0B10110110// FND Font 5
    0B10111110// FND Font 6
    0B11100000// FND Font 7
    0B11111110// FND Font 8
    0B11110110  // FND Font 9
     };
    // 포트 A의 방향 설정, 0 : 입력, 1 : 출력
    DDRA = 0B11111111;
    // 포트 C의 방향 설정, 0 : 입력, 1 : 출력
    DDRC = 0B00001111;
    PORTB = 0;
    // while 블록 안의 문장을 무한 반복
    while(1)
        {
        // 첫번째 자리 FND에 표시하기
        PORTB |= 1 << COM4 ;
            for( i = 0; i < 10; i++)
            {
                PORTD = FND_Font[i];
                // 200ms 동안 대기
                _delay_ms(200);
            }
        }
        // 함수의 형태와 같이 정수형(int)의 값을 반환함
        return 1;
}
cs



[단계 2]AVR Studio 4로 C언어 소스프로그램을 빌드한다. 링크

[단계 3]AVR Studio 4로 타겟보드에 라이팅을 한다. 링크