티스토리 뷰

이번엔 실습보드 없이 간단한 프로젝트를 만들어보도록 하자.

먼저 프로젝트부터 생성해보자.


# 비주얼스튜디오와 동일한 구조다. 프로젝트명, 경로를 지정해주면 된다.



그리고 기다리면 이렇게 디바이스를 선택하는 화면이 나온다.


# PC에서 비주얼스튜디오를 사용할 때는 이 부분이 없지만,

사용할 프로세서에 따라 메모리 크기라던지 조건이 다르기때문에 그에 맞는 옵션을 설정 할 수 있도록 모델을 골라줘야한다.

우리가 사용할 부분은 ATmega 시리즈 이기에, 그 중 168PB를 선택하고 프로젝트를 생성해준다.






# 비주얼스튜디오와 동일한 구조를 띄고 있다.

우측에 솔루션 탐색기가 있고, 편집할 소스코드가 깔려서 생성이 된다.

헤더파일로는 avr헤더가 선언이 되어있고, 메인에 소스코드를 작성하면 된다.






우리가 진행할 것은 LED를 깜빡이는 것이다. 

코딩으로 LED를 어떻게 깜박일 수 있을까? 

 

먼저 우리가 사용 할 MCU에 대해 설명이 필요하다.

# 이것은 ATmega168PB의 데이터시트다.

 

핀 이름들이 나와있는데 규칙을 살펴보면,

핀 이름에 공통적으로 사용되는 이름(알파벳)들이 있고, 괄호 안에 그 외의 것들이 있다.

이름중에 P가 들어가는 것은 Port를 의미한다. 보통 그 뒤의 알파벳이 A부터 시작해서 순서대로 나열되는데,

168PB의 경우 작은규모라 다른 알파벳부터 시작한다. 일반적으로 A부터 시작한다고 알고있으면 된다.

 

PA 와 같이 이름이 붙고 그 뒤에 0부터 최대 7까지 숫자가 부여된다.

PA5 를 예로들자면 포트 A의 5번비트 를 의미한다.

 




 

# 우리가 갖고있는 Xmini에는 PB5 핀에 LED가 붙어있고 PB7 핀에 버튼스위치가 붙어있다.

PB5를 사용해서 LED를 어떻게 켜는지를 알아보도록 하자.


여러개의 핀들이 존재하는것을 위의 데이터시트를 통해 확인할 수 있는데, 

각 핀은 디지털 입력으로 설정이 되어있다. 

최초에 전기가 들어왔을때 핀들이 출력으로 설정이 되어있으면 다른것과 물리적 충돌이 있을 수 있어서

기본적으로 입력으로 설정이 되어있다.

따라서 출력으로 사용할 핀은 MCU에 따로 명시를 해줘서 설정을 해줘야 한다.


출력으로 설정하는 방법은 포트를 기준으로 각 포트마다 레지스터들이 있다.

레지스터는 주로 변수처럼 사용을 한다. 


포트B(PB)를 사용하기 위해서는 디지털 입력으로 사용할 것인지, 출력으로 사용할것인지를 결정해주는 레지스터가 있다.

DDRB 라는 레지스터이다.


포트B는 비트가 0~7까지 할당이 되어있는데, 비트에 1을 써주면 출력으로 사용이 된다.

그러므로, PB5 에 LED가 설정이 되어있으므로 출력(Output)으로 설정하기위해 b5에 1을 써준다.


다시말해 입/출력을 담당하는 DDRB레지스터에 LED가 설정된 PB5를 출력으로 만들고자 5번비트(b5)에 1을 써준다는 것이다.



그리고 High신호로 나가게 설정하려면, 그것을 담당하는 PORTB레지스터의 5번비트(b5)에 1을 써주면 된다.



이렇게 DDRB의 b5도 1이고 PORTB의 b5도 1이면, PB5라는 출력 핀에서 LED쪽으로 High 상태로 신호가 나가게 된다.

그렇게 되면 LED가 켜지게 되는 것이다.




그럼 이것들을 코드로 구현해보자.


# 위와같은 형태로 코드를 입력해준다.


레지스터들은 변수처럼 사용이 가능하기 때문에, 이미 예약어로 존재한다.

또한 알아둘 것은 MCU의 코드에서는 메인함수가 return 0 으로 끝나지 않는다.

OS가 없기때문에 정의되지 않은 동작(0으로 끝나는게 의미하는)을 하게 되어 의도치 않은 결과를 발생시킨다.

따라서 무한루프를 도는 형태로 정의되어있다.






자 그럼 포트가 없는데 얘가 어떻게 동작을 하는지 알 수 있을까?

아트멜스튜디오 내부에 시뮬레이터가 내장되어있다.


# 빌드를 해보면 성공했다 메세지가 뜬다. 즉 코드에 문법적인 오류가 없다는 것이다.


그 후 디버깅을 진행해보면, 


# 디버깅을 진행하려 하는데 보드가 연결되어있지 않으므로 툴을 선택하라는 메세지가 나온다.






# 시뮬레이터 로 선택해주고 다시 한번 디버그 모드로 들어가면 된다.






# 다시 디버그모드로 진입하여 메인함수쪽을 살펴 볼 것이므로 main.c를 눌러주고,

우리에겐 I/O 즉, 인풋과 아웃풋 창이 필요하므로 위와같이 설정하여 확인할수 있게 창을 띄워준다.






# I/O창에서 우리가 PORTB에 입력한 값이 제대로 전달이 되고 있는지 확인 할 수 있다.






# 위와같이 중단점을 찍고 다시한번 디버깅을 돌려보자. 리셋은 Shift+F5로 가능하다.






# PORTB 를 확인해보면 비트가 모두 비어있는것을 확인할 수 있다.

즉 아직 진입점에서 Break Point로 넘어가지 않았기 때문에, 값을 할당하지 않은상태이기 때문이다.






# 위와같이 비트에 불이 들어오면 정상적으로 값이 입력 된 것이다.






댓글
댓글쓰기 폼
공지사항
Total
295,316
Today
12
Yesterday
276
링크
TAG
more
«   2022/09   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
글 보관함