ATtiny85 MCU에 대해서는 예전에 Digispark 보드에 대해서 알아보면서 한 번 다룬적이 있다. (http://deneb21.tistory.com/394, http://deneb21.tistory.com/395)하지만 지금부터 하려고 하는 것은 ATtiny85 칩만을 가지고 아두이노의 기능을 할 수 있도록 프로그래밍 하는 방법에 대해서 알아보려고 한다. 이렇게 하면 아두이노로 돌리기엔 과분(?)했던 자잘한 프로그램들을 저렴한 칩 하나에서 동작시킬 수 있으니 여러모로 절약이라고 생각되며 합리적인 다운사이징이라고 생각이 된다. 먼저 개발환경을 설정하는 방법에 대해서 알아보려고 하는데 아두이노 우노를 ISP 로 삼아서 ATtiny칩에 프로그램을 이식하는 방법에 대해서 알아보려고 한다. 모든 정보는 본 포스팅에서 다루는 보드 라이브러리 개발자의 사이트인 http://highlowtech.org/?p=1695 (MIT 미디어랩 소속) 을 참고 하였다.
위의 칩이 ATtiny85 이다. 8KB의 메모리를 가진다. 보통 아두이노가 32KB 정도를 가지는데 비해 1/4 정도의 공간이다. 하지만 8KB 의 공간은 꽤 큰 공간이다. 아마도 간단한 센서제어 등의 프로그래밍 용도로는 차고도 넘치는 공간이라고 할 수 있을 것 같다. 게다가 새끼손톱 정도의 크기여서 프로젝트의 공간활용에도 많은 도움이 될 것으로 생각한다. 칩은 알리익스프레스 직구로 개당 1달러 정도에 구입할 수 있으니 돈도 많이 절약이 될 것이다.
■ ATtiny 데이터시트 & 스펙
atmel-2586-avr-8-bit-microcontroller-attiny25-attiny45-attiny85_datasheet.pdf
아래는 데이터시트에서 카피해 온 칩의 스펙이다. (ATtiny 25, 45, 85 Series)
Features
• High Performance, Low Power AVR® 8-Bit Microcontroller
• Advanced RISC Architecture
– 120 Powerful Instructions – Most Single Clock Cycle Execution
– 32 x 8 General Purpose Working Registers
– Fully Static Operation
• Non-volatile Program and Data Memories
– 2/4/8K Bytes of In-System Programmable Program Memory Flash
• Endurance: 10,000 Write/Erase Cycles
– 128/256/512 Bytes In-System Programmable EEPROM
• Endurance: 100,000 Write/Erase Cycles
– 128/256/512 Bytes Internal SRAM
– Programming Lock for Self-Programming Flash Program and EEPROM Data Security
• Peripheral Features
– 8-bit Timer/Counter with Prescaler and Two PWM Channels
– 8-bit High Speed Timer/Counter with Separate Prescaler
• 2 High Frequency PWM Outputs with Separate Output Compare Registers
• Programmable Dead Time Generator
– USI – Universal Serial Interface with Start Condition Detector
– 10-bit ADC
• 4 Single Ended Channels
• 2 Differential ADC Channel Pairs with Programmable Gain (1x, 20x)
• Temperature Measurement
– Programmable Watchdog Timer with Separate On-chip Oscillator
– On-chip Analog Comparator
• Special Microcontroller Features
– debugWIRE On-chip Debug System
– In-System Programmable via SPI Port
– External and Internal Interrupt Sources
– Low Power Idle, ADC Noise Reduction, and Power-down Modes
– Enhanced Power-on Reset Circuit
– Programmable Brown-out Detection Circuit
– Internal Calibrated Oscillator
• I/O and Packages
– Six Programmable I/O Lines
– 8-pin PDIP, 8-pin SOIC, 20-pad QFN/MLF, and 8-pin TSSOP (only ATtiny45/V)
• Operating Voltage
– 1.8 - 5.5V for ATtiny25V/45V/85V
– 2.7 - 5.5V for ATtiny25/45/85
• Speed Grade
– ATtiny25V/45V/85V: 0 – 4 MHz @ 1.8 - 5.5V, 0 - 10 MHz @ 2.7 - 5.5V
– ATtiny25/45/85: 0 – 10 MHz @ 2.7 - 5.5V, 0 - 20 MHz @ 4.5 - 5.5V
• Industrial Temperature Range
• Low Power Consumption
– Active Mode : 1 MHz, 1.8V: 300 µA
– Power-down Mode : 0.1 µA at 1.8V
핀의 구성은 위와 같다. 하나의 핀을 다용도로 사용이 가능하지만 대표적으로 보면 디지털 I/O 5개, 아날로그 I/O 3개를 사용할 수 있다. 동작전압은 2.7 - 5.5V 로서 1.5V 건전지 2개나 3V 리튬 코인셀, 3.7V 리튬이온 배터리, USB 전원 등 다양한 전원을 사용할 수 있겠다.
전원 관련하여 특히 파워다운 모드(Power-down Mode)에서는 0.1μA 까지 소모 전류를 낮출 수 있어서 배터리를 아주 알뜰하게 사용할 수도 있다.
이제부터 어떻게 아두이노 우노를 이용해서 ATtiny85 칩에 프로그램을 업로드 할 수 있는지 알아보겠다. 아두이노 IDE 구버전(1.0.x)을 사용하는 경우(온라인 보드라이브러리 설치 미지원 버전)와 최신버전(온라인 보드라이브러리 설치 지원 버전) 두 가지 경우 모두에 대해서 설명하려한다. 굳이 이렇게 하는 이유는 환경을 설치하려는 나의 노트북 (화이트 맥북, OS X 10.6 에서는 최신버전 아두이노 IDE의 설치가 지원되지 않았기 때문이다 ㅠ.ㅠ) 아래의 구버전 설치법은 아두이노 IDE 1.0.x 버전에서만 설치가 가능하다.
아두이노 IDE 의 보드 라이브러리 온라인 설치 가능 여부는 메뉴 중 환경설정창을 열어보면 위와 같이 나오는데 맨 아래에 URL 입력창이 있으면 신버전이다. 내가 쓰는 1.0.5 버전은 없음. 고로 수동설치해야 함.
※준비물: 아두이노 우노, ATtiny85 칩, 10μF 정도의 전해 커패시터(약간 큰 용량도 상관이 없다), 케이블, 브레드보드, LED, 220옴 저항 등.
Step 1. 아두이노 우노가 ISP 로 작동할 수 있도록 만들어 주어야 한다. 아두이노 IDE 를 실행하고 파일->예제->Arduino ISP 를 클릭한다.
클릭하면 스케치 창이 하나 뜨면서 ISP 코드가 나타난다.
업로드 버튼을 눌러서 아두이노에 ISP 프로그램을 업로드 해 준다. 이제 아두이노 우노는 ISP 의 역할을 하게 된다.
출처: http://highlowtech.org/?p=1801
만약 위와 같은 전용 ISP 하드웨어가 있다면 이 과정을 생략하고 아래의 2번 과정만 거치면 바로 ATtiny85에 프로그램을 올릴 수 있다.
Step 2-1. 온라인 보드 라이브러리 설치가 지원되지 않는 아두이노 IDE 구버전(Ver 1.0.x)의 경우는 아래와 같이 보드 라이브러리를 설치한다.
- https://github.com/damellis/attiny/archive/ide-1.0.x.zip 을 다운로드 받아서 압축을 풀면 'attiny-ide-1.0.x' 라는 폴더가 나오는데 하위 폴더에 'attiny' 라는 폴더가 있다. 이 폴더를 복사한다.
attiny-ide-1.0.x.zip - 복사한 attiny 폴더를 맥의 경우 응용프로그램 폴더 -> 아두이노 아이콘 위에서 마우스 오른쪽 버튼을 클릭하면 '패키지 내용보기' 라는 메뉴가 나온다. 이것을 실행한다. 그러면 프로그램이 설치된 폴더가 나오는데 'Contents -> Resources -> java -> hardware' 폴더에 'attiny' 폴더를 붙여넣기 하면 된다.
- 윈도우의 경우 아두이노 IDE 설치 폴더 하위의 'hardware' 폴더에 'attiny' 폴더를 붙여넣기 하면 된다. (하지만 윈도우 사용자의 경우 그냥 최신버전의 IDE를 사용하는게 좋다.)
- 이제 아두이노 IDE 를 다시 실행해서 '도구 -> 보드' 메뉴를 보면 아래와 같이 ATtiny 관련 보드들이 나오는 것을 볼 수 있다. 이 중에서 우리는 ATtiny85 를 선택하고 프로그래밍 하면 되는 것이다. 또는 다른 ATtiny 칩 선택도 물론 가능하다.
OS X 구버전 아두이노 IDE
- 아두이노 IDE를 실행하고 '파일 -> 환경설정' 에 들어간다.
위와 같이 환경설정창이 뜨는데 그림의 버튼을 클릭하면 '추가적인 보드매니저 URLs' 라는 창이 뜬다. 맨 아래에 다음의 URL을 입력해 준다. 'https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json' 입력하고 확인을 눌러준다. 환경설정창도 확인을 눌러서 닫아준다.
아두이노 IDE '툴 -> 보드 -> 보드매니저' 를 실행한다.
보드 매니저를 실행하면 아래와 같이 보드 라이브러리를 선택하는 창이 뜨는데 이 중에서 'attiny by David A. Mellis' 를 설치한다.
설치가 끝난 후 아두이노 IDE 를 다시 시작하고 '툴 -> 보드' 메뉴를 보면 ATtiny 관련 장치가 새로 생성된 것을 볼 수 있다.
이로써 소프트웨어적인 개발환경 설치는 끝났다. 만약 ISP 하드웨어가 있다면 3번의 과정 없이 바로 아두이노 IDE 로 코딩을 들어가면 된다.
Step 3. 아두이노 우노를 PC에서 분리하고 아래의 그림과 같이 회로를 구성한다.
출처: http://highlowtech.org/?p=1706
ATtiny85 Pin |
Arduino Pin |
PB2 (SCK) |
D13 |
PB1 (MISO) |
D12 |
PB0 (MOSI) |
D11 |
PB5 (Reset) |
D10 |
위와 같이 연결하고 칩의 전원은 5V 를 사용하며 아두이노 우노의 RESET 단자와 GND 에 전해 콘덴서(10μF)를 극성에 유의하여 연결해 준다. (전해 콘덴서 + 를 RESET에 연결, - 를 GND 에 연결)
실제로 연결한 모습이다. 부품이 몇 개 없으니 간단하게 연결이 가능하다. 나의 경우는 10μF 짜리 콘덴서가 없어서 22μF, 100V 짜리를 달아 주었다. 내압은 25V 정도면 충분하다.
Step 4. Test
가장 만만한 예제인 LED Blink 테스트를 해보기로 한다. LED 하나와 220옴 저항을 준비해서 LED의 플러스극을 ATtiny85 의 디지털 단자인 PB4에 연결한다. 마이너스는 GND에 저항과 함께 연결한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | /* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */ // Pin 4 has an LED connected on most Arduino boards. // give it a name: int led = 4; // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); } // the loop routine runs over and over again forever: void loop() { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } | cs |
소스를 보면 알겠지만 기존의 blink 예제에서 led 핀을 13번에서 ATtiny의 핀인 4번으로 바꿔준 것 밖에 없다. 소스가 완성 되었으니 이제 업로드를 위한 준비를 한다.
- 업로드 전 체크사항 1 : '툴(도구) -> 보드' 에서 ATtiny85를 선택해야 한다. 클럭은 1Mhz 내부클럭을 사용할 것이다. (보드 라이브러리 버전에 따라 보드, 프로세서, 클럭을 따로 선택해 주어야 하는 경우도 있다. 원하는 것을 선택하면 된다.)
- 업로드 전 체크사항 2 : '툴(도구) -> 프로그래머' 에서 'Arduino as ISP' 를 선택한다.
위의 체크사항을 모두 제대로 선택 했으면 업로드 버튼을 눌러서 blink 예제를 업로드 해 준다. 잠시 후 업로드 완료가 되어 LED가 깜빡이는 것을 볼 수 있다. 아두이노를 통해서 ATtiny 칩으로 프로그램이 업로드 되어 아두이노는 전원만 공급하는 역할을 하고 칩 독자적으로도 동작이 잘 된다. 이 상태에서 아두이노를 분리하고 배터리 등의 외부전원을 연결해도 여전히 잘 작동한다.
위의 영상은 아두이노 우노를 떼어내고 배터리를 연결해서 ATtiny85 가 단독으로 동작하는 영상이다.
그런데 프로그램 업로드시 업로드 완료까지 잘 되는데 이상한 경고문구가 나온다.
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85
라는 경고 문구 인데 위에 참고한 사이트에 보니 그냥 무시하면 되는 거라고 한다. Don't worry.
출처 : http://highlowtech.org/?p=1229
앞으로 ATtiny85 칩을 가지고 여러가지를 해 볼 생각이다. 살짝 기대가 된다.
※추가내용 (2016.12.18) : 위와 같이 했는데 아두이노의 기본적인 함수인 tone() 등이 되지 않는다면 attiny core 를 설치하면 아두이노와 거의 비슷한 환경에서 코딩이 가능하다. https://code.google.com/archive/p/arduino-tiny/ (← 고마운 사람들)에서 다운로드 받을 수 있으며 다운 받은 후 압축을 풀고 윈도우의 경우 아두이노 IDE 설치 폴더 하위의 hardware 하위에 tiny 폴더를 복사하고 (Mac 의 경우는 '응용프로그램 - 아두이노IDE 에서 오른쪽 마우스 - 패키지 내용보기 - Contents - Resources - Java - hardware 하위) Prospective Boards.txt 파일의 이름을 boards.txt 로 변경하고 IDE를 재시작하면 일부 기능을 제외하고 아두이노와 거의 비슷한 환경에서 코딩이 가능하다. 아래에 내가 실제로 설치해서 사용하고 있는 core 파일을 올린다. 아두이노 1.0.x대의 파일과 아두이노 1.5.x 에서 사용할 수 있는 코어가 따로 있다.
※추가내용 (2016.12.27) : 아두이노 나노와 만능기판을 이용해서 ISP 기능을 하는 ATtiny 전용 보드를 만들어 보았다. http://deneb21.tistory.com/462
'아두이노' 카테고리의 다른 글
[ATtiny] ATtiny85 MCU 프로그래밍 보드 제작 (0) | 2016.12.12 |
---|---|
[아두이노] DC 모터, 아두이노 PWM으로 속도 제어 (4) | 2016.12.01 |
[아두이노] S4A를 이용해 온도센서(LM35)의 값을 읽어보자 (0) | 2016.11.25 |
[아두이노] S4A(Scratch for Arduino) 를 설치해보자 (3) | 2016.11.25 |
[아두이노] LED 밝기 조절 및 색의 혼합 (0) | 2016.10.24 |