ATmega168 Board V2.1 에 아두이노 부트로더 심기



뿌빵루의 아두이노 따라하기

2. 작은태양님의  Arduino 시작하기 따라하기
3. 수아파파님 아두이노 만들기 (DIY-PCB 1/3 : 토너전사DIY-PCB 2/3 : 에칭DIY-PCB 3/3 : 드릴링과 땜질




ATmega168 Board V2.1 에 아두이노 부트로더 심기

1. 작은태양님의 Arduino 시작하기

   무엇인가 처음 배우고자 할 때 방정식은 무작정 서핑과 과도한 책구매로 이어집니다.
   그리고 통장의 잔고 바닥.
   무작정과 과도한이 어우러져 겉표지도 들춰보지 않고 쌓이는 책들과
   시간이 지나면 잊혀져간 알지도 못하는 즐겨찾기들...  비어버린 통장의 잔고...
   아... 그러나 버릴 수 없는 욕심을 누구 탓하겠습니까?
   아두이노를 공부하기로 한 이상, 다양한 아두이노 버전(?) 들을 갖고 싶은 욕구는
   누구나 있을 것입니다. 그렇습니다. 이미 Arduino  Duemilanove 를 구입하였고,
   M168 MINI 를 통해서 업로드도 해보았습니다. 그럼 Arduino USB 를 구입할 것인가?
   아니면??
   따라하기식의 공부계획을 찬찬히 살펴보면 다양한 아두이노를 갖고 싶다는 욕구를
   짐작하실 수 있을 겁니다. 그렇습니다. 걍 돈주고 쉽게 사는 것도 해보고, 다른 제품을
   아두이노로 만들어보고, 마지막에는 손수 직접 DIY 해보고자 하는 계획입니다.
  
   계속 길어지는 서설.

   이번에는 avrmall 에서 구입한 ATmega168 Board V2.1 에 Aruino 부트로더를 심어서
   작꼬 예쁜 빨간색의 아두이노를 만들어 보겠습니다. 이 글은 전적으로 작은 태양님의 글을
   보고 따라하는 방법을 택하겠습니다.
   예쁘고 조그마한 ATmega168 Board V2.1 는  어떻게 생겼을까요?

 설명을 안드려도 오른쪽 아래에 있는 깜찍이가 ATmega168 Board V2.1  이겠죠?
 확대해 보면 요렇게 생겼습니다.

 
 네네~ 사진이 아주 크게 잘나왔네요.

기본 스펙 :◈ 사용 CPU : ATmega168-20AI
◈ 사용 CLOCK : 20MHz 사용
◈ 1 채널 RS232통신 가능(RS232보드 연결시 가능)
◈ ATMEL ISP 포트 지원
◈ All PORT Pin 확장 지원
◈ 동작 전원 : 2.7 ~ 5.5V 에서 동작(전원 Cable 제공됨)
◈ 보드 크기 : 40mm(가로) * 25mm(세로

위 내용은 ATmega168 Board V2.1의 기본스펙으로 avrmall 에서 복사해 온 내용입니다.
자 그렇다면 이제 작은태양님을 본격적으로 따라해 볼까요?
     
2. 부트로더
   김춘수 님의 '꽃'이라는 詩가 생각 나네요. '아두이노'라고 이름을 불러주었을 때
  하나의 생명이 되는 것처럼, 우리가 ATmega168 Board V2.1 를 아두이노로 사용하기 위해서는
  부트로더를 심어야 한답니다.
  '심다' 라는 표현이 좋습니다. cd 를 구울 때 '굽다' 처럼 상황에 딱 맞는 단어입니다.
  국어사전에  '심다','굽다' 라는 단어의 뜻이 더 추가되어야 하지 않을까요?
  그렇다면 부트로더란? 무엇인가? 아두이노 스토리 까페에
  워리님의 강좌를 보면 자세히 설명되어 있습니다.

  워리님의 강좌를 보면, 부트로더가 하는 역할은 USB 와 연결된 상태에서 우리가 짠 프로그램을
  플래시메모리에 저장하는 역할은 한다. 그래서 처음 한번은 isp 로 부트로더를 심어주어야 하며,
  아두이노 컴파일러를 다운받으면 부트로더 프로그램이 들어있따. 그래서
   http://arduino.cc/en/Main/Software  들어가면 최신버전을 다운받을 수 있고, 압축을 푼
   폴더, 즉 다음의 경로에  \arduino-0019\hardware\arduino\bootloaders 들어가면
   디바이스별로 들어있다.

 너무 간단명료해서 머리속에 쏙쏙 들어오는 강좌입니다. 모두들 한 번씩 정독하면 좋을것 같습니다.
 제가 다운받은 버전은 0019 입니다.

 3. NT-ISP


 
 위 사진은 부트로더를 심기위해 구입한 NT-ISP 이며, 그 아래 사진은
NT-IDC 6핀 케이블입니다.  두 제품 다 디바이스 마트에서 구입하였습니다만,
NT-IDC 6핀 케이블의 길이가 너무 짧아(20cm) 도저히 컴퓨터 본체에 연결을 할 수가 없었습니다.
물론 연결을 할려면 할 수도 있었겠지요. 그러나 책상 밑에 있는 본체를 책상 위로
올릴 생각이 절대 없었던 저로서는 어찌할 바를 몰라 디바이스 마트에 문의를 하였고
디바이스 마트에서는 답을 주었습니다.
답변을 듣고 사이트를 검색해 보았습니다.
10핀 케이블을 6핀으로 만들면 되는 일이지만 클림핑툴이 없었기에 과감히 주문메세지에
6핀으로 찝어 달라고 요청을 했습니다. 친절하게도 흔쾌히 응해주셔서 다시한번 감사드리며
사진에서 보기에도 책상위를 한번 휘감아도 될 만큼 길게 보이지 않습니까?

 그런데, 작은태양님께서는 P-AVRISP 를 사용하셨습니다. P-AVRISP 는 avrmall.com 에서
판매하는 것 같습니다만, 작은태양님께서 LED 가 있는 것이 더 좋아보인다는 말씀에
저는 NT-ISP 로 구입을 해버렸습니다. 예를 들어 주셨던  youknow 님의 ISP 는 링크가 잘못되어서
확인할 수 는 없지만 NT-ISP 일 것 같다는 느낌이 들었습니다.

각설하고, 그렇다면 케이블과 NT-ISP 를 연결해야 하는데요,
디바이스마트의 NT-ISP 의 링크를 따라가면 NT-ISP 관련 자료를 다운받을 수 있습니다.
그 자료의 일부를 캡쳐한 사진입니다.


ISP 관련해서 설명도 아주 잘나왔지요? 원래 아래의 핀형만 캡쳐할려다가 설명이 잘 나온관계로...

ATmega168 Board V2.1 의 사진을 자세히 보면 2열 3핀헤더가 보입니다. 
깨알만한 글씨를 자세히 보면 아래와 같습니다.
 VCC
MOSI 
 GND
 MISO
SCK 
/RST 

 ATmega168 Board V2.1 의 배열을 우측으로 90도 돌려보면 N-ISP 6핀 배열과 동일함을 알 수 있습니다. 
6핀케이블을 유심히 보면, 빨간선이 보이는데요 이 빨간선이 1번선으로 NT-ISP 및
ATmega168 Board V2.1 보드의 1번핀에 맞추어 연결하면 됩니다.

 (사진 찍을 때는 20cm 케이블도 괜찮군요)
 
ATmega168 Board V2.1 보드는 6핀 헤더 양쪽 끝에 아래와 같이 표시되어 있습니다.

2 ■ ■ ■ 6                 
1 ■ ■ ■ 5

그렇다면 NT-ISP 는 어떤 핀이 1번 핀일까? 그래서 빨간선을 연결해야 하나 고민을 하게 되었습니다.                  
ATmega168 Board V2.1 의 1번핀이 MISO 이니, 당연히 NT-ISP 의 1번핀도 MISO 아닐까요?
그렇다면 ISP 6핀 그림을 좌로 90도 돌려놓으면 정확이 맞아 떨어지겠네요.
이렇게 해서 위와 같은 사진이 되었습니다.
자~ 그러면 이제 본격적으로 부트로더를 심어볼까요?

4. 부트로더 심기.
   아래의 내용들은 작은태양님의 내용을 그대로 복사하겠습니다. 
 아직 이 부분에 대해 설명하기에는 지식이 턱없이 부족한지라 일단 따라하기로 진행을 한 후에
 추후 공부를 통해 보충을 하려고 합니다.  

4-1. Avrmall ATmega168 Board V2.1 보드 설정
arduino 개발환경이 설치된 곳의 hardware 디렉토리에 boards.txt 라는 파일이 있다(hardware\arduino\)
 맨 끝에 다음을 추가한다.
##############################################################
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
##############################################################



 4-2 . ATmegaBoot_168_avrmall.hex 파일의 복사

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

☞ Avrmall ATmega168 Board V2.1 용 부트로더 다운로드 :   ATmegaBOOT_168_avrmall.hex
 

 
 
 

4-3. 패러럴 포트 프로토콜 설정

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

#####################################
stk200.name=P-AVRISP(STK200)
stk200.communication=parallel
stk200.protocol=stk200 
#####################################

 

위 수정소스와 사진을 자세히 보니

avrmall.name=Avrmall ATmega168 Board V2.1 와
stk200.name=P-AVRISP(STK200)

name Porperty 가 Tools>board 와 Tools>burn bootloader 에 목록으로 나오는 군요...
프로그래밍 소스에서 클래스를 생성하고, 각각의 property 를 설정해주는 것과 비슷한것 같습니다.

위와 같이 작업을 하고, 브레드보드에 Avrmall ATmega168 Board V2.1 를 아래의 그림처럼 설치했습니다.

 
 
 
 9V 건전지 스냅에서 전원을 연결하고 7805 레귤레이터를 통해 전원을 공급합니다.
NT-ISP 는 컴퓨터의 패러럴포트에 연결하고 건전지스냅의 스위치를 올리고,

Tools > burn bootloader 를 선택하면 아래와 같은 메세지가 나오면서

잠시기다리면  Done burrning bootloader. 라는 메세지가 나오고 기쁨의
탄성이 저절로 나오게 됩니다.  burning 되면서 뒤에 nt-isp 를 보면
led 가 무쟈게 깜빡거립니다.
 
 

이로써 작은태양님처럼 ATmega168 Board V2.1 를 이용하여 아두이노를 만들어 봤습니다.
이제 ATmega168 Board V2.1 에 sketch 를 해볼까요?
 
5. 김춘수님의 '꽃'

   제가 가장 좋아라 하는 詩 중에 하나입니다만,,, 

  ATmega168 Board V2.1 가 부트로더를 통해 꽃이 되었고, 이제 그 꽃에 향기를 불어주는 일만
 남은 것 같습니다. 지난 글에서 pinMode 를 13으로 해서 digitalWrite 함수를 통해 led 를
 깜박이게 했는데요, 이번에도 ATmega168 Board V2.1 를 이용해서 동일하게 해보겠습니다.
 작은 태양님께서는 USB<->RS-232.TTL 변환기  대용으로 Arduino Diecimila 를 사용하셨는데요,
 저는 지난 시간에 사용했던 DIP232RL V1.0 를 통해 업로드를 해보겠습니다.
 아래 사진은 브레드 보드에 세팅한 사진입니다.

 
 처음에는 led 를 어느 핀에 연결해야 하는지 막막했습니다.
Arduino MINI 처럼 13핀이 보이는 것도 아니고요,,, 그래서 여기저기 서핑을 하다가
다음의 주소에서 발견할 수 있었습니다.



PB5 핀이 digital 13 핀과 매핑되는군요.

네, 아래의 동영상은 소스를 업로드 하는 과정을 동영상으로 촬영했는데요,
upload 하면서 가볍게 reset 스위치를 눌러주시는 것을 잊지 마시고요
(ATmega168 Board V2.1 에는 reset 스위치가 이쁘장하게 또아리를 틀고 있습니다. )

1초의 delay 를 준 소스를 3초로 변경해서 재 업로드 하는 영상입니다.


이렇게 해서, 길고도 긴
작은태양님의 '아두이노 시작하기' 를 따라해 보았습니다.
작은태양님께서 ATmega168 Board V2.1 를 아두이노를 만드는 과정을
뛰어난 필력으로 작성해 주셔서 어렵지 않게 따라할 수 있었습니다.
작은태양님께 감사드립니다.

부품 구입부터 일련의 과정을 이렇게 한편의 글로 만든다는 것이 그리 쉽지는 않군요.
제 주업이 아니라서 그런지 몰라도...
아니어서,
이렇게
글을 마치려는 가슴에 유난히 큰 미소가 자리잡고 있습니다.



댓글

이 블로그의 인기 게시물

4,5,6 띠 저항의 색띠를 읽는 법(띠저항 값)

수지에서 인천공항 리무진 버스 (인천공항버스정보)(2022년3월업데이트)

수지에서 김포공항 리무진 버스 ( 2022년 3월 업데이트 )