개발 관련/아두이노,IOT

Attiny85 에 아두이노 부트로더 올리기 + 삽질기.

snoworca 2014. 10. 7. 03:13


우선 해외 사이트 중에 Attiny85 에 아두이노를 올리는 것에 대해 자세히 나와있는 아주 좋은 포스팅이 하나 있다.

http://highlowtech.org/?p=1695


  하지만, 이 포스팅을 보고 순서대로 따라해 보았지만 동작하지 않았다.

  대략 원인은 위 포스팅에 나와있는 아두이노 우노 R2 에서는 잘 올라가지만 직접 테스트 해본 아두이노 우노 R3 에서는 문제가 발생하는 것으로 예상하고 있다. 물론 아두이노 (호환)나노, 아두이노 (호환)미니 에서도 동작하지 않았다.


  위에 링크로 올린 http://highlowtech.org/?p=1695 에서는 아주 간단한 방법으로 부트로더도 올리고 Blink 예제도 올리고 있지만, 앞서 언급한대로 잘 되지 않으므로 정공법으로 부트로더를 올리고 스케치 프로그램을 올리는 방법에 대하여 설명하겠다



(이 포스팅은 아두이노 IDE 버전 1.0.x 기준입니다. 아두이노 IDE 버전 1.6.4 이상 쓰시는 분들은 http://www.dev.re.kr/81 이 주소로 이동 바랍니다.)



첫 번째로 라이브러리 설치 방법에 대하여 소개하겠다. 

이 부분은 매우 간단하다. 


1. 우선 Attiny85, 84, 44 를 지원하는 라이브러리를 다운받아야 한다.

    라이브러리는 이 곳에서 받을 수 있다. 

    https://github.com/damellis/attiny/

  

    아두이노 IDE 1.6.x 버전은 아래 링크에서 받아야 한다. 

    https://github.com/damellis/attiny/tree/ide-1.6.x/attiny/avr


   또는 아래 링크를 클릭하여 압축된 master 브런치 파일을 바로 받을 수 있다.

    https://github.com/damellis/attiny/archive/master.zip


    아두이노 IDE 1.6.x 버전 이상

    https://github.com/damellis/attiny/archive/ide-1.6.x.zip

 

    그냥 위 링크를 선택하여 받으면 된다.


2. 두 번째로 받은 라이브러리 파일 압축을 풀고 그 내부에 있는 attiny 폴더를 아두이노 툴의 hardware 폴더에 옮긴다.

     만약 윈도우의 경우 hardware 폴더는 다음과 같은 경로에 있다.

    아래 스크린 샷은 hardware 폴더 내에 attiny 폴더를 이동시킨 것 까지 보여주고 있다.

    


    맥의 경우 아래처럼 실행 파일에서 마우스 커서를 대고 오른쪽 버튼을 누른다음 패키지 내용 보기를 선택한다.

    파인더가 열리면서 내부를 들여다 볼 수 있다.

  


  그럼 윈도우와 마찬가지로 hardware  경로에 접근하여 그 곳에 attiny 폴더를 이동시키도록하자.

  


   아두이노 IDE 1.6.x 버전은 경로가 조금 다른데,  Contents -> Java -> hardware 폴더에 attiny 폴더를 붙여넣으면 된다.



  이제 아두이노 툴(IDE) 를 재시작 시키고 상단 메뉴의 도구(tools)->보드(board) 에 들어가면 ATtiny 가 지원되는 것을 볼 수 있다.

  



  여담이지만, Attiny85 는 펌웨어를 올릴 수 있는 프로그램 메모리를 8kbyte 를 지원하고 Attiny44 는 4kbyte 를 지원한다. 참고로 Attiny 에 올라가는 부트로더의 크기는 대략 2kbyte 정도다.ㅎㄷㄷ


 아두이노 IDE 1.6.x 버전에서는 보드 : Attiny 를 선택,

 프로세서 : Attiny85 선택,

 Clock : 8Mhz (internal) 을 선택한다. 

  

  

 

 이제부터가 중요하다. 

 ATmega328 에 부트로더를 올려본 경험이 있는 분들은 쉬울 것이다.

 

  

먼저 여러분이 갖고 있는 아두이노에 ArduinoISP 를 올려야 한다. 

아래 그림과 같이 파일->예제->ArduinoISP 를 선택하여 나온 코드를 아두이노에 업로드 한다.





그리고 나서 도구->프로그래머->Arduino as ISP 를 선택한다.

  


  이 과정은 PC 로부터 시리얼 통신으로 명령을 받은 아두이노가 다른 장치로 프로그램을 올릴수(ISP, In-System Programing ) 있도록 해주는 과정이다. 방금 아두이노 위에 올린 ArduinoISP 는 일종의 릴레이를 하게 된다. 물론 USB ISP 장치가 있으면 이런 삽질 할 필요 없이, 도구 -> 프로그래머 -> USBtinyISP  를 선택하고 바로 부트로더를 구우면 된다.

  다만 그게 없으면 이렇게 번거로운 과정을 해야 하는데, 더 안습한 사실은 Attiny85 는 시리얼 통신을 지원하지 않으니 그것을 통하여 프로그램을 올릴수도 없다. USB ISP 장치가 없다면 오로지 다른 아두이노를 거쳐서 프로그램을 업로드 해야한다. 

    

  물론 USB ISP 장치도 우리의 알리익스프레스에서 단돈 5천원 미만에 팔고 있다.

  (http://www.aliexpress.com/wholesale?SearchText=USB+ISP&catId=0&initiative_id=SB_20141006100947)






 이제  다음 과정으로 넘어가겠다. ISP  를 통하여 ATtiny 에 부트로더를 올리기 위하여 다음과 같이 선을 연결한다.

 

 1) 아두이노 우노 R2 이하에서는 아래 링크의 페이지에 나와있는 방법대로 연결한다.

     (R2, R3 구분방법은 링크 사이트의 그림과 아래 2) 그림 에서 Reset 버튼 위치 확인)

        Reset 포트와 GND 포트 사이에 10uF 콘덴서를 연결하는 것이 포인트다.  

      콘덴서의 '-' 가 표시된 줄무늬 쪽이 GND다. 

        

        http://highlowtech.org/?p=1706  


 

 2) 아두이노 우노 R3 이상

      


   


  

(Pin0 은 D0 , Pin2 는 D1 이다.)  


이해를 돕기 위하여 좀 더 자세히 설명하면, 

  다음 표와 같다. 

  


ATtiny Reset

--------------

Arduino 10

ATtiny Pin3

-------------- 

Arduino 9

ATtiny GND

---------------

Arduino GND

 

 

 

 ATtiny VCC

-------------------- 

Arduino 5v

 ATtiny Pin2

--------------------

Arduino 13

 ATtiny Pin1

-------------------- 

Arduino 12

 ATtiny Pin0

 --------------------

Arduino 11




  

  선 연결이 완료되면 ArduinoISP 가 올라간 아두이노 보드가 PC 에 연결된 상태에서 상단 메뉴의 '도구 -> 시리얼 모니터' 를 선택하면 나오는 창에서 우측 하단의 baud rate 를 '19200baud' 로 변경한다. 만약 상단 메뉴의 '도구' 에서 시리얼 모니터가 비활성화 되어있다면 아두이노와 연결이 제대로 되지 않은 것이다.





  그 다음은, 상단 메뉴의 '도구 -> 보드'  에서 자신이 갖고 있는 ATtiny 를 선택한다. 실제로 올려보면서 처음에는 안전하게 ATtiny 1Mhz 를 선택한다. (이 과정이 성공한 이후에는 같은 방법으로 
ATiny 8Mhz 도 올려보자.)


  그리고 '도구 -> 부트로더 굽기' 를 선택한다.


  하지만, 에러가 날 것이다. (에러가 나지 않는다면 축하한다. 부트로더가 올라간 것이다.)

  필자는 국내 온라인 전자 부품 쇼핑몰에서 가장 구하기 쉬운 ATtiny85-20pu 를 구입했는데, 이 것이 이전 버전들과 호환이 안 되어서 그런지 몰라도 아래 그림과 같이 에러가 난다. (아래는 삽질하는 과정에서 Baud Rate 를 일부러 57600으로 바꿔본 스샷이다.)




  이 것의 해결책을 찾으러 여러군데를 뒤져보고 http://electronics.stackexchange.com/questions/64978/attiny2313-refuses-to-be-programmed-after-setting-cpu-clock-to-500khz/65183#65183 이 페이지에서 해답을 찾았다.


  

  그리고 아래 링크에 있는 어떤 아주 고마운 분께서 수정한 ArduinoISP 코드를 다시 아두이노에 올린다.

  https://github.com/sylvandb/ArduinoISP/blob/7e5359a44baccac956d8623d3d8629f4a48efe79/ArduinoISP/ArduinoISP.ino


  다시 도구 -> 보드  에서 자신이 갖고 있는 ATtiny 를 선택한 뒤에  도구 -> 부트로더 굽기  를 실행하며 이제 잘 올라갈 것이다.


  이제 실제로 테스트 해보기 위해 Blink 예제를 올려볼 것이다.

  

  우선 방금 올린 수정된 ArduinoISP 으로 부트로더를 무사히 올릴 수 있었지만, 스케치 프로그램은 올릴 수 없으므로 다시 메뉴에서  파일->예제->ArduinoISP  를 선택하고 아두이노에 업데이트한다.

 

   이미 구성한 회로에  다음과 같이 LED 와 저항을 붙여준다.

   





  

   파일->예제->01.Basics->Blink 를 선택한다. 파일이 열리면 13번 포트로 설정되어 있는 부분을 모두 0 으로 고쳐준다.


  마지막으로 업로드를 실행하면 PC---> 아두이노 (ISP) ---> ATtiny85 과정을 거쳐서 프로그램이 업로드가 될 것이다.

 


 아래는 ATtiny85 에서 실행하는 Blink 예제 구동영상이다.    


 



PWM 도 테스트 해보았다.