Arduino IDE 환경에서 개발한 실행 파일(Hex File)을 Atmega128에 Upload 하기
아두이노(Arduino) 개발 환경에서 ATmega128 보오드를 개발 보오드로 사용 하기 위하여는 개발한 프로그램의 실행 File(Hex Format File)을 ATmega128에 Upload 하는 Tool(Bootloader)이 필요하다.
여기서는 아두이노(Arduino) 개발 환경에서 개발한 프로그램의 실행 파일을 "스케치 -> 업로드" 명령을 사용 하여 바로 ATmega128 보오드에 Upload 할 수 있는 AVRDUDE(optiboot Bootloader가 ATmega128에 설치 되어 있어야 함)를 이용 하여 ATmega128에 Upload 하는 방법과,
아두이노(Arduino) 개발 환경에서 개발한 프로그램의 실행 파일을 ""스케치 -> 컴파일된 바이너리 내보내기" 명령을 사용 하여 .HEX File을 만들고 별도의 Upload Tool 인 chip45boot2를 이용 하여 ATmega128에 Upload 하는 방법에 대하여 설명 한다.
AVRDUDE는 UART 통신의 DTR 신호을 개발 보오드의 Reset 신호 제어로 사용 하기 때문에 개발 보오드의 Reset 회로가 이에 적합 하게 구성 되어야 하고, ATmega128에 AVRDUDE와 통신 하기 위한 optiboot Bootloader가 설치 되어 있어야 한다.
- AVRDUDE를 이용 하기 위한 Reset 회로
- AVRDUDE를 사용 하기 위한 Reset 회로 예
- AVRDUDE를 사용 하기 위한 USB - UART 변환 모듈과 개발보드의 회로 구성
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Atmega128 개발보드의 TXD0(PE1)를 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Atmega128 개발보드의 RXD0(PE0)를 연결한다.
- 컴퓨터(USB --> UART(RS232) 변환 모듈)의 DTR과 Atmega128 개발보드의 DTR을 연결한다.
- 컴퓨터(USB --> UART(RS232)의 GND와 Atmega128의 GND를 연결한다.
- Atmega128 개발 보드에서 컴퓨터(USB --> UART(RS232)의 전원(5V)을 사용하는 경우 USB --> UART(RS232)의 Vdd와 Atmega128의 Vdd를 연결한다.
- AVRISP mkII를 사용 하여 ATmega128에 optiboot Bootloader 설치 하기
- optiboot_atmega128_16MHz.hex를 다운로드 하여 적당한 위치에 저장 한다.
- AVRISP mkII와 개발 보오드의 ISP Port를 연결 한다.
- AVRISP mkII를 Atmel Studio 7이 설치된 컴퓨터의 USB 포트에 연결 한다.
- Atmel Studio 7을 실행 하고 "Tools -> Device Programming" 실행 하면 아래와 같이 Device Programming 창이 열린다.
- Device Programming 창 예
- Tool 목록상자에서 AVRISP mkII을 선택 한다.
- Device 목록상자에서 ATmega128을 선택 한다.
- Interface 목록상자에서 ISP을 선택 선택 하고,
- Apply 버튼을 Click.
- Device signature "Read" 버튼을 Click.
- Fuses 창 선택을 Click 하면 아래와 같이 Fuses 설정 창이 열린다.
- Fuse Register 설정 창에서 다음과 같이 설정 한다.
- EXTENDED: 0xFF
- HIGH: oxC6
- LOW: oxBF
- "Program" 버튼을 Click 하고, 메세지 창에서 아래 그림과 같이 "OK" 메세지가 출력 되었는지 확인 한다.
- Fuse Register 설정 창 예
- Memories 창 선택을 Click 하면 아래와 같이 Flash 메모리에 Program을 Load 하는 창이 열린다.
- Flash (128KB) 아래 창에 위에서 Down Load하여 저장한 optiboot_atmega128_16MHz.hex File을 선택 한다.
- "Program" 버튼을 Click.
- "Program" 버튼을 Click 하고, 메세지 창에서 아래 그림과 같이 "OK" 메세지가 출력 되었는지 확인 한다.
- 위 과정이 정상으로 진행 되면 ATmega128의 Boot Memory 영역에 Bootloader 가 정상적으로 설치 되었기 때문에 아래와 같이 Atmel Studio7 환경과 Arduino 환경에서 ATmega128에 Hex File을 Load 할 수 있다.
- Flash 메모리에 Program을 Loading 하기 위한 설정 예
- Arduino 환경에서 ATmega128에 Hex File을 Load 하기
- Arduino IDE 환경에서 ATmega 128 Board를 사용 하기 위한 설정
- MegaCore Boards Manager 설치하기
- Arduino IDE를 실행한다.
- "파일 -> 환경설정" 메뉴을 실행하면 환경설정 창이 열린다.
- "설정 -> 추가적인 보드 매니저 URLs"에 아래 URL을 추가하고 "확인"을 클릭한다. 여러개의 URL을 추가하는 경우에는 콤마(,)로 분리한다.
- "툴 -> 보드 -> 보드 매니저... "를 실행하면 보드매니저 창이 열린다.
- 검색 란에서 MegaCore를 검색한 다음 MegaCore를 선택하고 "설치"를 클릭한다.
- 설치가 종료되면 "닫기"를 클릭하여 보드매니저 창을 종료한다.
- Megacore을 사용하는 경우 Arduino에서 사용 하는 Pin 번호
- ATmega128에 Hex File을 Load 하기
- 툴 메뉴에서 보오드 정보를 다음과 같이 선택 한다.
- 보드: "ATmega128"
- BOD: "2.7V"
- Clock: "16MHz external"
- Compiler LTO: "Disabled"
- 포트: USB-Seral 변환 장치의 COM 포트 번호로 맞춘다. (윈도우 [장치 관리자]에서 확인)
- 프로그래머: "STK500 as ISP(MagaCore)"
- ATmega128 보오드에서 실행 할 Progarm을 작성 하고 "스케치 -> 업로드" 명령을 실행 한다.
optiboot Bootloader를 이용 하여 Hex File를 load 하는 Tool인 AVRDUDE는 UART 통신의 DTR 신호을 개발 보오드의 Reset 신호 제어에 사용 하기 때문에 개발 보오드의 Reset 회로가 아래 그림과 같이 구성 되어 있어야 한다. 일반적으로 사용 하는 ATmega128 Board는 Reset 회로가 다르기 때문에 필요한 경우 회로를 변경 하여야 한다.
주: Arduino Mega 2560 보오드는 USB - UART 변환 모듈을 내장하고 있기 때문에 별도의 회로 구성이 필요 없다.
AVRISP mkII는 ATMEL 사의 AVR 시리즈 MCU의 내장 플래시메모리에 프로그램을 다운로드하거나 내장 EEPROM에 데이터를 다운로드하는 기능을 제공하는 별도의 개발 장치 이다. optiboot Bootloader는 ATmega128에 한번만 설치 하면 되기 때문에 AVRISP mkII 가 없는 사람은 주변 동료의 도움을 받아 설치하기 바람.
Arduino IDE에서 ATmega128 보오드에 "스케치 -> 업로드" 명령으로 Hex File을 Load 하기 위하여는 ATmega128 보오드에 optiboot Bootloader를 설치 하고, ATmega128의 Hardware 정보(Clock, Pin 등 보오드 정보)를 Arduino IDE에 설정 하여야 한다.
Arduino IDE 환경에서 ATmega128 Board를 사용 하기 위한 설정은 여러가지 방법이 있으나 여기에서는 MegaCore 환경을 이용 한다.
참고자료: "MCUdude/MegaCore"
https://mcudude.github.io/MegaCore/package_MCUdude_MegaCore_index.json
Megacore을 사용하는 경우 Arduino에서 사용 하는 Pin 번호는 아래 그림 같다. 보다 정확한 정보를 원하는 경우에는 아래 PINOUT Header File(pins_arduino.h)을 참고 하기 바람. Arduino에서 사용 하는 Pin 번호는 PINOUT Header File에 따라 결정 되기 때문에 다른 설정을 사용 하면 Pin 번호가 다를 수 있다. 이 문제는 프로그램의 호환성을 나쁘게 하기 때문에 Arduino에서 사용 하는 Pin 번호를 사용 하는 것 보다 AVR의 Port 이름을 사용하는 것이 좋다. AVR의 Port 이름을 사용하기 위하여는 avr/io.h를 include(#include <avr/io.h>) 하여야 한다.
MegaCore standard pinout
MEGACORE AVR 64-PIN PINOUT Header File(pins_arduino.h)
위 과정이 성공적이 경우 Arduino의 메세지 창에 "스케치를 컴파일 중..." 메세지 가 표시되고 이어서 "업로드 완료." 메세지가 표시 된다.
Arduino 개발 환경에서 chip45boot2 GUI를 이용 하여 출력(.HEX) 파일을 Target Board에 다운로드 하기는 "AVR에 사용 하는 Hex File Down Load Tool과 Bootloader"을 참고 바랍니다.