CPU 모듈
실습에 사용하는 장비 : Atmel ATmega 2560
135 instruction - Cpu에게 내릴 수 있는 기계어 명령어 수
주파수 -> 초당 진동수, 이 주파수는 cpu에서 초당 계산 능력과도 연관된다.
"주기(cycle)"가 1초에 몇번이냐에 따라 - Hz 등으로 표현
전류 - 전기의 흐름
전압 - 전기의 압력
물탱크의 수압과 꼭지를 통해 흐르는 물을 생각하고 대입하면 이해하기 쉽다.
V=IR - 저항이 클수록 전류는 적게 흐름
일반적으로 한국은 AC(Alternating Current) 220v 60hz
이는 1초동안 60번 +,- 극성이 바뀌는 것을 의미
P = VI
= 220v * 1A
= 220W = 0.22 KW
Atmel ATmega 2560 실습
개발 환경 구축
AVR Studio 설정
선이 연결되는 위치와 기반의 방향에 주의.
어댑터를 연결할 때는 전원을 꼭 내린채로 연결! 절대 주의!
windows 10 dll FILE
AVR Studio 설정
Tools-Program AVR-Connect... 선택
STK500-COM3 연결
포트 연결은 시스템-장치관리자의 포트 항목에서도 확인 가능하다.
Atmega2560을 선택한 후, Read Signature를 눌렀을 때 모두 OK!가 나오는지 확인.
Makefile
각종 명령어가 담겨있으며 아래 항목들을 메모장으로 열어 환경에 맞게 수정해준다.
# MCU name
MCU = atmega2560
# Processor frequency.
F_CPU = 16000000
# Target file name (without extension).
TARGET = main // 항상 main.c를 기준으로 한다면 바꾸지 않음. main.c로 코딩하는 이유
LED제어를 위한 예제.
DDRA, PORTA, PINA 기능과 주소 부분은 Atmega25060의 datasheet 파일에서 확인 가능하다.
main.c 파일로 아래와 같이 소스를 짠다.
#define DDRA (*((volatile unsigned char *)0x21))
#define PORTA (*((volatile unsigned char *)0x22))
#define PINA (*((volatile unsigned char *)0x20))
int main(void) //void 안적으면 컴파일시 warning isn't a prototype
{
DDRA=0xFF; // 출력으로 쓴다.
PORTA=0xFF; //모든 다리를 5v로 만듬
while(1); //초기상태로 돌리지 않기위해 항상 씀. return 0;
} |
명령창에서 make를 입력후 엔터하면 위와 같이 파일들이 생성된다.
int main() 에서 괄호안에 void를 안 적으면 아래와 같이 Warning message가 출력
make clean은 main.c와 Makefile을 제외하고 모두 지우는 명령어
int main(void)라고 수정후 make. Warning 뜨지 않음
컴파일이 성공적으로 되었으면 Program탭에서 Flash 항목에 HEX File을 선택후 Program을 누른다. (당연히 전원 들어온 상태에서만 쓰기가능)
LED 제어 실습
먼저 LED를 10번 GND부터 연결, 극성과 위치를 설계도를 보며 잘 확인할 것!
설계도를 볼때는 x,y축을 통해 원하는 정보의 위치를 대략적으로 찾을 수도 있다.
메인보드 뒤쪽에도 번호가 적혀있다.
LED가 극성에 맞게 모두 잘 연결되었다면 위와 같이 LED에 불빛이 들어온다.
깜박거리는 LED 만들기
#define DDRA (*((volatile unsigned char *)0x21))
#define PORTA (*((volatile unsigned char *)0x22))
#define PINA (*((volatile unsigned char *)0x20))
int main(void) //void 안적으면 컴파일시 warning isn't a prototype
{
volatile unsigned int uiCnt;
DDRA=0xFF; // 출력으로 쓴다.
while(1)
{
for(uiCnt=0; 60000>uiCnt;++uiCnt); //숫자가 낮으면 빨리 깜박임
PORTA=0xFF;
for(uiCnt=0; 60000>uiCnt;++uiCnt);
PORTA=0x00;
}
return 0;
} |
어제 배운 volatile을 응용한 예제이다. 의도적인 지연을 통해 불빛이 들어오고 나가는 시간을 조절할 수 있다.
make clean후 다시 make.
아까전 Program탭에서 Flash 항목에서 다시 Program을 누른다.
실습 결과 LED가 일정한 간격으로 깜박거리는 것을 볼 수 있다.
'Study > Embedded' 카테고리의 다른 글
20160316-LCD출력 (0) | 2016.03.17 |
---|---|
20160315-펌웨어 분석 및 학습 (0) | 2016.03.16 |
20160314-펌웨어 분석(외부 인터럽트) (0) | 2016.03.15 |
20160311-펌웨어분석 (FND, LED Test) (0) | 2016.03.12 |
20160310-CPU 모듈2 (0) | 2016.03.10 |