본문 바로가기

AVR(ATmega128)로 장난하기

AVR(ATmaga128)로 LED전자회로 장난하기

avr led



1. LED 특성 및 제어회로

 


a. 그림은 LED에 정 방향의 바이어스 전압을 인가하여 전류가 잘 흐르는 그림을 보이고 있다. 이때 LED는 밝게 켜진다. b. 그림은 LED에 역 방향의  바이어스 전압을 인가하여 전류가 흐르지 않는 상태를 나타내고 있다. 이때 LED는 OFF다.

 

 

 위 두 회로는 모두 LED를 ON/OFF할 수 있도록 구성된 회로다. 다만 LED가 켜지기 위한 포트의 출력이 다른데, a에서는 포트의 핀 출력이 'Low'(0)일 때 LED가 켜진다. 반면 b에서는 포트의 핀 출력이 'High'(1)일 때 LED가 켜진다.

 

2. AVR(Atmega128)의 LED제어에 사용되는 디지털 출력 레지스터

 

 

3. AVR(Atmega128) 연습용 키트를 사용한 실제 LED제어

 

이 블럭은 앞에 설명한 것과 Active Low 동작이며, 8개의 LED가 하나의 커넥터로 연결된다, 5V VCC전원에 연결되어 있고 1k옴의 어레이저항이 연결 되어 있다.

 

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

 

 

10pin 케이블을이나 점퍼선을 이용해 LED_L 커넥터와 AVR 연습용 메인키트의 PORTA와 연결한다.

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
 
// ATmega128의 레지스터 등이 정의되어 있음
#include <avr/io.h>
// _delay_ms() 함수 등이 정의되어 있음
#include <util/delay.h>
 
// C 언어의 주 실행 함수
int main(void){
 
    DDRA = 0xFF;          // 0B11111111 모두 출력으로설정
    PORTA = 0x00          // 0B00000000 모두 초기화
 
    while(1)
    {
        
        PORTA = 0x01;     // 0B00000001 출력
        _delay_ms(500);   // 500ms 동안 대기
 
        PORTA = 0x00;     // 0B00000000 출력
        _delay_ms(500);   // 500ms 동안 대기
 
    }
 
 // 함수의 형태와 같이 정수형(int)의 값을 반환함
return 1;
}
cs


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

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

 

5. 오실로스코프 파형 모습


 

이 그림은 오실로스코프로 PA0(LED1)에서 출력되는 파형을 보여주고 있다. 점선 한 칸의 간격은 100ms이다.