마침내 깡통 ATtiny85 를 Digispark 버전으로 만드는 방법을 찾아서 포스팅 합니다.
Digispark 란, ATtiny85 에 직접 소스를 올려서 편하게 ATtiny85 을 이용한 개발을 할 수 있도록 한 Kickstarter 프로젝트 였습니다.
현재는 클라우드 펀딩에 성공하여 기성품으로 판매되고 있습니다.
* Digispark - The tiny, Arduino enabled, usb dev board!
- https://www.kickstarter.com/projects/digistump/digispark-the-tiny-arduino-enabled-usb-dev-board
프로젝트로 성공하여 기성품도 나와 있을 정도니, 당연하게도(?) AliExpress 에서 clone 으로도 판매되고 있어요.
(Open source 이기도 하니 뭐...)
1,500 원 정도면 바로 살 수 있지만, 혼자 힘으로 만들어 보고자 궂이 힘든 방법을 택해 봅니다.
참고로, 지금까지 ATtiny85 를 이용하여 놀았던 포스팅은 다음과 같으니 먼저 참고해 주세요.
지금까지 놀았던 것은, 모두 이 Digispark clone 을 만들어 보기 위한 전단계 들이었습니다.
* Hardware | ATtiny85 를 사용해 보자 - 1
- http://chocoball.tistory.com/entry/Hardware-ATtiny85-1
* Hardware | ATtiny85 를 사용해 보자 - 2
- http://chocoball.tistory.com/entry/Hardware-ATtiny85-2
1. Digispark Bootloader 입히기 - Arduino ISP
ATtiny85 를 뭔가 작업을 걸려면 interfacing 해주는 arduino 가 필요합니다.
이 arduino 를 programmer 라고도 하기도 합니다만, 여튼 Arduino ISP 라는 소스를 올려놔야 동작합니다.
지금까지 여러 포스팅에서 다루었으므로 여기서는 간단하게 설명하겠습니다.
일단 "ArduinoISP" 소스를 arduino 에 올립니다.
File > Examples > 11.ArduinoISP > ArduinoISP
2. Digispark Bootloader 입히기 - ATtiny85 와 연결
Arduino 와 연결은 일반적인 ArduinoISP 시에 사용하는 연결법과 동일합니다.
ATtiny85 | Arduino Nano --------------------------- VCC | 5V GND | GND Reset | D10 Pin 0 | D11 Pin 1 | D12 Pin 2 | D13 ---------------------------
실제 연결된 모습은 아래와 같아요.
이제 Arduino IDE 에서 ATtiny85 를 인식시켜야 합니다.
Boards Manager 에서 ATtiny85 가 떠서 선택할 수 있도록, 우선 Preferences 에서 다음과 같이 작업합니다.
File > Preferences > Additional Boards Manager URLs
https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json
그러면, 아래처럼 Boards Manager 에서 attiny 보드들을 선택할 수 있도록 해주는 파일들을 인스톨 할 수 있습니다.
Tools > Board > Boards Manager > Type : Contributed > attiny
여기까지 오면, Board 선택시 ATtiny 가 아래처럼 보입니다.
Tools > Board > ATtiny
ATtiny85 의 설정은 다음과 같이 맞춥니다.
* Board : ATtiny
* Processor : ATtiny85
* Clock : 1 MHz (internal)
* Port : Arduino ISP 가 연결된 Port
* Programmer : Arduino as ISP
3. micronucleus 부트로더 입히기
Digispark 는 Pin 숫자가 적어 제약이 많기 때문에 USB chip 따로 있지 않습니다.
그 대신에 bootloader 가 가상 USB 를 만들어서 PC 와 연결을 해주죠.
그 bootloader 가 micronucleus 라는 부트로더 입니다.
Digispark 는, 이 micronucleus 부트로더를 채용하고 있습니다.
지금까지 시행착오는 EEPROM 프로그램을 이용하여 직접 ATtiny85 에 쓰기를 시도했었지만,
아래 동영상을 보니, Arduino IDE 가 사용하는 "avrdude.com" 을 이용하는 방법이었습니다.
FUSE bit 도 정확하게 알려주더군요.
아래 동영상 제작자에게 감사를.
* Load Micronucleus to attiny85 using Arduino uno
- https://www.youtube.com/watch?v=o7711jBQxmY
이 Fuse 설정이 중요한데, 잘못하다가는 ATtiny85 가 벽돌이 될 수 있습니다.
벽돌된 ATtiny85 를 복구하는 방법도 있는데, 이는 다른 기회에 다뤄 보기로 하겠습니다.
일단, 여기에 성공한 Fuse 설정을 적어 놓습니다.
Fuse type | value ---------------------- Low Fuse | 0xe1 High Fuse | 0xdd Extended fuse | 0xfe ----------------------
Digispark 에서 사용하는 부트로더 파일인 micronucleus 를 다운로드 받아 놓습니다.
* Micronucleus V2.04
- https://github.com/micronucleus/micronucleus
다음으로, 최종 avrdude 실행 코드를 만들기 위해, 아무 소스나 uploading 이 성공한 소스를 arduino 에 올려 봅니다.
위에서 마지막 command 를 카피해서 notepad 등에 붙여서 avrdude 의 프로그램 위치나, config 파일의 장소를 확인합니다.
그리고 command 줄의 마지막 부분을 sketch 파일이 아닌, flash 문구를 붙여서 하나로 만듭니다.
C:\Users\chocoball\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino14/bin/avrdude -CC:\Users\chocoball\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino14/etc/avrdude.conf -v -pattiny85 -cstk500v1 -PCOM7 -b19200 -Uflash:w:C:\Users\chocoball\Documents\Arduino\libraries\micronucleus-master\firmware\releases\t85_default.hex:i -U lfuse:w:0xe1:m -U hfuse:w:0xdd:m -U efuse:w:0xfe:m
저의 경우 최종 모습이 위 command 입니다.
각 부분을 분리해 보면 다음과 같이 3개로 분해됩니다.
C:\Users\chocoball\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino14/bin/avrdude -C C:\Users\chocoball\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino14/etc/avrdude.conf -v -pattiny85 -cstk500v1 -PCOM7 -b19200 -Uflash:w: C:\Users\chocoball\Documents\Arduino\libraries\micronucleus-master\firmware\releases\t85_default.hex:i -U lfuse:w:0xe1:m -U hfuse:w:0xdd:m -U efuse:w:0xfe:m
위의 제일 마지막 부분이 micronucleus 부트로더인 t85_default.hex 와 fuse bit 를 지정한 command line 입니다.
이제 준비가 완료 되었습니다.
지금까지 해온 과정을 정리해 보면,
* Arduino ISP 로 연결
* micronucleus 부트파일 다운로드
* avrdude command line 생성
avrdude command line 이 완성되었으므로, 이제 실행시키면 됩니다.
실행은 Arduino IDE 에 복사하여 실행할 방법이 없으므로, command line 창에서 실행합니다.
Windows OS 의 경우는 다음과 같아요.
시작 > 검색 > Windows PowerShell
avrdude command 를 카피하여 PowerShell 에 붙여놓기 합니다.
두둥~!!!!!
실행!!!
Boom Boom Boom !!!
PS C:\> C:\Users\chocoball\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino14/bin/avrdu de -CC:\Users\chocoball\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino14/etc/avrdude. conf -v -pattiny85 -cstk500v1 -PCOM7 -b19200 -Uflash:w:C:\Users\chocoball\Documents\Arduino\libraries\micro nucleus-master\firmware\releases\t85_default.hex:i -U lfuse:w:0xe1:m -U hfuse:w:0xdd:m -U efuse:w:0xfe:m avrdude.exe: Version 6.3-20171130 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch System wide configuration file is "C:\Users\chocoball\AppData\Local\Arduino15\packages\arduino \tools\avrdude\6.3.0-arduino14/etc/avrdude.conf" Using Port : COM7 Using Programmer : stk500v1 Overriding Baud Rate : 19200 AVR Part : ATtiny85 Chip Erase delay : 400000 us PAGEL : P00 BS2 : P00 RESET disposition : possible i/o RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 ...
... avrdude.exe: Device signature = 0x1e930b (probably t85) avrdude.exe: safemode: lfuse reads as E1 avrdude.exe: safemode: hfuse reads as DD avrdude.exe: safemode: efuse reads as FE avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude.exe: erasing chip avrdude.exe: reading input file "C:\Users\chocoball\Documents\Arduino\libraries\micronucleus-master\firmwar e\releases\t85_default.hex" avrdude.exe: writing flash (8124 bytes): Writing | ################################################## | 100% 0.22s ...
... Reading | ################################################## | 100% 0.01s avrdude.exe: verifying ... avrdude.exe: 1 bytes of efuse verified avrdude.exe: safemode: lfuse reads as E1 avrdude.exe: safemode: hfuse reads as DD avrdude.exe: safemode: efuse reads as FE avrdude.exe: safemode: Fuses OK (E:FE, H:DD, L:E1) avrdude.exe done. Thank you.
Raw log 를 첨부해 놓습니다.
* Digispark bootloader log
- Digispark_bootloader_upload.txt
여기까지 오면 다 성공한 것이나 마찬가지예요.
4. Digispark 드라이버 인스톨
Digispark 드라이버 설치 과정은 아래 동영상을 참고하였습니다.
* Installing Drivers and Programming the DigiSpark ATtiny85 dev boards - Tutorial
- https://www.youtube.com/watch?v=MmDBvgrYGZs
Digispark 는 USB 계열의 device 이므로, 드라이버 인스톨이 필요합니다.
우선 최신 드라이버를 다운로드 받아 놓습니다.
* Digistump Arduino Release 1.6.7
그러면, 아래처럼 장치 관리자에서 잠깐 떳다가 사라집니다.
장치 관리자 메뉴에서 "숨겨진 장치 보이기"로 하면, 불분명한 장치로 인식되어 있습니다.
해당 장치에서 마우스 오른쪽 클릭으로 드라이버 설치를 선택 후,
아까 다운로드 받은 드라이버를 해동시킨 폴더를 선택해 줍니다.
짜잔~~~!!!
Digispark 장치 디바이스 드라이버 인스톨에 성공했습니다.
그러면 장치 관리자에서 아래와 같이 등록된 것을 확인할 수 있습니다.
이제 다 왔네요.
5. Digispark 에 직접 소스 올리기
Digispark 가 정상적으로 인식되었으면, Arduino as ISP 나 중간 장치를 거치지 않고,
직접 USB 에 연걸하여 Arduino IDE 에서 직접 소스를 uploading 할 수 있습니다.
Digispark 보드를 Arduino IDE 에서 선택될 수 있도록 아래 과정을 거칩니다.
File > Preferences > Additional Boards Manager URLs
URLs 부분에, official 한 Digispark 링크를 걸어 줍니다.
http://digistump.com/package_digistump_index.json
이제 Boards Manager 로 가서 관련 파일을 등록해 줍니다.
Tools > Board > Boards Manager
Digistump 라고 검색하면 인스톨 할 페키지가 뜹니다.
위의 과정까지 마치면, 아래처럼 Board 메뉴에서 Digispark 를 선택할 수 있게 됩니다.
Tools > Boards > Digispark (Default - 16.5mhz)
Programmer 를 USBasp 로 바꾸고 소스를 uploading 합니다.
업로딩을 시작하면 소스를 컴파일 하고, 최종적으로 아래 문구가 뜨면서 IDE 가 대기합니다.
Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)
이는 Digispark 는 USB 인터페이스 chip 을 가지고 있지 않고,
micronucleus 부트로더가 virtual USB 로 처리하므로, 장치관리자에서 지속적으로 인식하지 못합니다.
그래서 이렇게 필요시에 PC 가 준비단계가 되었을 때, USB 에 연결해 주면 됩니다.
연결하면, 위처럼 Digispark 를 IDE 내에서 인식하고 Digispark / ATtiny85 내장 EEPROM 을 지운 다음 새로운 코드를 쓰게 됩니다.
FIN
Digispark 가 ATtiny85 를 사용한다는 점에 착안하여,
깡통 ATtiny85 를 이용하여 Digispark 를 직접 만들어 보자고 한지 어언 6개월...
다른 포스트에서 다뤘듯 bootloader 에 대한 경험이 쌓이고 난 후가 되서야 완료할 수 있었습니다.
이제 소형/단순 control 을 위한 ATtiny85 이용시에는,
이 Micronucleus 가 사용된 Digispark clone 으로 직접 USB 와 연결하여 개발할 수 있겠네요.
모두 FUN Arduino~!!!
'Hardware' 카테고리의 다른 글
Hardware | Breadboard Jumper 구입하기 (0) | 2018.12.21 |
---|---|
Hardware | 샤오미 창미 멀티탭 3구 USB 3포트 (0) | 2018.12.16 |
Hardware | 8x8 LED matrix 와 Colorduino 이용해 보기 (0) | 2018.12.03 |
Hardware | MAX30105 파티클 센서 - 1 (0) | 2018.11.23 |
Hardware | RTC DS3231 부품 사용기 - 2 (0) | 2018.11.20 |