이 블로그는 임베디드 컴퓨터를 이용한 장치(시스템) 개발과 원격제어에 필요한 지식을 공유 하기 위한 블로그 입니다.
실제 개발과 프로그램 예를 위하여 Microchip 사의 ATmega128를 사용한 보드와 Arduino Mega 보드(ATmega2560), Raspberry Pi, Raspberry Pi Pico, WiFi 모듈을 사용 합니다.

atmega128-optiboot-MPLAB-install

MPLAB에서 AVRDUDE를 이용하여 ATmega128에 Upload 하기

Microchip MPLAB X IDE에서 AVRDUDE를 이용하여 ATmega128에 Hex File을 Upload 하기





Microchip MPLAB® X IDE 환경 또는 아두이노(Arduino) 개발 환경에서 ATmega128 보오드를 개발 보오드로 사용 하기 위하여는 개발한 프로그램의 실행 File(Hex Format File)을 ATmega128에 Upload 하는 Tool(Uploader 와 Bootloader)이 필요하다.

여기서는 Microchip MPLAB® X IDE 환경과 아두이노(Arduino) 개발 환경에서 함께 사용 할 수 있는 optiboot Bootloader를 ATmega128에 설치 하고 사용 하는 방법에 대하여 설명 한다.

  • AVRDUDE를 이용 하기 위한 Reset 회로
  • optiboot Bootloader를 이용 하여 Hex File를 Upload 하는 Tool인 AVRDUDE는 UART 통신의 DTR 신호을 개발 보오드의 Reset 신호 제어에 사용 하기 때문에 개발 보오드의 Reset 회로가 아래 그림과 같이 구성 되어 있어야 한다. KHUEE Board는 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를 연결한다.
      • 주: Arduino Mega 2560 보오드는 USB - UART 변환 모듈을 내장하고 있기 때문에 별도의 회로 구성이 필요 없다.

  • AVRISP mkII를 사용 하여 ATmega128에 optiboot Bootloader 설치 하기
    • optiboot_atmega128_16MHz.hex를 다운로드 하여 적당한 위치에 저장 한다.
    • 참고자료: https://github.com/Optiboot/optiboot

    • 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 하기 위한 설정 예



  • Microchip MPLAB X IDE 환경에서 ATmega128에 Hex File을 Upload 하기
    • Microchip MPLAB X IDE 환경에서 ATmega128 보오드(또는 아두이노(Arduino) 보드)를 개발 보오드로 사용 하기 위한 준비
      • MPLAB X IDE를 설치 한다.
      • 필요한 경우 Arduino 개발 환경 Tool(Arduino IDE)을 설치 한다.
      • Arduino IDE를 설치하지 않는 경우에는 별도로 avrdude를 다운로드 하여 설치 하여야 한다.
        • "avrdude(Arduino IDE)"를 다운로드 하여 적당한 위치에 저장 한다.
        • 참고자료: https://github.com/avrdudes/avrdude

        • 다운로드한 File에는 avrdude.exe과 avrdude.conf File이 포함되어 있다.
        • c:\ 에 적당한 이름의 폴더를 만들고 다운로드한 avrdude.exe 과 avrdude.conf FIle의 복사 한다.
        • C:\avrdude\ 폴더에 복사한 경우 예: C:\avrdude\avrdude.exe C:\avrdude\avrdude.conf

      • ATmega 128 보오드를 연결 하고 장치 관리자에서 COM Port 번호를 확인 한다.
      • 아래 그림의 예에서 COM Port 번호는 12 번 임.


    • MPLAB X IDE에서 실행 파일(Hex Format File)을 Up Load 하는 Tool(avrdude)을 사용 할 수 있게 설정 하기
      • MPLAB X IDE를 실행 하고, "Projects 창"에서 "Project name"을 선택하고 마우스의 우측 버튼을 Click 하면, Project 관리 창이 열린다. 이 창에서 "Properties"를 Click 하면 "Project Properties" 창이 열린다.
      • "Project Properties" 창에서 "Execute this line after build" Enable을 체크하고, Command Box에 Build 종료 후 실행할 명령(Hex 파일을 AVR에 Up Load 하는 프로그램)을 아래 예와 같이 입력한다.
      • avrdude.exe File의 위치 예.
        • Arduino를 C:\Program Files (x86)에 설치한 경우 avrdude.exe File의 경로 예
        • C:\Users\chowk\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino18\bin\avrdude.exe 이다.

        • Arduino를 설치 하지 않은 경우 avrdude.exe File의 경로 예는 아래와 같다.
        • C:\avrdude\avrdude.exe

      • avrdude.conf File의 위치 예.
        • Arduino를 C:\Program Files (x86)에 설치한 경우 avrdude.conf File의 경로 예
        • C:\Users\chowk\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino18\etc\avrdude.conf 이다.

        • Arduino를 설치 하지 않은 경우 avrdude.conf File의 경로 설정 예
        • C:\avrdude\avrdude.conf

      • Command Box에 avrdude.exe, avrdude.conf File의 경로와 Arguments을 아래 예와 같이 입력 한다.
        • Arduino를 설치한 경우 Command Box에 입력하는 명령 예
        • C:\Users\chowk\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino18\bin\avrdude.exe -v -C "C:\Users\chowk\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino18\etc\avrdude.conf" -p atmega128 -c arduino -P COM12 -D -U flash:w:$(ImagePath)

        • Arduino를 설치 하지 않은 경우 Command Box에 입력하는 명령 예
        • C:\avrdude\avrdude.exe -v -C "C:\avrdude\avrdude.conf" -p atmega128 -c arduino -P COM12 -D -U flash:w:$(ImagePath)

          주: $(ImagePath)는 Upload할 Hex file의 경로임.


          아래 그림은 "Project Properties" 창에서 avrdude 사용을 위한 설정 예 이다.


    • ATmega128에 Upload 하기
      • 위와 같은 Build 옵션 설정으로 이제 Build 후 Hex File을 Upload 하는 명령이 자동으로 실행 되기 때문에 Build 명령을 실행하면 Build 후 Hex File이 자동으로 Upload 된다.
      • 만약 Build 후 자동으로 Hex File이 Upload 되지 않도록 하려면 Project Properties" 창에서 "Execute this line after build" 명령을 Disable 하여야 한다.
      • 만약 .Hex File은 정상으로 Upload 되고 프로그램이 자동으로 실행 되지 않는 경우(Reset 신호 전달 문제로 가끔 이런 문제가 발생 될 수 있다.)는 보오드의 Reset 스윗치를 누르면 프로그램이 실행 된다.

  • Arduino 환경에서 ATmega128에 Hex File을 Load 하기
  • Arduino IDE에서 ATmega128 보오드에 "스케치 -> 업로드" 명령으로 Hex File을 Load 하기 위하여는 ATmega128 보오드에 optiboot Bootloader를 설치 하고, ATmega128의 Hardware 정보(Clock 등 보오드 정보와 Pin 정보)를 Arduino IDE에 설정 하여야 한다.

    • optiboot Bootloader 설치
    • 이 페이지 위에 있는 "AVRISP mkII를 사용 하여 optiboot Bootloader 설치 하기"를 참고하기 바람.

    • Arduino IDE 환경에서 ATmega128 Board를 사용 하기 위한 설정
      • Arduino IDE을 실행 하고 Arduino IDE에서 "툴 -> 보드 -> 보드 메니저..." 명령을 실행 하면 보드 메니저 창이 열린다.
      • 보드 메니저 창의 "검색에 필터 하기... " 에 "MegaCore" 를 입력 하면 ATmega128 이 포함된 패키지가 표시된다. 이 패키지를 선택 하여 설치 한다.

    • ATmega128에 Hex File을 Load 하기
      • 툴 메뉴에서 보오드 정보를 다음과 같이 선택 한다.
        • 보드: "ATmega128"
        • BOD: "2.7V"
        • Clock: "16MHz external"
        • Compiler LTO: "Disabled"
        • 포트: USB-Seral 변환 장치의 COM 포트 번호로 맞춘다. (윈도우 [장치 관리자]에서 확인)
        • 프로그래머: "Atmel STK500 developement board"
      • ATmega128 보오드에서 실행 할 Progarm을 작성 하고 "스케치 -> 업로드" 명령을 실행 한다.
      • 위 과정이 성공적이 경우 Arduino의 메세지 창에 "스케치를 컴파일 중..." 메세지 가 표시되고 이어서 "업로드 완료." 메세지가 표시 된다.