마음 속 하늘은 항상 맑음~!

USBTinyISP 만들기. 본문

하드웨어

USBTinyISP 만들기.

파르셀수스 2014. 10. 9. 11:03

 이런저런 내용을 뒤지다가 새로운 것을 발견. AVR을 프로그래밍하는 도구로 AVR로 만드는 것으로 저렴하고 몇몇 프로그램이 지원된다. 아두이노도 지원한다는 이야기를 읽은 것도 같다. 1.0.5에서 부트로더를 굽는데 사용한다는 이야기가 있었다. 여튼 새로움과 삽질의 시작이었다.


 홈페이지 : https://learn.adafruit.com/usbtinyisp/overview


 일단 부품은 간단한데, 2.0리버전은 ATTiny2313과 74AHC125의 칩셋, 그리고 부수적인 부품들이 필요했다. 이 회로의 장점은 ATTiny2313을 이용해서 따로 인터페이스가 없이 USB통신이 가능한 것으로 가격이 저렴한 편. ATTiny2313과 ATTiny2313A은 약간 다르다. 하지만 USBTinyISP는 부가적인 기능을 사용하지 않아서 다행히 둘의 구분은 무의미하다. 일단 2313A는 가격이 2313보다 착하다. 부품리스트는 partlist라는 메뉴를 누르면 확인할 수 있고 맨아래에는 회로도가 있다.


 그리고 ATTiny2313A는 미리 프로그램되어 있어야 한다. 처음 만드는 사람들은 어디선가 칩에 프로그램을 업로드해야만 한다는 난점이 있다. 하지만 이미 만들어놓은 OpenProg를 이용해서 간단하게 프로그램했다. 이미 프로그래밍할 수 있는 기기가 있는데 왜 다시 만드는지는 모르겠다 =ㅅ=; 펌웨어 파일은 2.0버전용을 다운로드하면 되고 안에 폴더에 ISP라는 폴더의 main.hex를 사용하면 된다. fuse값은 makefile에 있다. 혹시나 다시 컴파일하는 것은 삽질로 이어진다는 교훈을 얻음. 만들어진 펌웨어를 쓰는게 정신건강에 좋다.


http://learn.adafruit.com/system/assets/assets/000/010/327/original/usbtiny_v2.0_firm.zip


 지원되는 프로그램은 avrdude라는 것이 별로도 있다. 상위버전(5.5이상)의 avrdude는 usbtiny를 지원한다. 최신 버전은 6.1이다. 그리고 윈도우즈답게 드라이버가 필요하다. 32비트 드라이버와 64비트가 같이 있는 것을 다운로드하면 된다. 리눅스는 따로 드라이버를 설치할 필요가 없다.


 avrdude의 다운로드는 이곳. 정식 사이트는 접속시간 초과 에러가 =ㅅ=;

 http://mirrors.zerg.biz/nongnu/avrdude/


 준비와 조립에는 문제가 없었다. 하지만 이제부터가 문제의 삽질이 시작 =ㅅ=; 문제의 핵심은 V-USB이란 라이브러리를 통해 소프트웨어 USB를 지원하다보니 신호안정성의 문제가 있었던 것. 회로도의 6번과 7번의 접속은 민감한 부분으로 만약 이 부분이 틀려지면 USB인식은 커녕 LED가 들어오지도 않는다. 그렇게 인식은 되었는데 몇번 명령을 보내면 avrdude가 에러를 뺐어내면서 불만을 호소한다.


 이 6번과 7번핀은 3.6V 제너다이오드를 통해 전압이 제한되는데, 만약에 레귤레이터로 3.6정도의 전압으로 동작한다면 그냥 저항만 연결하면 되는 부분이지만, 5V로 동작시키려한다면 꼭 필요한 부분이다. 그냥 연결만 되면 다행인데 제너다이오드를 1W급으로 구입하는 바람에 문제가 발생. 제너다이오드의 소비전력이 커지면 캐패시던스도 증가해서 신호를 제대로 보내고 받을 수 없게 된다. 캐패시던스는 높은 클럭을 가지는 신호의 적이랄까 그렇게 몇몇 다른 V-USB구현 회로를 보니, 0.5W이하를 사용하도록 권장하고 되도록이면 0.25W급을 써라고 되어 있었다. 헉 =ㅅ=; 다른 응용 구현을 보니 0.5W급 조차도 많은 문제를 발생시키고 있었다.


 다시 구입할려고 찾는 0.25W급은 다 SMD이고 '이런 망했어'라고 생각하고 있었는데, USB키보드는 만든 글에 다른 사람들이 댓글이 달렸는데, 키보드가 자주 인식 불량인데 풀업 저항을 1.5K에서 470으로 바꾸니 잘 된다는 내용이 똭. 얼른 따라해보니 확실하게 된다. USB의 대기시 표준 전류량을 어기는 방법이지만 동작이 목적이니 그냥 사용하기로 했다. 그렇게 다행히도 USB로의 통신은 백발백중이 되었다.


 이제 프로그래밍이 되는지 확인만 하면 될 것 같다.




 이 구성의 단점은 리눅스에서는 주기적으로 삐삑하며 장치의 인식이 반복된다는 것. USB로 데이터가 이동되고 있는 경우엔 문제가 되지 않는 것으로 확인.




 명칭이 USBtinyISP인데 만능기판에서 만들어진 것이라서 Tiny하지는 않게되었다; 전원분리 점퍼를 포함시켜야 하는데 빼서 훨씬 간단해졌고, 1.5저항들을 많이 사용했는데, 비슷한 값을 만들기 위해서 2.7k나 100을 병렬로 연결해서 좀더 지저분하다. USB 헤더 가까운 쪽에 띠가 있는 것이 제너 다이오드. 커넥터도 10핀이 표준인데 그냥 있는 12핀 헤더를 연결.

'하드웨어' 카테고리의 다른 글

USBTiny 실험.  (0) 2014.10.17
avr-gcc 4.9.2  (0) 2014.10.14
아두이노 전원 문제.  (0) 2014.09.27
간단한 순차점등 LED회로.  (2) 2014.09.22
아두이노를 이용한 원격 리모트 컨트롤.  (0) 2014.09.22