16
2016-Sep
[AVR] LED 입출력을 제어해보자 - 1
작성자: 츠바이
IP ADRESS: *.27.32.87 조회 수: 1600
책 한권 없이 홀로 고독한 나에게 내려온 빛 줄기들.
그것은 데이터시트와 구글, 그리고 포그이터였다.
원래 인생은 멘땅에 헤딩.
avr 출력 제어에 있어서 가장 효율적인게 바로 LED가 아닐까 싶다.
그야, 은은한 불빛이 눈앞에 생생히 펼쳐지기 때문에.
확실히 인지할 수 있다고 해야하나..
솔직히 나도 입문하는 입장이라 딱히 도움될 거라고 생각 되지는 않지만,
이건 뭐 교육용 글도 아니고 사실상 일지에 가까우니까.
어차피 나도 구글로 여러가지 주워들은 거로 만들었기 때문에.
그럼 시작해보자.
led는 너무 갓 재료이기 때문에
한번 껐다가 키고 버리기엔 상당히 아깝다.
고로 앞으로 점점 심화되고 복잡한(?) 형태의 회로를 만들어가면서,
여러번에 걸쳐서 두고 두고 써먹도록 하겠다.
우선 이번엔 간단하게 8개의 led의 입출력을 동시에 제어해보도록 하자.
말은 거창하지만 그냥 껐다 키는 거다...
깜빡깜빡바가ㅏ막막ㅁ가막ㅁ
준비물은 다음과 같다.
atmega128 장착 보드 / 빵판 / 330옴 저항 8개/ led 8개
우선 회로를 제작하도록 하자.
필자는 다음과 같이 만들었다.
필자가 전자회로 작성 방법을 몰라서 그냥 사진으로 찍어서 업로드 했다.
회로를 살펴보자면,
포트 A의 8개 구멍에서 전기가 방출되어서
각각 저항과 led를 흐르고
직렬로 연결되는 회로를 따라가
결국 gnd로 회수되는 형태이다.
혹시나,
정말 혹시나 나처럼 전자공학을 정말 1도 모르는 사람에게 알려주는 조언아닌 조언이라면,
전기가 +에서 -로 통한다는 건 초등학교 때 배웠을 것이다.
그러니까 반드시 전기가 흘러오는 쪽으로 + 부분을 꽂도록 하자... (긴 쪽)
이제 코딩을 해보도록 하자.
Atmel Studio 정도는 다들 기본으로 깔려있을 것이고,
avr 구동 및 코드 파일 삽입 방법도 다들 아리라 믿는다.
http://fogeaters.cafe24.com/xe/index.php?mid=board11&page=4&document_srl=12289
모르면 여기 보면 된다.
나처럼 atmel 사에서 만든 ASF 보드가 아닌 다른 보드 쓰는 사람들은 GCC C Executable Project를 이용하는 것이 건강에 좋다.
일단 기본적으로 delay.h 헤드 파일이 주어지지 않았으므로 직접 추가해야한다.
처음 시작하면 main.c 탭으로 설정되어 있을텐데
바로 옆의 ASF Wizard 탭 눌러서 추가 할 수 있다. 앞으로 자주 쓸테니 잘 알아두자.
설정하라는 거 다 해주면 라이브러리가 여러개 뜨는데
우리는 Delay routines 만 추가해주면 된다.
참고로 추가해주면 src 폴더 안에 main.c 파일이 하나 더 생기므로
원인도 모른 채 컴파일 오류로 암걸리기 싫으면 즉시 지우는 것이 건강에 좋다.
이제 다음과 같이 코드를 작성하자.
#include <avr/io.h> // avr 입출력 헤더
#define F_CPU 8000000UL // 크리스탈 값 상수화
#include <delay.h> // delay 헤더
int main(void)
{
PORTA = 0x00; // 포트 A 초기값을 0으로.
DDRA = 0xFF; // 포트 A를 출력으로 설정.
while (1) // 무한루프-------
{
PORTA = 0xFF; // 포트 A에 전력을 쑤신다.
delay_ms(100); // 0.1초 간 대기.
PORTA = 0x00; // 포트 A에 쑤시기를 멈춘다.
delay_ms(100); // 0.1초간 대기.
}
return 0; // 앙 반환 띠
}
delay_ms는 밀리초 동안 대기하도록 해주는 함수다...내가 알기론.
괄호 안에 있는 값은 마음대로 조정해도 상관 없다.
일반 avr 코드랑은 몇가지 차이가 있는데,
#include <util/delay.h> 를 #include <delay.h> 로 했다던가,
_delay_ms(100); 를 delay_ms(100); 로 했다는 것.
원래 코드대로 하니까 컴파일 오류 뜨길래
니 임의대로 바꿨더니 잘 되더라.
처음엔 project 만들때 잘못 설정해서 그런가 싶었는데 아니더라.
원인은 나도 잘 모르겠다; 누가 친절히 설명해주면 참 좋을 것 같다..
여튼...무사히 빌드 되었으면 atmega128에 쑤셔넣어주자.
그러면...
요렇게 광란의 4.4V ㅅㅅ 파티를 즐길 수 있다.
아이 신나라