티스토리 뷰

입문

AVR에 실행 파일 다운로드

Just4Fun 2016. 2. 26. 22:27

앞의 글에서 개발도구 설치와 더불어 'hello' 프로젝트를 작성하여 성공적으로 빌드하였다면, 이번에는 그 결과로 만들어진 실행 파일을 실제 AVR에서 동작시키는 방법에 대해서 설명하도록 하겠다.

첫번째로 해야 할 일은 하드웨어 준비 글에서 소개한 부품을 이용하여 회로부터 구성하는 것이다.  회로 구성을 위해서는 AVR의 외부로 나오는 핀들에 대한 설명을 보아야 한다.

핀 구성의 상세 내용을 알기 위해서 ATMEL사 홈페이지에서 ATmega328P의 데이터쉬트를 다운로드 받아서 열어 본다.  일단 파일을 다운로드 받았으면 데이터쉬트에 어떤 내용이 들어 있는지 처음부터 끝까지 전체적으로 대충대충 훑어본다.  그래야 나중에 필요한 내용을 빨리빨리 찾아볼 수 있기 때문이다.

데이터쉬트 앞 부분에서 다양한 칩 패키지에 따른 핀 구성에 대한 그림을 볼 수 있다.  이미 설명했듯이 28핀 DIP 패키지를 이용할 것이므로 몇개의 그림중에서 다음과 같은 핀 구성을 이용하여 프로그램을 개발해 나갈 것이다.

컴퓨터와 AVR은 ISP라는 기능을 이용하여 연결하게 되는데, ISP는 SPI 통신을 사용하므로 AVRISP를 SPI 마스터로, AVR을 SPI 슬레이브로 구성하면 된다.  결국 AVR을 SPI slave로 동작 되도록 하기 위하여 위 그림에 보여지는 핀 중에서 1,17,18,19번을 사용하면 되고, 그 결과 컴퓨터와 AVR을 연결할 수 있게 된다는 뜻이다.  물론 전원 연결을 위하여 7번과 8번도 사용하여야 한다.

AVRISP는 6핀 커넥트를 가지고 있고 각 핀의 용도는 아래 그림과 같으므로 잘못 연결되지 않게 주의해서 AVRISP 커넥트와 AVR을 점퍼선을 이용하여 연결한다.

AVRISP와 AVR의 연결을 회로도로 나타나면 다음과 같이 된다.  AVR의 MOSI, MISO, SCK 핀과 RESET핀을 커넥트에 연결하고 AVR의 전원과 AVRISP 커넥트의 전원을 함께 연결하면 된다.

위의 회로도를 실제 브레드보드에서 연결한 모습은 다음과 같다.

회로를 구성했으면 일단 전원을 끊어 놓은 상태로 AVRISP 장비를 컴퓨터와 연결시키는 과정으로 넘어간다.  AVRISP는 컴퓨터와 USB로 연결이 된다.  컴퓨터와 연결이 되었으면 장치관리자 화면을 열어 컴퓨터에서 AVRISP를 제대로 인식하는지 확인한다.

위의 그림처럼 Jungo Connectivity 아래에 AVRISP mkII라는 것이 보이면 컴퓨터와는 제대로 연결이 된것으로 확인되었다.  이 상태에서 AVRISP의 LED상태등은 아래 그림처럼 빨간색으로 표시된다.

이제 AVRISP의 커넥트를 브레드보드와 연결하고, 브레드보드에 전원을 연결하면 빨간색 LED가 초록색으로 변하는 것을 볼 수 있다.  

만약 브레드보드의 회로가 잘못되었거나 커넥트가 제대로 연결되지 않으면 AVRISP의 LED가 빨간색으로 유지되거나 오렌지색으로 점멸된다.  이럴때는 빨리 전원을 끊고 회로를 잘못 연결하지는 않았는지 확인해본다.

AVRISP의 LED가 초록색으로 보이는 것이 확인 되었으면 Atmel Studio 프로그램을 실행하고 개발환경 구축에서 만들었던 hello프로젝트를 연다.  그리고 툴바에서 번개표시가 있는 버튼을 누르거나 메뉴에서 Tools>Device Programming을 선택한다.  단축키 Ctrl+Shift+P를 눌러도 된다.

그러면 Device Programming이라는 다이얼로그 화면이 열린다.

화면 상단의 Tool에는 AVRISP 장비를 선택하고 Device에는 브레드보드에 실장된 AVR CPU를 선택하면 된다.  여기에서는 ATmega328P를 선택한 것을 볼 수 있다.  그 다음에 가운데 보이는 Apply버튼을 누르면 해당 칩과 관련된 세부 동작을 수행 할 수 있는 항목들이 나타난다.

Device signature라고 보이는 곳에 있는 Read 버튼을 누르면 ISP 장비로 AVR 내부에 있는 Device ID를 읽어 올 수 있다.  읽어 온 값이 Device 항목에서 선택한 AVR CPU와 실제 장비로 읽어 온 Device ID가 맞는지 확인한다.  만약 선택한 device가 아닌 다른 ID가 읽혀 오면 아래 그림과 같은 에러 화면을 보게 된다.  위의 그림에서 설명하는 것처럼 ISP clock은 브레드보드에 장착된 AVR의 동작 클럭의 1/4 이하로 설정되어야 하므로 Device ID가 제대로 읽혀오지 않는 경우에는 ISP clock을 낮은 값으로 설정하여 Device ID가 제대로 읽히는지 확인해 보도록 한다.  참고로 초기 ATmega328P의 기본동작 클럭은 1MHz로 설정되어 있으므로 ISP Clock은 250KHz 이하로 설정 하여야 한다.

Device ID가 제대로 읽혀 오는지 확인이 되었으면 화면 왼쪽에 있는 메뉴중에서 Memories를 선택한다.  그러면 아래 화면과 같은 내용이 나온다.

Memories 항목을 선택하면 Flash라고 되어 있는 부분에 자동으로 hello프로젝트에서 생성한 실행파일이 선택되어 있는것을 볼 수 있다.  혹시라도 다른 프로젝트의 실행파일이 선택되어 있으면 오른쪽 끝에 있는 브라우저 버튼을 눌러 AVR에 프로그램해야 할 실행파일을 찾아서 선택하도록 한다.  선택할 수 있는 실행파일은 파일 확장자가 ELF이거나 HEX이다.  원하는 실행파일을 선택하였으면 가운데 있는 Program 버튼을 누른다.  그러면 컴퓨터에 만들어져 있는 실행파일을 읽어와서 실제로 AVR 칩 안에 있는 플래쉬메모리에 쓰여져야할 부분의 데이터만 찾아서 AVR 칩에 프로그램 한다.  참고로 플래쉬메모리에 데이터를 기록하는 동작을 프로그램한다라고 표현한다.  그래서 Atmel Studio에서도 Program이라는 이름의 버튼을 만들어 놓은것이다.

위의 그림과 같이 Erasing OK, Program OK, Verifying OK가 나오면 실행파일이 정상적으로 AVR ROM에 쓰여진 것이다.  정상적으로 플래쉬메모리 프로그램이 완료되면 AVRISP는 자동으로 AVR에 reset신호를 주어 새로 쓰여진 실행파일로 시작되게 한다.  Atmel Studio에서 "hello" 프로젝트를 정상적으로 빌드하고, 또 실제 그 결과물인 실행코드를 AVR의 ROM에 정상적으로 쓰여진것을 확인하였으면 "hello, world"가 출력되는지 확인해 본다.

아마 어디에도 "hello, world"가 출력되지 않을 것이다.  이렇게 AVR이 예상된 동작을 하지 않는다면 그 이유로는 프로그램을 잘못 코딩하였을 수도 있고, AVR이 고장일수도 있고 다른 부품과의 연결이 제대로 안되었을수도 있다.  아니면 처음부터 동작이 되지 않는 기능을 구현했을 수도 있다.  컴퓨터에서 개발되는 일반 프로그램과는 달리 임베디드 시스템에서 동작되는 프로그램이 문제가 있을 때는 그 원인이 소프트웨어뿐만 아니라 하드웨어 문제일 가능성도 있으므로 그 문제를 찾아서 해결하는 것이 훨씬 어렵다.

이번 "hello" 프로젝트의 경우 C언어를 배울때 가장 먼저 구현해보는 간단한 예제임에도 불구하고 임베디드 시스템에서는 그 결과를 쉽게 확인해 볼수 있는것이 아님을 알수 있다.

그래서, 다음 시간에는 임베디드 시스템에서 해볼수 있는 가장 간단한 예제를 통하여 프로그램이 AVR에서 제대로 동작 되는지를 확인해 보기로 하겠다.


입문 과정 목차

'입문' 카테고리의 다른 글

LED 제어 2  (8) 2016.02.27
LED 제어 1  (3) 2016.02.27
개발환경 구축  (8) 2016.02.21
하드웨어 준비  (9) 2016.02.21
"hello, world"  (12) 2016.02.16
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
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
글 보관함