'ATtiny85'에 해당되는 글 4건

  1. 2019.11.07 Hardware | Arduino Gemma 를 DIY 해보자 2
  2. 2018.12.14 Hardware | ATtiny85 개발 보드를 이용하여 Digispark 를 DIY 하기
  3. 2018.05.16 Hardware | ATtiny85 를 사용해 보자 - 2
  4. 2018.05.16 Hardware | ATtiny85 를 사용해 보자 - 1 2

Hardware | Arduino Gemma 를 DIY 해보자

|

1. Arduino DIY


Arduino 및 테스트용 PCB 등을 무료로 나누어 주는 좋은 회사가 있습니다.


* Board Lab (Board Free)

http://www.boardfree.kr/


Board Lab (Board Free)

http://www.boardfree.kr/



출처: https://chocoball.tistory.com/search/boardfree [초코볼의 inside Tech]


버려지거나 중복되는 PCB 들을 무료로 나누어 주시는 것을 사이드업으로 해주고 계십니다. (고마운 분들)

혹시, 요청하실 분이 계시다면, 수량에 한계가 있으며 무료나눔이 회사의 본업이 아니다 보니, 최대한 조심해서 요청하세요.

보다 자세한 유념 사항은 사이트에 잘 기재되어 있으니, 꼼꼼히 읽어 주시길 바랍니다.


PCB 무료나눔을 통해, 부품공부나 SMD 실장에 대해 경험 할 수 있었습니다.

그 결과물로는 arduino 를 가지게 되는 것이죠. 지금까지 아래와 같은 과정이 있었습니다.


* Hardware | Arduino 를 DIY 해보자 - 1

http://chocoball.tistory.com/entry/Hardware-Arduino-DIY-itself-1


* Hardware | Arduino 를 DIY 해보자 - 2

http://chocoball.tistory.com/entry/Hardware-Arduino-DIY-itself-2


* Hardware | Arduino 를 DIY 해보자 - 3

http://chocoball.tistory.com/entry/Hardware-Arduino-DIY-itself-3


Arduino Nano 도 작업하고 있습니다만, 과정중에 ATmega328P-AU 부트로더에 막혀 있습니다.

아마 AliExpress 에서 fake CPU 가 왔거나, 제가 처음에 fuse bit 을 잘못 해서 그런 것 같아요.


머리를 식힐 겸, 나눔 받은 BL-303 이라는 것을 작업해 보기로 합니다.



* 보드프리

BL-303.pdf


* Arduino

arduino-gemma-schematic.pdf

arduino-gemma-reference-design.zip


본 보드는, ATtiny85 를 CPU 로 사용하는 소형 arduino 입니다.

예전에 ATtiny85 를 이용하여 비슷한 arduino 계열인 Digispark 를 만들어 봤으므로, 그리 어렵지 않을 것이라 생각해서죠.


* Hardware | ATtiny85 를 사용해 보자 - 1

https://chocoball.tistory.com/entry/Hardware-ATtiny85-1


* Hardware | ATtiny85 를 사용해 보자 - 2

https://chocoball.tistory.com/entry/Hardware-ATtiny85-2


* Hardware | ATtiny85 개발 보드를 이용하여 Digispark 를 DIY 하기

https://chocoball.tistory.com/entry/Hardware-Digispark-DIY-using-ATtiny85




2. Arduino Gemma


작업 할 BL-303 보드는 Arduino Gemma 라는 보드를 기본으로 만들어진 보드 입니다.

Arduino Gemma 는 Wearable IoT, 즉 의상이나 소형 IoT 컨트롤러 용으로 만들어진 arduino 입니다.


* ARDUINO GEMMA

https://store.arduino.cc/usa/arduino-gemma



지금은 성능 좋고 소형화된 CPU 들이 많이 나와서, 단종 되었습니다.

참고로, 이 Arduino Gemma 를 업그레이드 시킨, 그렇지만 기본은 동일한 제품이 Adafruit 에서 Trinket 이라는 제품이 있습니다.



CPU 는 같은 ATtiny85 지만 pinout 을 늘여서, 더 많은 확장성을 가지게 한 제품 입니다.



Adafruit 는 3V out 버전과 5V out 버전 두 가지로 나뉘는데, 제가 받은 PCB 는 5V/3.3V 둘 다 지원합니다.

보드프리는 PCB 설계가 뛰어난 것 같습니다.




3. SMD capacitor 구입


다른 arduino DIY 하면서, 왠만한 부품은 모두 구입 했는데, 0805 SMD 용 1uF 캐패시터만 가지고 있지 않아, 구입합니다.


* 0805 SMD Ceramic Capacitor Assorted Kit 1pF~10uF 50values*50pcs=2500pcs Chip Ceramic Capacitor Samples kit

https://www.aliexpress.com/item/2025088658.html



이왕 구입하는 김에, 다른 치수들도 함께 들어 있는 패키지로 구입했습니다.


1pF  / 1.5pF / 3pF  / 4.7pF /  5p  / 5.6pF / 6.8pF/ 8.2pF / 10pF

12pF / 18pF  / 20pF / 22pF  / 27pF / 30pF / 33pF

47pF / 56pF  / 68pF / 75pF  / 82pF

100pF(101) / 120pF(121) / 150pF(151) / 180pF(181) / 200pF(201)

220pF(221) / 330pF(331) / 390pF(391) / 470pF(471) / 560pF(561) / 680pF(681)

1nF(102) / 1.5nF(152) / 2.2nF(222) / 3.3nF(332) / 4.7nF(472) / 6.8nF(682) 

10nF(103) / 22nF(223) / 33nF(333) / 47nF(473) / 68nF(683) 

100nF(104) / 150nF(154) / 220nF(224) / 330nF(334) / 470nF(474) 

1uF(105) / 10uF(106)


참고로, 캐패시터 값 변환 공식을 여기에 올려 놓습니다. (Googling)


1 mF (millifarad, one thousandth (10−3) of a farad) = 1000 uF = 1000000 nF

1 uF (microfarad, one millionth (10−6) of a farad) = 0.000 001 F = 1000 nF = 1000000 pF

1 nF (nanofarad, one billionth (10−9) of a farad) = 0.001 uF = 1000 pF

1 pF (picofarad, one trillionth (10−12) of a farad)


도착샷은 예의.



단위가 자잘하게 나뉘는지라, 간략화한 표시로 구분하고 있습니다. 예를 들면 474 는 470nF. 






4. 납땜


Flux paste 를 올리기 전에, 필요한 부품을 도열 시켜 봅니다.



한땀 한땀 flux paste 를 올리고, SMD 부품들을 고정 시켜 놓습니다.



오븐에서 구워져 나오면 이쁘게 자리를 잡아 안착되었습니다.

정리가 필요한 부분은 인두기로 정리해 주면 됩니다. 부품 수가 적은지라 이번에는 따로 할게 없었네요.



Pin header 까지 납땜하면 끝.



USB 핀 쪽의 납땜 정리가 힘들었으나, 새로 구입한 T12-ILS 팁으로 깔끔하게 정리할 수 있었습니다.

작은 PCB 납땜은 필수적으로 극세사 납땜 tip 이 필요합니다.





5. Bootloader


Arduino 를 제작하는 데 있어서, 마무리 작업은 납땜 후, bootloader 를 입히는 작업 입니다.


Arduino Gemma 이지만, Adafruit 의 Trinket 의 bootloader 를 입힐 것이기에, 아래 Adafruit 사이트를 참고합니다.

동일한 ATtiny85 이므로, Digispark 의 bootloader 를 입혀도 될 것 같으나, 새롭게 Trinket 용으로 가 봅니다.


* Repairing bootloader

https://learn.adafruit.com/introducing-trinket/repairing-bootloader



Trinket 의 pinout 정보는 위와 같습니다.

이전에 만들어 봤던 Arduino Duemilanove 를 이용하여 bootloader 를 입혀 봅니다.


-----------------------------
| Trinket     | Duemilanove |
-----------------------------
| VBAT+ (Vin) |      5V     |
|    GND      |     GND     |
|    RST      |     D10     |
|    PB0      |     D11     |
|    PB1      |     D12     |
|    PB2      |     D13     |
-----------------------------


Adafruit 사이트를 참고하여 Duemilanove 연결 합니다.



위의 사이트에서 bootloader 를 입혀주는 sketch 를 Arduino IDE 에서 Duemilanove 에 업로드 해 줍니다.

기록을 남기기 위해 여기에도 파일을 옮겨 놓습니다.


trinketloader_2015-06-09.zip


Duemilanove 에 sketch 를 업로드 하고 Serial Monitor 를 연 다음, "G" 를 입력하면 자동으로 bootloader 를 입혀 줍니다.



다른 arduino 들 처럼, IDE 의 "burn bootloader" 를 이용하는 것이 아니라서 생소하지만, 무사히 완료 되었습니다.


Bootloader 가 문제없이 올라가면, 아래 동영상 처럼, ready 상태임을 나타내는 LED 가 천천히 밝아졌다 어두워 졌다 합니다.

Sketch 를 업로드 할 때, USB 칩이 없으므로, 스위치를 눌러 주어, 강제로 ready 상태를 만들어 줄 때의 모습입니다.





6. Windows Driver


FTDI 나 ATmega16U2 처럼, USB 전용 chip 이 달려있지 않은 보드 이므로, 관련 driver 를 인스톨 해줘야 합니다.

그냥 꽂으면 아래와 같이 나옵니다. "알 수 없는 장치..."



최신 드라이버는 아래 링크에서 받습니다.


* adafruit/Adafruit_Windows_Drivers

https://github.com/adafruit/Adafruit_Windows_Drivers/releases/tag/2.4.0.0


다운로드 받은 파일을 실행하여 드라이버를 인스톨 합니다.



저는 Trinket 만 필요하므로, "Trinket / Pro Trinket / Gemma (USBtinyISP)" 만을 선택해서 인스톨 했습니다.



드라이버가 인스톨 되고 나면, 아래처럼 "libusb-win32 devices" 라는 항목이 생기고, "USBtiny" 라고 기기를 인식합니다.



Windows OS 가 추가로 뭔가를 설치/설정 하기도 합니다.





7. Arduino IDE


납땜 > 부트로더 > Windows Driver 까지 왔으면, 그 다음은 Arduino IDE 설정 입니다.


File > Preferences > Additional Boards Manager URLs 에 아래 링크를 등록합니다.

이는 Board Manager 에 등록되어 선택할 수 있도록 하기 위함 입니다.


https://adafruit.github.io/arduino-board-index/package_adafruit_index.json


메뉴는 아래와 같습니다.

일전에 ESP8266 을 설치 했으니, 그 밑줄에다가 등록해 줍니다.



그러면 Board Manager 에서 Adafruit AVR Boards 를 등록할 수 있게 됩니다.



짜잔~! 이제 Board 메뉴에서 아래처럼 선택할 수 있게 됩니다.


Tools > Board > Adafruit Trinket (ATtiny85 @ 8MHz)


16MHz 를 사용해도 될 듯 한데, 내부 기본 oscillator 가 8MHz 라고 하니, 안전하게 8MHz 로 선택합니다.

16MHz 는 소프트웨어적으로 doubling 한다고 하는데, 아직 필요하지 않으니...



Programmer 는 "USBtinyISP" 를 선택합니다.

이는 여러번 이야기 되었듯이, USB chip 이 없기 때문입니다.



여기까지 오면, 관련된 설정은 이제 모두 끝났습니다.

이후는 Happy Coding 인거죠!




8. Blink


실제로 Trinket 화 된 Arduino Gemma 에게 일을 시켜 봅시다.

센서를 연결해서 확인해도 되지만, 가장 간단한 PCB 상의 LED 점멸을 시켜 보아요.


* Setting up with Arduino IDE

https://learn.adafruit.com/introducing-trinket/setting-up-with-arduino-ide


소스는 위의 Adafruit 사이트 것을 그대로 사용했습니다.


/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.

  To upload to your Gemma or Trinket:
  1) Select the proper board from the Tools->Board Menu
  2) Select USBtinyISP from the Tools->Programmer
  3) Plug in the Gemma/Trinket, make sure you see the green LED lit
  4) For windows, install the USBtiny drivers
  5) Press the button on the Gemma/Trinket - verify you see
     the red LED pulse. This means it is ready to receive data
  6) Click the upload button above within 10 seconds
*/

int led = 1; // blink 'digital' pin 1 - AKA the built in red LED

// 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); 
    delay(1000);
    digitalWrite(led, LOW);
    delay(1000);
}


Sketch 주석에도 잘 설명이 되어 있듯이, 소스를 업로드 할 때에는 필히 스위치를 눌러서 ready 상태로 만들어야 한다고 나와 있습니다.

이게 타이밍을 맞춰야 해서, IDE > Trinket 에 밀어넣는 순간이, ready 10 초 안에 진행 될 수 있도록 해야 합니다.



성공하면, 위와 같이 다른 arduino 와는 다른 과정들을 보여 줍니다. 아무래도 USB chip 부재...


avrdude: 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:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : usb
         Using Programmer              : usbtiny
avrdude: usbdev_open(): Found USBtinyISP, bus:device: bus-0:\\.\libusb0-0001--0x1781-0x0c9f
         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
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    12     4    0 no        512    4      0  4000  4500 0xff 0xff
           flash         65     6    32    0 yes      8192   64    128 30000 30000 0xff 0xff
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00

         Programmer Type : USBtiny
         Description     : USBtiny simple USB programmer, https://learn.adafruit.com/usbtinyisp
avrdude: programmer operation not supported

avrdude: Using SCK period of 10 usec
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e930b (probably t85)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: Using SCK period of 10 usec
avrdude: reading input file "C:\Users\chocoball\AppData\Local\Temp\arduino_build_87390/sketch_nov06a.ino.hex"
avrdude: writing flash (700 bytes):

Writing | ####avrdude: 5 retries during SPI command
#####avrdude: 7 retries during SPI command
####avrdude: 8 retries during SPI command
#####avrdude: 7 retries during SPI command
####avrdude: 7 retries during SPI command
#####avrdude: 8 retries during SPI command
####avrdude: 9 retries during SPI command
#####avrdude: 8 retries during SPI command
####avrdude: 8 retries during SPI command
#####avrdude: 8 retries during SPI command
##### | 100% 0.42s

avrdude: 700 bytes of flash written
avrdude: verifying flash memory against C:\Users\chocoball\AppData\Local\Temp\arduino_build_87390/sketch_nov06a.ino.hex:
avrdude: load data flash data from input file C:\Users\chocoball\AppData\Local\Temp\arduino_build_87390/sketch_nov06a.ino.hex:
avrdude: input file C:\Users\chocoball\AppData\Local\Temp\arduino_build_87390/sketch_nov06a.ino.hex contains 700 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.13s

avrdude: verifying ...
avrdude: 700 bytes of flash verified

avrdude done.  Thank you.


자세한 과정 log 는 위와 같습니다. 동영상으로도 올려 봅니다.



좀더 다른 sketch 는 다음 링크를 참고해 보세요.


* Programming with Arduino IDE

https://learn.adafruit.com/introducing-trinket/programming-with-arduino-ide


Duemilanove 다음으로 성공한, 두 번째 arduino DIY 되겠습니다.

모두 Happy DIY!


And

Hardware | ATtiny85 개발 보드를 이용하여 Digispark 를 DIY 하기

|

마침내 깡통 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

micronucleus-master.zip


다음으로, 최종 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

https://github.com/digistump/DigistumpArduino/releases

Digistump.Drivers.zip




그러면, 아래처럼 장치 관리자에서 잠깐 떳다가 사라집니다.

장치 관리자 메뉴에서 "숨겨진 장치 보이기"로 하면, 불분명한 장치로 인식되어 있습니다.



해당 장치에서 마우스 오른쪽 클릭으로 드라이버 설치를 선택 후,

아까 다운로드 받은 드라이버를 해동시킨 폴더를 선택해 줍니다.



짜잔~~~!!!

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~!!!

And

Hardware | ATtiny85 를 사용해 보자 - 2

|

1. 준비물


ATtiny85 에 구동 program 를 업로드 하기 전에, 구성품 준비가 필요합니다.

관련해서는 다음에 링크된 이전글을 참고해 주세요.


* Hardware | ATtiny85 를 사용해 보자 - 1

http://chocoball.tistory.com/entry/Hardware-ATtiny85-1



참고로 ATtiny85 의 datasheet 는 다음과 같습니다.

Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet.pdf





2. 참조 사이트


ATtiny85 에 프로그램 업로드를 위해서는 몇가지 방법이 있지만,

저는 다음 사이트를 기준으로 참고하였습니다.


* Breathing life into the DigiSpark clone with ATtiny MCU

https://makbit.com/web/firmware/breathing-life-into-digispark-clone-with-attiny-mcu/




3. Arduino - ArduinoISP


자, 이제 준비가 완료 되었으니 이제 시작을 해 볼까요?


ATtiny85 에 프로그램을 심으려면,

바로 PC 와 USB를 통해 연결하면 안되고 "PC -- USB -- Arduino -- ATtiny85" 식으로 연결하여 프로그래밍 할 수 있습니다.


중간에 위치한 Arduino 를 브릿지 형식으로 사용하는 것입니다. 이름하야  In-circuit Serial Programmer (ISP) 라는군요.

이를 위해, Arduino 가 ISP 로 동작할 수 있도록 Arduino 에 ISP 프로그램을 업로드 해줍니다.


File > Examples > 11.ArduinoISP > ArduinoISP 



이걸로 Arduino 쪽의 준비는 끝났습니다.




4. Arduino IDE - Perferences


다음으로 IDE의 Preferences 메뉴로 이동하여 ATtiny85 보드를 Arduino 에서 인식시킬 수 있도록 관련된 library 를 인스톨 합니다.

이를 위하여, 다음 URL 중 하나를 Preferences 의 Boards Manager URLs 에 다음 중 하나를 선택하여 입력해 줍니다.


* ATtinyCore

- http://drazzy.com/package_drazzy.com_index.json

* Digispark

- http://digistump.com/package_digistump_index.json


File > Preferences > Additional Boards Manager URLs



보통은 Digispark 용을 사용해도 되나,

Spence Konde 라는 사람이 만든 ATTinyCore 는 좀더 정밀하게 설정할 수 있고, 문제 없이 동작한다고 합니다.


* Spence Konde

https://github.com/SpenceKonde/ATTinyCore


저는 Spence Konde 를 선택했습니다.




5. Arduino IDE - Board Manager


다음으로 ATtinyCore 라이브러리를 Board Manager 를 통해 설치합니다.


Tools > Board > Board Manager > search "ATtinyCore"



위의 과정까지 거치면, 아래처럼 Board 에서 ATtiny85 를 선택할 수 있습니다.





6. Arduino IDE - Programmer


이제 마지막으로 운용할 Programmer 를 선택합니다.

이미 우리는 Arduino 를 ISP 로 사용할 것을 알기에, "Arduino as ISP" 를 선택하면 됩니다.


ATtinyCore 라이브러리가 설치되어 있으므로, "Arduino as ISP (ATtinyCore)" 를 선택해도 됩니다만,

왠지 default 로 제공되는 것을 사용하고 싶어서 "Arduino as ISP" 를 선택했습니다.


어느쪽을 선택해도 문제없을것 같아요.



이제 Arduino IDE 에서의 준비는 끝났습니다.




7. Layout


ATtiny85 의 Pin 배열은 다음과 같습니다.



위의 그림을 참조하여 Arduino 와 ATtiny85 를 다음과 같이 연결합니다.


  ATtiny85  | Arduino Nano
---------------------------
    VCC     |     5V
    GND     |     GND
    Reset   |     D10
    Pin 0   |     D11
    Pin 1   |     D12
    Pin 2   |     D13
---------------------------


추가로 Arduino 의 GND/RESET 에 10uF 캐패시터를 연결해 줍니다.

이유는 Arduino 가 ATtiny85 에 업로드 할 때, auto reset 을 방지하기 위함이라 합니다.



실제 모양은 다음과 같아요.

그간 고생해서 얻은 "DIP to SOIC converter" 가 빛을 발하는 순간입니다.



이제 물리적인 구성은 완료 되었습니다.




8. sketch


소스는 아래 link 를 참조하였습니다.

깜빡이 간격이 좀 짧은것 같아 increment / decrement 를 5에서 1로 변경했습니다.


* Attiny85 blink fade for loop 3 LED

https://codebender.cc/sketch:354605


해당 소스는 단순히 LED 를 깜빡이게 하는것 외에도,

PWM (Pulse With Modulation) 기법을 이용하여 LED 점등을 fade 효과를 낸 것입니다.


/*
This code will allow you to mix fading and blinking on 3 LEDs
Jill Dawson
*/

int Pin0 = 0;	// LED connected to pwm pin 0, which can blink or fade
int Pin1 = 1;	// LED connected to pwm pin 1, which can blink or fade
int Pin2 = 2;	// LED connected to digital pin 2, which can only blink

void setup() {
	// nothing happens in setup
	// declares pins as outputs
	
	pinMode (0, OUTPUT);
	pinMode (1, OUTPUT);
	pinMode (2, OUTPUT);
} 

//Loop repeats
void loop() {
	// fades pin 0 in from min to max in increments of 5 points
	for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1) {
		// sets the value (range from 0 to 255):
		analogWrite(Pin0, fadeValue);
		// wait for 30 milliseconds to see the dimming effect
		delay(30);
	}
	
	// fades pin 0 out from max to min in increments of 5 points
	for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=1) {
		// sets the value (range from 0 to 255):
		analogWrite(Pin0, fadeValue);
		// wait for 30 milliseconds to see the dimming effect
		delay(30);
	}
	
	// blinks LED 1 three times
	{
		digitalWrite (1, HIGH);	//turns pin 1 on
		delay (1000);			//waits for 1 second
		digitalWrite (1, LOW);	//turns pin 1 off
		delay (1000);			//waits for 1 second
		digitalWrite (1, HIGH);	//turns pin 1 on
		delay (1000);			//waits for 1 second
		digitalWrite (1, LOW);	//turns pin 1 off
		delay (1000);			//waits for 1 second
		digitalWrite (1, HIGH);	//turns pin 1 on
		delay (1000);			//waits for 1 second
		digitalWrite (1, LOW);	//turns pin 1 off
	}
	
	// blinks LED 2 three times
	{
		digitalWrite (2, HIGH);	//turns pin 2 on
		delay (1000);			//wait for 1 second
		digitalWrite (2, LOW);	//turns pin 2 off
		delay (1000);			//waits for 1 second
		digitalWrite (2, HIGH);	//turns pin 2 on
		delay (1000);			//wait for 1 second
		digitalWrite (2, LOW);	//turns pin 2 off
		delay (1000);			//waits for 1 second
		digitalWrite (2, HIGH);	//turns pin 2 on
		delay (1000);			//wait for 1 second
		digitalWrite (2, LOW);	//turns pin 2 off
		delay (1000);			//waits for 1 second
	}
	
	// fades pin 1 out from max to min in increments of 5 points
	for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1) {
		// sets the value (range from 0 to 255):
		analogWrite(Pin1, fadeValue);
		// wait for 30 milliseconds to see the dimming effect
		delay(30);
	}
	
	// fades out from max to min in increments of 5 points:
	for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=1) {
		// sets the value (range from 0 to 255):
		analogWrite(Pin1, fadeValue);
		// wait for 30 milliseconds to see the dimming effect
		delay(30);
	}
}


Arduino IDE 에서 업로드 합니다.



AVR Part 항목을 보면 ATtiny85 로 정확히 인식합니다.



ATtiny85 에 FLUSH 가 성공하면 위와 같이 문제없이 완료가 됩니다.




9. 결과


짜잔~!





FIN


이제 ATtiny85 에 프로그램을 업로드 하여 standalone 으로 동작하는 것까지 확인할 수 있었습니다.


"ATtiny85 + DIP to SOIC adapter + USB board" 를 USB 에 직접 연결하여,

Arduino ISP 없이도 Digispark 처럼 프로그램을 업로드 할 수 있는게 목표므로, 다음 글에서 구성해 보도록 하겠습니다.


And

Hardware | ATtiny85 를 사용해 보자 - 1

|

1. 시작


Arduino Nano 를 사용하고 있지만, 실제 프로젝트 구성시 이렇게 많은 핀들이 필요할지 의문이 드는 때가 있습니다.

인터넷을 돌아다니다 보면, Arduino 본체는 아니지만 소스코드는 거의 동일하지만, chip 은 조그마한 것이 사용된 것을 볼 수 있습니다.


그 이름하야 ATtiny85.


Arduino Nano 에 들어가는 chip 이 Atmel 사의 MEGA328P 인데,

이 ATtiny85 의 생산회사도 Atmel 사 입니다.



이 ATtiny85 는 두가지 package 가 존재합니다.

하나는, 아래 보이느 DIP8 형태 (다리가 8개 벌레같은 칩) 의 ATtiny85.


'

다른 하나는, SOIC 형태 (납착한 보드 납땝식) 의 ATtiny85 입니다.



다리는 8개밖에 없는지라, power / ground 빼면 6개 이고, chip control 하는 1번을 빼면,

실제 가용할 수 있는 pin 수는 5개가 되겠군요.



실제 project 상에서 사용되는 Pin 수는 그리 많지 않기때문에,

간단한 sensor 를 이용하여 기능 구현할 때에는 Arduino 보단, 이런 ATtiny85 를 사용하는 것이 훨씬 경제적으로 보입니다.


- 장소 차지가 적다

- Power가 더 적게 먹을 것이다

- 기판 적층시 component 처럼 실장할 수 있다




2. 최종 모양


ATtiny85 에 프로그램을 upload 하기 위해서는, FTDI 나 Arduino ISP 모드를 이용하여 8k 자체 메모리에 업로드 해야 합니다.


위의 방법이 일반적이지만, 아래 그림의 처럼

직접 Arduino IDE 에서 프로그래밍 하여 USB를 통해 upload 할 수 있는, Digispark 모양으로 만들고 싶었습니다.


* Digispark

http://digistump.com/products/1



클라우드펀딩인 Kickstarter 에서도 큰 방향을 일으킨 제품입니다.


* Digispark - The tiny, Arduino enabled, usb dev board!

https://www.kickstarter.com/projects/digistump/digispark-the-tiny-arduino-enabled-usb-dev-board



지금까지 내용을 정리하면 최종 모습은 아래와 같은 모양이 됩니다.


- SOIC 형태

- Digispark 처럼 USB 를 통한 개발 보드 형태


알리에서 검색해 보면, DIP 소켓 을 사용하여 Digispark 처럼 사용할 수 있게 해주는 보드가 있습니다.

그럼 위의 DIP 소켓을 SOIC 로 변환해주는 adapter 를 이용하면, 최종적으로 SOIC를 사용할 수 있겠군요.



이제 구상이 끝났으니 AliExpress 에서 구입을 진행해 봅니다.




2. 구입 - ATtiny85


먼저 SOIC 타입의 ATtiny85 를 구매합니다.


* Free Shipping 5PCS Original Integrated circuit parts ATTINY85 ATTINY85-20SU

https://www.aliexpress.com/item/Free-Shipping-5PCS-Original-Integrated-circuit-parts-ATTINY85-ATTINY85-20SU/32318325945.html



5개에 1만원 정도이니, 여타 다른 chip 들에 비하면 비싼 편 입니다.



릴 package 를 끊어서 보내줬군요.



확대해서 보면 Atmel 사의 TINY85 라고 쓰여 있습니다.



여기서 잠깐, 구매한 ATtiny85 는 20SU 라는 코드가 달려 있습니다.

제품사양을 보면 20SH 는 좀더 비싸고, 20SU 는 조금 더 쌉니다. 기호의 의미는 다음과 같다고 하네요.


– H: NiPdAu lead finish

– U: matte tin


U는 주석이고, H 는 NiPdAu (Nickel-Palladium-Gold) 로 납땜시, 더 확고하고 쉽게 접합된다고 합니다.



이렇게까지 전문적으로 아직 필요가 없으므로, 무난하게 20SU 버전으로 구입합니다.




3. 구입 - USB board


ATtiny85 chip 을 엊고 USB 를 연결하게 할 수 있는 보드를 구매합니다.


물론 ATtiny85 가 DIP 소켓에 꽂혀 있는 일체형이나 SOIC chip 이 납땜되어 있는 버전도 팔지만,

SOIC 를 바꿔 끼울 수 있도록 adapter 를 사용할 것이기에 깡통 USB 보드를 선택합니다.


* ATtiny13A/ATtiny25 /ATtiny45/ATtiny85 Pluggable Development Programming Bare Board

https://www.aliexpress.com/item/Free-Shipping-ATtiny13A-ATtiny25-ATtiny45-ATtiny85-Pluggable-Development-Programming-Bare-Board/32706943203.html



배송 포함 1천원정도니 부담없습니다.



잘 도착해서 보니, 기판 찌꺼기가 같이 붙어 있네요.

뭐 이 가격이니 이해할 수 있습니다.



뒷면입니다.



기판 찌꺼기는 펜치로 잡고 구부리면 쉽게 제거됩니다.



제거되면 기분이 뭔가 좋아집니다. 이런 즐거움도 선사해 주는군요.



나중에 adapter 가 도착하여 ATtiny85 와 채결할 때, 호기심으로 1번 핀을 거꾸로 채결해 봤더니 연기가 나더군요.

(나중에 안 사실이지만, 이 연기는 솔더링 잘되라고 도포된 약품이 레귤레이터 열로 증발한 것)


USB 연결시에 PC 에서 인식 못하는 문제가, 이 태워먹은 결과라고 잘못 생각하고 바로 2개를 추가로 주문했습니다.

(USB 를 연결하여 Digispark 처럼 사용하려면, 필요한 과정이 더 있슴)



총 3개가 되었군요.




4. 구입 - DIP to SOIC converter


USB 의 DIP 소켓을 SOIC 를 엊을 수 있게 하는 adapter / converter 를 주문합니다.


* SOIC8 SOP8 to DIP8 EZ Socket Converter Module Programmer Output Power Adapter With 150mil Connector SOIC 8 SOP 8 To DIP 8

https://www.aliexpress.com/item/SOIC8-SOP8-to-DIP8-EZ-Socket-Converter-Module-Programmer-Output-Power-Adapter-With-150mil-Connector-SOIC/32613388551.html



잘 도착했습니다.



포장도 잘 되어 있네요.



정전기 방지 포장까지 되어 있습니다.



위에서 누르면 가운데 금속 다리가 벌어져 SOIC chip 을 끼울 수 있는 구조 입니다.


음?

그렇습니다. USB 의 DIP socket 과 맞지 않습니다. (이런 고추장....)
또한 SOIC chip 을 끼우는 가운데 공간도 좁아, ATtiny85 도 들어가지 않습니다.

알고보니 150mil 규격이 아니라 200mil 을 구매해야 했던 것이였습니다.
ATtiny85 의 스펙을 살펴보면, chip 몸채가 5.18 mm 인걸 알수 있습니다. (아래그림 E1)


이것에 대응하는 것이 200mil SOIC 소켓 입니다.


Chip 규격이 다양한 만큼 알아야 할것도 많네요.

AliExpress 의 무료배송 마약때문에, 새로 구입한 converter 가 도착하려면 최소 2주 이상을 또 기다려야 합니다.

이거 하나 하는데 도대체 얼마나 기다려야 하는겨.


가끔 AliExpress 를 통한 놀이는 기다림이 대부분인것 같습니다.

기다리다가 열정이 식어버려, 다시 끌어올리는데 시간이 많이 걸리는 경우가 있어요.




5. 구입 - 또다른 DIP to SOIC converter


이제 정확한 제품 규격을 알게 되었으니 제대로 구입합니다.

제품명에 "Universal" 이라는 문구가 왠지 신뢰갑니다.


* Universal Adapter Sockets SOP8 SOP 8 to DIP8 DIP 8 for all Programmer 200 208 mil

https://www.aliexpress.com/item/Universal-Adapter-Sockets-SOP8-SOP-8-to-DIP8-DIP-8-for-all-Programmer-200-208-mil/32680997921.html



드.디.어! 정확한 converter 가 도착 했습니다.



대충 포장되어 있더라도 상관 없습니다.



아아아아아! 이거 얼마나 걸린거야.




6. 최종 모습


겨우 최종 결과 모습이 되었습니다.

별것도 아닌것 같은데 너무 오래 걸렸네요.



USB 보드 + DIP to SOIC adapter + ATtiny85 구성 입니다.



모두 합체하면 이렇게 되죠.




FIN


여기까지 오는데 너무 힘을 빼서, 실제 Arduino IDE 를 이용한 program uploading 은 다음 편에서 다루도록 하겠습니다.


And
prev | 1 | next