1 배경
ATmega328p를 내장한 아두이노 우노를 가지고 이것저것 만들고 놀려면 기본적으로 Arduino IDE만 설치하면 된다. Arduino IDE는 프로그램 작성/업로드, 시리얼 모니터링, 다양하고 쉬운 라이브러리 사용, 다양한 아두이노 시리즈 지원 등의 기능을 가진 편리한 툴이다. 그리고 아두이노 보드에는 ATmega16u 칩이 내장되어있어 USB to Serial이 가능하여 USB 케이블만 연결하면 작성한 프로그램을 손쉽게 아두이노 보드로 업로드하고 시리얼 모니터를 통해 디버깅이 가능하다. 또한 Arduino IDE에 이미 정의된 함수들과 다양한 라이브리들을 이용하면 쉽고 간결한 코드 작성이 가능하다. 이렇다 보니 인터넷에서 필요한 정보를 찾아보면 대부분의 결과들은 한 가지 목적을 위한 예제용 코드가 많았다. 예를 들면 '아두이노 PWM'을 검색해서 찾아보면 대부분 analogWrite()를 이용한 단순한 예제가 많았다. 내가 원한 건 Timer/Counter를 사용하여 PWM 신호를 어떻게 생성하는 거였는데 말이다. 이런 것을 통해 봤을 때 뭔가 세세한 구현까지 가능하면 좋겠다는 생각이 들었다. 그리하여 ATmega328p 본연의 기능을 자세히 살펴보고 싶었다. 또한 복잡한 기능을 구현해보려면 타이머/카운터, 인터럽트, ADC 등의 기능을 면밀히 학습할 필요가 있다. 그래서 찾은 것이 Microchip Studio로 ATmega328p의 기능들을 하나씩 섭렵해나가는 것이다. 그러면 avr을 이해하는데 많은 도움이 될 것 같았다.
2 Microchip Studio 설치
원래는 'Atmel Studio'였는데 최근에 이름이 'Microchip Studio'로 변경되었다. 이는 Atmel사가 Microchip Technology사의 소유가 되었고 결국 툴의 이름까지 변경한 것이다. 기존 사용자들에게 친숙한 이름이었을 텐데 굳이 바꿀 필요까지는 없었는데 말이다. 이 Microchip Studio를 설치해보자. 우선 여기에서 Web 혹은 Offline 설치 파일 중에 하나를 선택하여 다운로드하여 설치한다.
이전 버전인 '아트멜 스튜디오'는 여기에서 버전별로 받을 수 있다.
3 USB ISP
USB to ISP 장치는 알리익스프레스에서 싼 걸로 구매했다. 참고로 나는 여기에서 소켓까지 포함된 세트로 구매하였다. 그런데 이 장치는 이름이 USBasp이고 일반 USB-ISP 장치와 달라 별도의 설정 과정이 필요하다.
USBasp 드라이버 설치
- zadig-2.5를 다운로드하여 설치한다.
- 장치를 PC의 USB 포트에 연결한다.
- zadig를 실행한다.
- 'USBasp'가 자동으로 잡힌다.
- 대상을 libusb-win32 (v1.2.6.0)로 선택한다.
- 'Install Driver' 버튼 클릭하여 드라이버 설치
- 드라이버가 설치되면 장치 관리자에 USBasp 장치가 잡힌다.
avrdude 설치
- avrdude에서 'avrdude-6.3-mingw32.zip를 다운로드한다.
- 압축을 풀어서 C:\devtools\avrdude-6.3-mingw32에 위치시킨다.
- Microchip Studio를 실행시킨다.
- External Tools에 추가하기 (Tools 메뉴에 USBasp 버튼 추가)
- Tool -> External Tools
- Click 'Add' button
- Title : USBasp (**그림에서는 'USPasp'로 오타 입력)
- Command : C:\devtools\avrdude-6.3-mingw32\avrdude.exe
- Arguments : -p atmega328p -c usbasp -P usb -U flash:w:"$(ProjectDir)Debug\$(TargetName).hex":i
- Check "Use Output window" check box
- 상단 툴바에 USBasp 추가
- Tools > Customize
- 'Commands' tab → Menu Bar → Add Command → 'Tools' → 'External Command 1' → OK
4 테스트
- Project 생성 (blink)
- File -> New -> Project...
- New Project
- C/C++ -> 'GCC C Executable Project'
- Name : blink
- Location : D:\temp\
- OK
- 프로젝트가 생성되면 Device Selection 화면이 나타난다. 여기서 'atmega328p'를 검색하여 선택한 후 OK 버튼을 클릭한다.
- 아두이노 보드의 13번 핀에 연결된 LED가 1초 간격으로 깜빡이도록 하는 C 코드를 작성한다. (main.c)
#define F_CPU 16000000L
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB = 0x20; // Set pin #13 of Arduino as an output
while (1) {
PORTB = 0x00; // Off
_delay_ms(1000);
PORTB = 0x20; // On
_delay_ms(1000);
}
}
- 아래 방법 중 하나를 선택하여 작성한 코드를 빌드한다.
- F7
- 'Build' -> 'Build Solution'
- click build buttion
- USBasp 장치의 USB 플러그를 PC의 USB 포트에 연결하고 ISP 플러그를 아두이노 보드의 ICSP 단자에 연결한다.
- 툴바에 있는 'USBasp'를 클릭하거나 'Tools->USBasp'를 클릭하여 빌드된 바이너리를 아두이노 보드로 다운로드한다.
- 아두이노 보드의 13번 핀에 연결된 LED가 1초 간격으로 깜빡이는지 확인한다.
'mcu > avr' 카테고리의 다른 글
PlatformIO 소개 (0) | 2021.03.15 |
---|
댓글