마소에서 안윤호님의 'Arduino 보드를 소개하며'라는 글을 읽고 흥미를 가지게 되었는데 인터넷에 관련 글들이 많이 있었다.  특히, Suapapa 님의 Arduino  에서는 기판제작에서 bootloader 심기까지의 과정을 자세히 보여 주었고 STK200 호환의 패러렐 ISP 를 사용하기위한 고급수준의 방법도 소개하였다.

이것 저것을 보다가 Digitypo님의 Bootloading for a board as an Arduino 를 읽어 보고선 나도 Avrmall 의 ATmega168 보드를 구입하여 여기에 Arduino 부트로더를 심어보고 싶어졌다.  명성높은 Arduino Diecimila 를 큰 맘먹고 구입하고, Avrmall ATmega168 Board 는 물론 부트로더를 Burnning 하기위해 P-AVRISP 도 같이 구입하였다. 

사용자 삽입 이미지

Arduino Diecimila (왼쪽) 와  Avrmall ATmega168 Board V2.1 (오른쪽)


사용자 삽입 이미지

Arduino Diecimila 밑면엔 이탈리아 지도가 그려져 있다.


사용자 삽입 이미지

패러렐포트를 사용하는 P-AVRISP


앞의 Digitypo 님께서 사용한 USBISP V3.0 보다는 저렴하다.  하지만 이것은 패러렐포트용 이라서 PC 에 패러렐포트가 붙어 있는지 확인해야 한다.  MrKiss 님의 USBTiny  에서 USB용 ISP를 자작한 내용을 볼 수 있다.  USBTinyISP 는 ATTINY2313 칩을 사용하는데 MrKiss 님은 이 칩을 프로그램하기위해 다른 ISP를 사용하였다고 한다.  Arduino 사이트에 Parallel Programmer 의 자작방법이 나와 있지만 그냥 P-AVRISP 를 사버렸다.  그런데 지금보니 비슷하게 생긴 youknow 님의 ISP 가 LED 도 있는 것이 더 좋아 보인다.


사용자 삽입 이미지

Avrmall ATmega168 Board 의 ISP 연결 사진

 

컴퓨터가 책상밑에 있기 때문에 같이 딸려 나오는 20cm 짜리 케이블로는 어림도 없었다.  확장케이블을 따로 구매했는데 10pin x 1m 짜리밖에 없었다.  보드의 커넥터는 6pin 이지만 10pin 용 케이블을 잘 사용하고 있다.


Avrmall ATmega168 Board V2.1 는 Digitypo님이 선택했던 것에 비해 더 저렴하고(\12,000) 빠른 클럭의 보드이지만 serial chip 이 없으므로 RS-232C 를 직접연결할 수 없다.  때문에 RS-232C <-> RS-232.TTL 변환기 또는 USB <-> RS-232.TTL 변환기가 있어야 Arduino 환경에서 작성한 코드를 시리얼로 업로드 할 수 있다.  Digitypo님은 DIP232RL V1.0 을 사용하였고 인터넷을 보니 더 저렴한 것도 있었는데 집에 있던 USB <-> RS-232C 를 분해하여 쓸 생각으로 아무 것도 구매하지 않았다.


arduino.cc 다운로드 페이지 에서 윈도용 Arduino 환경을 다운받아 적당한 위치에 압축을 풀면 바로 실행을 할 수 있다.

사용자 삽입 이미지

Arduino 개발환경 초기화면


Arduino Diecimila 보드를 USB 로 연결하니 FT232칩 관련 드라이버를 설치하는 화면이 나오고 난 후 COM 포트가 새로 생겼다.  Arduino 환경에서 새로 생긴 COM 포트를 사용한다.

사용자 삽입 이미지

Arduino 개발 환경에서 COM7 이 추가된 모습


Sketch 로 샘플 소스를 열고 Upload to I/O Board 아이콘을 클릭하면 잠시 후 Arduino Diecimila 에서 실행되는 것을 볼 수 있다.

사용자 삽입 이미지

Sketch 소스 (LED 점멸)


사용자 삽입 이미지

Arduino Diecimila 의 LED가 켜져있는 사진


이제 Sketch 로 작성된 것을 Avrmall ATmega168 Board 에서도 같은 방식으로 돌려보겠다.  우선, Avrmall ATmega168 Board 에 P-AVRISP 를 사용하여 Arduino 부트로더를 심어야 한다.  Avrmall ATmega168 Board 의 clock 은 Arduino Diecimila 나 Arduino Mini 와 다르게 20MHz 로 되어 있으므로 이것에 맞게 새로 빌드한 부트로더와 보드설정을 사용한다.

arduino 개발환경이 설치된 곳의 hardware 디렉토리에 boards.txt 라는 파일이 있다.  맨 끝에 다음을 추가한다.
##############################################################
avrmall.name=Avrmall ATmega168 Board V2.1

avrmall.upload.protocol=stk500
avrmall.upload.maximum_size=14336
avrmall.upload.speed=19200

avrmall.bootloader.low_fuses=0xff
avrmall.bootloader.high_fuses=0xdd
avrmall.bootloader.extended_fuses=0x00
avrmall.bootloader.path=atmega168
avrmall.bootloader.file=ATmegaBOOT_168_avrmall.hex
avrmall.bootloader.unlock_bits=0x3F
avrmall.bootloader.lock_bits=0x0F

avrmall.build.mcu=atmega168
avrmall.build.f_cpu=20000000L
avrmall.build.core=arduino
##############################################################

f_cpu 값이 20MHz 에 맞추어 졌고 bootloader.file 에 지정된 파일명이 Arduino Diecimila 의 설정과 다르다.  아래 ATmegaBOOT_168_avrmall.hex 를 다운로드 하여 hardware\bootloaders\atmega168 디렉토리에 복사한다.
ATmegaBOOT_168_avrmall.hex

Avrmall ATmega168 Board V2.1 용 부트로더


참고로, 이 hex 파일은 atmega168 디렉토리의 Makefile 을 아래와 같이 고친 후 cygnus 쉘에서 make avrmall 을 실행하여 만든 것이다.
##########################################
#AVR_FREQ = 16000000L
AVR_FREQ = 20000000L

avrmall: TARGET = avrmall
avrmall: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>3' '-DNUM_LED_FLASHES=3'
avrmall: $(PROGRAM)_avrmall.hex
##########################################

사용자 삽입 이미지

Arduino 개발환경 메뉴에 Avrmall 보드가 표시된다.


P-AVRISP (유저가이드)는 Arduino 의 Parallel Programmer (회로도) 와 다른 종류 이다.  P-AVRISP 를 Arduino 환경에서 사용할 수 있도록 hardware 디렉토리의 programmers.txt 파일의 맨 끝에 다음을 추가한다.
#####################################
stk200.name=P-AVRISP(STK200)
stk200.communication=parallel
stk200.protocol=stk200
#####################################

사용자 삽입 이미지

Arduino 개발환경 메뉴에 P-AVRISP 가 표시된다.


이제 P-AVRISP 를 연결해서 Avrmall ATmega168 V2.1 에 arduino bootloader 를 burnging 할 차례다.  Arduino 환경의 Tools / Board 에서 Avrmall ATmega168 Board V2.1 을 선택한 후 Burn Bootloader 에서 w/ P-AVRISP(STK200) 을 선택한다.  Digital 13번(PB5) 핀에 LED 를 연결해 놓았다면 LED가 깜박이는 것으로 부트로드가 버닝되는 순간을 확인할 수 있다.

사용자 삽입 이미지

다운로드 되는 것을 확인하기위한 LED 연결


그런데 LPT1 을 열 수가 없다는 에러가 발생하면 별도의 드라이버(giveio.sys)를 설치해주어야 한다.    hardware\tools\avr\bin 디렉토리에 가면 install_giveio.bat 가 있다.  이것을 탐색기에서 더블클릭 하여 실행한다.  아래는 실행결과를 보기 위해 도스창을 열어서 실행한 화면이다.  
사용자 삽입 이미지
 
패러렐포트 사용을 위한 giveio.sys 설치



Guide to the Arduino Mini 의 Connecting the Arduino Mini and a regular Arduino 에 나온대로 가지고 있는 Arduino Diecimila 보드를 USB<->RS-232.TTL 변환기 대용으로 사용해 보았다.(리셋핀 연결은 필요없다)  Arduino 환경에서 Upload 하는 순간에 맞추어 Avrmall ATmega128 Board 의 Reset 버튼을 눌러줘야 한다.  Arduino Diecimila 보드에 내장된 RX, TX LED가 깜박여서 업로드 되고 있음을 확인할 수 있다.
 
사용자 삽입 이미지

Arduino Diecimila 를 USB<->시리얼 컨버터로 사용


이제 Arduino 가 두 개 생겼다.  하나는 Arduino Diecimila 정품, 하나는 Arduino Mini 짝퉁(?).  하지만 더 빠르고(16MHz -> 20MHz) 귀여운 Arduino 이다.



신고


Posted by tinysun


티스토리 툴바