본문 바로가기
코스웨어/16년 스마트컨트롤러

20160309-조재찬-업무일지-CPU 모듈

by 알 수 없는 사용자 2016. 3. 9.
728x90
반응형

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 기타 사양


GPR = General Purpose Register

8 bit * 32 -> 32개는 연산을 위해 저장되는 cpu고유의 메모리 공간


Multiplier 곱셈기

8bit 기준, 2 cycle


256kb 플래쉬 메모리

4kbytes EEPROM



Atmel ATmega 2560 실습


개발 환경 구축


AVR Studio 설정




선이 연결되는 위치와 기판 방향에 주의.

어댑터를 연결할 때는 전원을 꼭 내린채로 연결! 절대 주의!



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로 코딩하는 이유



avr studio 설치폴더에서  \bin 디렉토리의 arr_gcc.exe는 컴파일러이다.

                                   \utils\bin 에는 기타 유용한 파일들이 모여있다.

     


LED제어를 위한 예제.

DDRA, PORTA, PINA 기능과 주소 부분은 Atmega2560의 datasheet 파일에서 확인 가능하다.


main.c 파일로 아래와 같이 소스를 짠다.

1
2
3
4
5
6
7
8
9
10
11
12
#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(-)부터 연결, 극성과 위치를 설계도를 보며 잘 확인할 것!

Register Summary 항목에는 각 register의 Address와 Name을 볼 수 있다.


Intel은 register의 Address개념이 없고 C언어 프로그래밍을 통해 접근할 방법또한 없다.


핀이 솟아있는 것을 점퍼라고 하며 암놈과 숫놈 점퍼를 잘 구분하자.

설계도를 볼때는 x,y축을 통해 원하는 정보의 위치를 대략적으로 찾을 수도 있다.



메인보드 뒤쪽에도 번호가 적혀있다.



다른 쪽은 1번에 연결. 컴파일한 HEX파일이 flash에 성공적으로 쓰여지고, 

LED가 극성에 맞게 모두 잘 연결되었다면 위와 같이 LED에 불빛이 들어온다.



깜박거리는 LED 만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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가 일정한 간격으로 깜박거리는 것을 볼 수 있다.




728x90