본문 바로가기

Electronics

마이크로 콘트롤러에 프로그램을 넣기 위해서~

지난번 마이크로 콘트롤러 전반적인 소개에 이어 이번에는 마이크로 콘트롤러에 프로그램을 집어 넣는 하는 장비인 ISP(In System Programmer)이야기를 해보기로 하겠다.

먼저소개한 AVR이라는 마이크로 컨트롤러에 프로그램을 업로드 하기 위해서는 ISP라는 장치를 쓴다. 인 시스템 프로그래머는 말 그대로 시스템 안에서 프로그램을 업로드 할 수 있도록 해주는 장비다.

예전에는 프로그램을 바꾸려면 칩을 일일이 뽑아서 프로그래머라는 비싼 기계에 다시 꽂아서 프로그램을 업로드 해야 했었지만 요즘에는 그냥 만든 장비에 그대로 꽂아 놓은채 커넥터만 꽂아서 프로그램을 업로드 할 수 있다.  AVR 시리즈의 마이크로 컨트롤러가 그런 기능을 제공하기 때문에 가능해진 것이다.

물론 장비를 만들때 프로그래밍 용 포트를 미리 마련해 두었을때에 한 해서 가능한 일이다. 보통 6핀이나 10핀의 포트를 쓴다. 10핀도 쓰는 핀은 6핀이나 같다. 어쩌다가 르리 됐는지는 몰라도 두가지 포트가 혼용되어 쓰이는 바람에 ISP장비에도 두 개의 포트가 같이 달려 있는 경우가 많다.

마이크로 컨트롤러용 프로그램은 컴퓨터에서 작성해야 되기 때문에 ISP는 컴퓨터와 마이크로 컨트롤러가 들어간 보드 사이를 연결 해서 프로그램을 업로드 할 수 있도록 해주는 것이다. ISP중에는 시리얼 포트를 사용하는 것도 있고 USB포트를 사용하는 것도 있다. 요즘은 노트북을 많이 써서 USB 포트 밖에 없는 컴퓨터가 많아서 USB형이 대세가 아닌가 싶다. 심지어 내 데스크 탑에도 시리얼포트, 패럴렐 포트가 없으니까  말이다.

사실 내가 오늘 USBTinyISP라는 프로그래머를 만들었다. 원래Ladyada.net이란 사이트에 올라있고, 판매까지 하는 것인데 오픈소스 하드웨어라서 모든 제작법과 회로도 기판레이아웃이 공개되어 있다. 그곳에서 파는 키트를 사서 만든면 인쇄회로 기판이 들어 있어서 만들기 편하지만 미국에서 주문을 해야 하는 관계로 배송비 등이 부담스러워 직접 만들려고 맘먹었는데, 마음 먹은 후로 참 완성까지 참 오랜 시간이 걸렸다.

Ladyada.net은 MIT를 나온 리모 프라이드(Limor Fried )라는 여자 엔지니어가 운영하는 여러가지 전자회로에키트를 소개하는 사이트인데, 최초의 프로그래머인 Ada Lovalace에서 따온 사이트명이 아닌가 싶다. AVR이나Arduino에 관한 강좌도 올려져 있고, 각종 키트의 제작법이 아주 상세하게 올려져 있어서 예전 007제작집을 보는 기분으로자주 들르고 있고, 전자회로 공부에 아주 큰 도움이 되는 사이트다

내가 로봇을 만들어 보려고 마이크로 컨트롤러 공부를 시작하고 나서 가장 궁금했던 부분이 ISP니 JTAG이니 FTDI케이블  USB시리얼변환 케이블 등 컴퓨터와 마이크로컨트롤러 보드를 연결하는 장치들이 도대체 정확히 무엇을 하고 서로 어떻게 다른지, 서로 대체 되는건지 아닌지 그런것들이 궁금했다.

왜냐하면, 잘 모르고 다 샀는데 알고보니 중복되는 것이라든가 하면 또 괜히 열받게 되니 말이다. 게다가 USB시리얼변환 케이블과 FTDI TTL케이블이란 것이 둘다 USB에 꽂는 것은 같아서 반대쪽 끝부분만 약간 다른것 같아 보여서 하나만 사도 될 듯 해보였다. 그러나 결국 둘 다 사게 되었지만 말이다. --;

Ladyada.net에 보면 MiniPOV라는 LED의 잔상을 이용한 이미지 표시장치 키트가 올려져 있다. 그것을 만들려면 Attiny2313이라는 천원 조금 넘는 저렴한 AVR 마이크로 컨트롤러를 쓴다. 그런데 그 키트는 시리얼 포트가 달려 있어서 컴퓨터에 연결하면 바로 프로그램을 다운로드 할 수 있는 것이었다.

그 키트는 부폼도 몇개 안쓰는데, 그 말로만 듣던 인시스템 프로그래밍을 자체로 구현하고 있는게 아닌가? 거기서 부터 나의 방황은 시작되었다. 뭔가 싸게 할 수 있을 것 같은데 거기에 돈을 들이기는 정말 아깝지 않은가. USPTinyISP라는 ,오늘 내가 완성한 ISP의 키트는 adafruit.com이라는 ladyada가 만든 판매사이트에서 22달러 밖에 안하는데, MiniPOV를 보면서 왠지 조금만 들여다 보면 프로그래머를 안사도 될 것같은 생각이 들고 만 것이다.

그래서 MiniPOV를 만들다보니 결국 시리얼 포트가 없는 나는 USB시리얼 변환 케이블을 사게 되었다. 그걸 쓰니 AVRDUDE라는 프로그램을 써서 내가 만든 프로그램을, 정확히는 고치기만 한 프로그램을 Attiny2313이란 칩에 업로드를 해볼수 있었다. 내가 해본 최초의 마이크로 컨트롤러 프로그램 업로드였다.

POV는 Persistance of Vision의 약자인데, 그냥 보면 일렬로 배열된 LED들이 그냥 반작거리기만 하고 있지만, 그걸 자우로 휘저으면 글씨나 그림이 보이는 장치를 말한다. Adafruit.com에서는 그걸 자전거 바퀴에 달 수 있도록 만든 Spoke POV 키트도 판다. 물론 제작법도 올려져 있다. 다만 인쇄회로 기판이 없으니 만들기가 드러울 뿐이다.

아무튼, MiniPOV에서 LED들을 빼보니 이게 바로 프로그래머가 아닌가?  마침Ladyda.net의 포럼에도 나와 같은 생각을 한 사람이 있었고, 그게 이미 쓰이고 있는 DASA라는 코드명으로 불리우는 저렴한 프로그래머였다. 부품이래야 제너다이오드3개와 저항 3개만 있으면 땡이다. 시리얼포트에서 오는 전압이 10V정도가 되어 그걸 단순히 제너아디오드를 써서 마이크로 컨트롤러가 쓰는 5V이하로 잘라 주기만 하는 방식이다.

그렇게 만든 프로그래머로 결국 힘겹게 arduino 부트로더를 구울수가 있었고, USBTinyISP에 들어가는 마이크로 컨트롤러도 구워서 오늘 그걸 완성하게 된것이다. DASA와 USBTinyISP는 속도가 그야말로 천지차이가 난다. 10초 대 20분의 시간차가 나니 한번 만들어 볼만 하다.

아르뉘노 부트로더이야기도 나왔는데, 저 이야기도 하자면 사연이 아주 길다 --; 다음에 날잡아서 하기로 하겠다.

USB시리얼변환 케이블은 그렇게 사게되었는데, 그 전에 아르뒤노도 자작을 하려니 프로그래머가 없어서 부트로더를 구울수가 없으니 아르뒤노보드를 미국에서 주문하면서 FTDI라는 케이블도 사게되어서 결국 고민하던 케이블은 두개 다 사게되었다.

POV의 가능성을 먼저 알아보았더라면, 아르뒤노 보드를 미국에서 안사도 되었을 것을 아깝다. 사실 뭐가 먼저인지 지금 생각해보니 잘 기억도 잘 안난다. 몇 달도 안됐는데 벌써 기억이 가물가물하다.

아무튼 처음 시작을 한다면, Minipov를 먼저하나 만들어서 그걸 dasa로 이용하여 USBTinyISP에 들어갈 마이크로 컨트롤러를 프로그래밍 한 다음, 그걸로 아르뒤노 부트로더를 구우면 순서가 딱 맞는다. 물론 이때 시리얼 포트가 있는 컴퓨터가 있다면 엄한 USB시리얼 변환 케이블을 하나 안사도 된다. 그 후에는 별로 쓸일이 없기 때문이다.

dkfmenlsh Ladyada.net은 MIT를 나온 리모 프라이드(Limor Fried )라는 여자 엔지니어가 운영하는 여러가지 전자회로에키트를 소개하는 사이트인데, 최초의 프로그래머인 Ada Lovalace에서 따온 사이트명이 아닌가 싶다. AVR이나Arduino에 관한 강좌도 올려져 있고, 각종 키트의 제작법이 아주 상세하게 올려져 있어서 예전 007제작집을 보는 기분으로자주 들르고 있고, 전자회로 공부에 아주 큰 도움이 되는 사이트다

아르뒤노 보드에 부트로더를 굽기만 하면, 그 후에는 일반 USB케이블만 있으면 되고, 아니면 아르뒤노 보드에서 USB기능을 뺀 경량 보드를 만든다면 그때 바로 문제의 FTDI USB-Serial TTL케이블이 필요한 것이다. 나중에 알고 보니 그 놈은 그냥 USB시리얼 변환 케이블과는 어떻게 해도 호환이 불가능한 놈이었다. 일반 USB시리얼변환 케이블은 +15v와 -15v를 오락가락하는 신호지만 usb-Serial TTL케이블은 0v와 5v 사이의 신호이기 때문이다.

USB-Serial TTL은 USB - 232TTL이라고도 부르고 USB to UART 라고도 부른다. Serial이라는 말이 RS-232C라는 표준 통신방식을 일컫는 말이기때문이다. 그 RS-232C방식의 신호를 0~5v사이로 바꾼것이 TTL신호라 부르는 것이고, 마이크로 컨트롤러에서 나오는 USART라는 포트가 TTL신호의 전압을 가지고 있으며 그걸 전압만 -15~+15v로 바꾸면 그것이 시리얼이라고 부르는RS-232C신호이고 그걸 또 USB신호로 바꿔 주는 것이 저 케이블인 것이다.

FTDI USB-Serial TTL케이블은 마이크로 컨트롤러의 신호인 5V신호를 그대로 받아서 USB방식으로 변환해주는 케이블이라서, 마이크로 컨트롤러와 컴퓨터간의 통신시에 유용하게 쓰인다. 통신이라 함은, 예를 들어 프로그램 상에 시리얼 포트를 통해 출력을 하도록 해주는 Serial.print명령을 쓰면 마이크로 컨트롤러의 내부 동작 상황을 컴퓨터 화면상의 아르뒤노 프로그램이나 윈도우즈 기본 내장 된 통신프로그램인 하이퍼 터미널로 볼 수 있다.

그리고 아르뒤노 부트로더만 설치된 후에는 ISP가 필요없이 위에서 말한 통신과 함께 USB케이블이나 FTDI-TTL케이블 만으로 프로그램 업로드 까지 할 수 있는 것이다. 그리고 부트로더가 없이는 아르뒤노의 개발 환경을 제대로 쓸수가 없다. 그러니 아르뒤노의 시작에는 부트로더가 필수적인 것이다. 메모리가 정 부족할 때는 부트로더 자리까지 아끼려고 부트로더 없이 프로그래밍 하는 편법도 있긴하다.

오래전일을 떠올리면서 글을 쓰다보니 뒤죽박죽이다. 나중에 사진을 추가해서 좀 알아보기 쉽게 해야겠다.