본문 바로가기
Embedded System/AVR

[AVR] LED

by goatlab 2022. 5. 24.
728x90
반응형
SMALL

LED (Light-Emitting Diode)

 

- 발광다이오드라 칭하며, 칼륨, 인, 비소 등을 재료로 한 다이오드 (diode)로 순방향으로 전류를 흘리면 빛을 발한다.

- 빛의 색깔은 크리스털 도핑의 양과 종류에 따라 빨강, 노랑, 녹색, 파랑의 색을 나타낸다.

- 일반 전구나 네온램프 등 다른 발광 소자와 비교하여 전기 빛의 변환 효율이 높으며, 열이 나지 않고, 소형 경량이기 때 문에 수명이 길다.

- 각종 숫자·문자표시기, 카메라의 자동초점용 광원, 광통신용, 광고판, TV 등에 사용되며 응용범위가 넓다.

- 보통 10~20mA 전류에 1.5V~2.5V 전압 강하

 

volatile 선언

 

- 컴파일러는 volatile로 선언된 변수나 포인터와 관련된 코드를 임의로 최적화하지 말라는 의미이다.

- 사용되는 곳
1) 인터럽트 루틴과 메인 루틴에서 같은 변수를 사용하는 경우
2) 자동변수의 경우 일정시간 CPU에서 operation을 수행해 주기를 원하는 경우
3) 외부 버스 마스터와 특정 메모리를 공유하는 경우
4) 코드의 순서를 지키고 싶은 경우
5) I/O 레지스터 등을 메모리맵에 매핑시켜서 사용하는 경우 
volatile int i, a, b;
a = 0;
b = 0;
for (i=0; i<10; i++)
	b += a * 100 // volatile이 없다면 a = 0 이므로
		     // b += 0 으로 최적화

volatile int a;
a = 10; // volatile이 없다면 이 코드는
	// 최적화로 인하여 삭제될 수 있음
a = 20;

 

1. GPIO로 LED 켜고 끄기

 

#include <avr/io.h> // ATmega128 register 정의

int main()
{
	DDRA = 0xff; // 포트 A를 출력 포트로 사용
	PORTA = 0xff; // 0xff = 0b11111111, LED 모두 ON
}

 

2. GPIO로 LED 움직임 표현하기

 

#include <avr/io.h> // ATmega128 register 정의

void delay_sec(int sec)
{
	volatile int i, j, k;
	for (i=0; i<sec; i++)
		for (j=0; j<1000; j++)
			for (k=0; k<1000; k++)
				;
}

int main()
{
	DDRA = 0xff; // 포트 A를 출력 포트로 사용
	while (1)
	{
		PORTA = 0xff; // LED 모두 ON
		delay_sec(1); // 1초 기다림
		PORTA = 0x00; // LED 모두 OFF
		delay_sec(1); // 1초 기다림 }
}
728x90
반응형
LIST

'Embedded System > AVR' 카테고리의 다른 글

[AVR] Timing Diagram  (0) 2022.05.25
[AVR] MAX7219  (0) 2022.05.25
[AVR] Simple AVR code: MAX7219 7-segment display driver  (0) 2022.05.24
[AVR] GPIO (General Purpose Input Output)  (0) 2022.05.24
[AVR] 실습 키트 연결  (0) 2022.05.24