본문 바로가기
ATmega 2560/Ghost의 ATmega C Led 깜박거리기

Ghost 욕심이 넘 많아? ~_~

by dark ghost 2012. 5. 9.
728x90
반응형

ATmega LED 깜박 거리기.

1. 위 그림은 ATmega 128의 LED를 사용해보기 위해 짠 소스이다.

   #include <avr/io.h>

2. 보통 C에서는 #include <stdio.h>나 #include <define.h>라는 헤더 파일을 많이 봤을 것이다. 그러나 ATmega에서는 다른 헤더 파일을 쓰는데 avr이라는 폴더에서 io.h라는 헤더 파일을 불러온다.

 int main(void)

3. 이 부분은 C언어와 같기 때문에 생략.

{

volatile unsigned long i;

4. volatile는 컴파일러가 컴파일을 시키면서 변수가 쓸모가 없을때 스스로 최적화 시켜 짤라 버리는데 짤라서 버리지 못하게 한다. ATmega가에서 long은 4바이트이므로 4바이트의 i변수를 서언 하였다. unsigned는 부호 없이 사용한다고 선언을 한것이다.

DDRF = 0xFF;                                                                                PORTF  =  0xFF;

5. DDRF 는 방향설정과 입출력을 결정한다. 입,출력을 결정 할때는 1은 출력, 0은 입력이다.  PORTF에 FF가 들어가게 되는데, FF는 전부 1이므로 출력을 하겠다고 정하였다. PORTF 에서 PORTF를 어떻게 출력을 시킬지를 정해준다. 1일때는 LED가 꺼지고 0일때 LED가 켜지는 데 지금대로 라면 LED는 전부 불이 안들어 온다. 이 부분까지는 어디까지나 초기화 시키는 과정이다.

      for(;;)

 {

  for(i = 0; i < 125000; i++); 

  PORTF = ~(PORTF);   

}

6. for 문은 반복문이며 (;;)는 무한 반복을 시킨다. for(i = 0; i <125000; i++);  이라는 부분은 LED가 깜빡 거리는 시간이 너무 빨라서 그 시간을 딜레이 시켜주기 위해 짠 부분인데 반드시()뒤에 ;를 붙여 놔야 한다.왜냐 하면 for 문만 반복시켜주기 위해서 필요하다. 만야 되어 있지 않다면 바로 아래 줄까지 반복시키므로 여기서 원하는 결과를 얻을 수 없다. PORTF = ~(PORTF); 는 상태반전을 시키는 구문으로 PORTF를 0xFF로 초기화를 시켰는데 상태 반전이 되면 0x00되므로 LED에 불이 들어 온다.        

 

7. ATmega는 컴파일 시킬때 빨간 네모안에 있는 파일들이 다 있어야 하는데 이 파일들이 필요한 이유는 makefile 라는 파일은 컴파일 시킬때 필요한 파일이고 self.exe는 ATmega 칩에 넣기 위해 필요한 파일이다. 

 

 8. main.c 와  makefile 그리고 self.exe 파일들이 있는 것을 확인 하였다면 Dos Command 창에서 make 라는 명령어를 실행 시키면 컴파일이 된다. 여기서 주의 할 점은 컴파일 시킬 파일은 반드시 main.c 여야 한다는 것이다.

 

9. make 라는 명령어로 컴파일 시키면 오류나 에러가 없다면 위 그림처럼 자연스럽게 넘어 갔다면 프로그램 소스가 제대로 됐다는 것이다. 이제 마지막은 self라는 명령어로 ATmega 칩에 넣기만 하면되는데, self main.hex 라고 치면 된다.

728x90
반응형

댓글