'bootloader'에 해당되는 글 4건

  1. 2019.11.07 Hardware | Arduino Gemma 를 DIY 해보자 2
  2. 2019.10.25 Hardware | Arduino 를 DIY 해보자 - 3
  3. 2018.12.14 Hardware | ATtiny85 개발 보드를 이용하여 Digispark 를 DIY 하기
  4. 2018.12.11 Software | Arduino Nano Bootloader 를 update 해보자

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 | Arduino 를 DIY 해보자 - 3

|

이 글은 아래 Arduino 를 직접 만들어보는 작업의 3편이 되겠습니다.


* 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




0. Duemilanove


저번에 실패한 Arduino Nano 는 뒤로 하고, 이번에는 Duemilanove 입니다.


위는 정품 layout 이고, 밑에 사진이 이번에 작업할 보드 입니다.






1. Part list


Arduino Duemilanove 에 들어가는 부품 리스트 입니다.

아래 리스트는 보드프리의 PDF 파일과 arduino 사이트에서 EAGLE 파일을 참고하였습니다.


* 보드프리

BL-381(BOM).pdf

BL-381(duemilanove).pdf

* Arduino

arduino-duemilanove-schematic.pdf

arduino-duemilanove-reference-design.zip


-------------------------------------------------------------------------------------------------------
|                  name                  | value         | type                                       |
-------------------------------------------------------------------------------------------------------
| C1, C4, C5, C8, C9, C10, C11, C12, C13 | 100nF         | 0805 SMD                                   |
| C2, C3                                 | 22pF          | 0805 SMD                                   |
| C6, C7                                 | 100uF 35V     | Aluminum Electrolytic Capacitor            |
-------------------------------------------------------------------------------------------------------
| R1, R10, R11                           | 10k Ohm       | 0805 SMD                                   |
| R4, R5, R6, R7, R8, R9                 | 1k Ohm        | 0805 SMD                                   |
| L, PWR, RX, TX                         | LED           | 0805 SMD                                   |
-------------------------------------------------------------------------------------------------------
| D1                                     | M7 (1N4007)   | Rectifier Diode                            |
| F1                                     | 500mA 15V     | L1812 Resetable Fuse                       |
-------------------------------------------------------------------------------------------------------
| J1, J3                                 | 8             | single row female 2.54mm pitch pinhead     |
| J2, POWER                              | 6             | single row female 2.54mm pitch pinhead     |
| ICSP                                   | 6             | double row male 2.54mm pitch pinhead       |
| S1                                     | B3F-10XX      | OMRON B3F-10XX series switch               |
| X2                                     | DC-21MM       | 5.5/2.1mm female DC power jack plug socket |
| X4                                     | USB B type    | USB B type female socket                   |
-------------------------------------------------------------------------------------------------------
| IC1                                    | ATMEGA328P-PU | DIP28 8-bit Microcontroller                |
| IC2                                    | FT232RL       | SSOP28 USB UART interface IC               |
| IC4                                    | MC33269D-5.0  | 5V 800mA LDO voltage regulator             |
| IC5                                    | LM358D        | SOP8 Op Amp                                |
| Q2                                     | 16MHz         | HC-49S crystal oscillator                  |
| T1                                     | NDT2955       | SOT-23 MOSFET                              |
-------------------------------------------------------------------------------------------------------
| R2                                     | 100_NM        | no need to implement "no-mount"            |
| RESET-EN                               | jumper        | "auto-reset" on ATmega168                  |
| X3                                     |   JP4         | use like FTDI breakout board               |
-------------------------------------------------------------------------------------------------------


이제 위의 리스트를 가지고 하나씩 구매한 이력을 남겨 봅니다.


그냥 arduino duemilanove 하나 사면 3천원대에서 clone 제품을 구할 수 있으나,

이참에 준비하면서 부품들도 구해보고, 사용법도 알아보고 공부하기 위한 목적으로 진행했습니다.





2. Pin Header


외부 기기와 연결되기 위한 Pinout 용 Header 입니다.


기존에 보유하고 있는 긴 한줄읠 pin header 를 잘라서 사용할 수 있으나, 지저분해 질 수 있고,

깔끔하게 보이고 싶어서 궂이 구입했습니다.


* Single row female 2.54mm Pitch PCB Female Pin Header Connector Straight Single Row 2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/20/40Pin

https://www.aliexpress.com/item/Single-row-female-2-54mm-Pitch-PCB-Female-Pin-Header-Connector-Straight-Single-Row-2-3/32838866439.html



도착은 주문한데로 6pin 용과 8pin용, 10개씩 배달되었습니다.



요로코롬 생겼습니다.






3. Fuse


실장되는 Fuse 는 전기적인 규격이 동일하고, 과전류가 흐른 뒤 다시 스스로 복구되는 Self Healing (Self Resetting) Fuse 입니다.


* 20PCS/LOT 1812 SMD SMD self-healing fuse 0.5A 500mA 15V MF-MSMF050-2

https://www.aliexpress.com/item/20PCS-LOT-1812-SMD-SMD-self-healing-fuse-0-5A-500mA-15V-MF-MSMF050-2/32842202101.html



무리없이 도착.



수령한 제품은 웹사이트에서 본 사진과는 다르지만, 한번 믿고 써보기로 합니다.





4. Oscillator


CPU를 돌리고 명령어를 전달하는 역할을 하는 oscillator 입니다.


* hc-49s Crystal Oscillator electronic Kit resonator ceramic quartz resonator hc-49 DIP 7 kinds X 5pcs 32.768K 4 8 12 16 20 25 MHZ

https://www.aliexpress.com/item/hc-49s-Crystal-Oscillator-electronic-Kit-resonator-ceramic-quartz-resonator-hc-49-DIP-7-kinds-X/32844442076.html



필요한건 16 Mhz 이지만, 낱개로 파는 경우는 없어서 세트로 구매합니다.



요로코롬 생겼네요.






5. LED


아래 링크의 제품을 구매하면 필요한 색깔이 모두 들어 있습니다.

* 100pcs=5colors x 20pcs 5050 5730 1210 1206 0805 0603 LED Diode Assortment SMD LED Diode Kit Green/ RED / White / Blue / Yellow




이왕이면 한꺼번에 받기위해 한 업체에 몇가지를 같이 주문하였습니다.



왠지 LED 부품은 받을때마다 기분이 좋습니다.






6. Capacitor


Capacitor 는 세라믹과 둥그런 알루미늄 캡 캐패시터 두가지를 사용합니다.


* MCIGICM 100pcs 0805 smd capacitor ceramic 22pf 100nf 1uf 2.2uf 4.7uf 10uf 47uf 22uf capacitors kit sets 0.5pF-47uF


부품이 많다 보니, 10uF 은 빼고 처음 주문을 넣어버려, 다른거 주분할 때 같이 주문했습니다.



0805 SMD 버전이라 100개씩 묶음이라고 해도 배송 용량이 적네요.



알루미늄 캡 캐패시터는 LED 구입한 업체에서 같이 구입해서 이미 도착했습니다.


* Free Shipping 20pcs SMD 50V 35V 25V 16V 10V 100UF 220UF 47UF 33UF 22UF 10UF 4.7UF 2.2UF 1UF Aluminum Electrolytic Capacitor


100uF 35V 버전입니다. 사양서에는 25V로 정의되어 있으나, 보다 더 넓은 영역에서 동작할 수 있는 35V 를 구매.
여러 사이트를 뒤져봐도 캐패시터 용량 큰거는 문제 없다고 합니다.





7. Resistor


저항은 1K 와 10K 두가지가 필요합니다.


* 20Value * 20PCS =400PCS 0805 SMD Resistor Kit 1% 1/8W (10 ohm~1M ohm) component diy samples kit free shipping


위의 세트구성은 다음과 같습니다.

10R / 22R / 47R / 100R / 220 / 470R / 750R / 1K / 2K2 / 4K7 / 6K8 / 10K

22K / 47K / 75K / 100K / 220K / 470K / 750K / 1M



* 2000pcs 0805 SMD Resistor Kit Assorted Kit 1ohm-1M ohm 5% 80valuesX 25pcs=2000pcs Sample Kit

https://www.aliexpress.com/item/5-0805-SMD-resistor-pack-80-kinds-of-commonly-used-precision-resistor-for-each-25-Total/32297723532.html



위의 세트구성은 다음과 같습니다.


10 / 100 / 1K / 10K / 100K

12 / 120 / 1K2 / 12K / 120K

15 / 150 / 1K5 / 15K / 150K

20 / 200 / 2K / 20K / 200K

22 / 220 / 2K2 / 22K / 220K

27 / 270 / 2K7 / 27K / 270K

30 / 300 / 3K / 30K / 300K

33 / 330 / 3K3 / 33K / 330K

39 / 390 / 3K9 / 39K / 390K

47 / 470 / 4K7 / 47K / 470K

51 / 510 / 5K1 / 51K / 510K

62 / 620 / 6K2 / 62K / 620K

68 / 680 / 6K8 / 68K / 680K

75 / 750 / 7K5 / 75K / 750K

82 / 820 / 8K2 / 82K / 820K

91 / 910 / 9K1 / 91K / 910K



엄청 작네요. 이것이 0805 SMD 저항이군요.






8. Switch


이전 Wi-Fi 모듈을 firmware upgrade 하기 위해 구입한 tactile switch 에 포함되어 있어,
이번에 추가로 구입하지 않았습니다.

* Hardware | 스위치 부품 구매하기


* Smart Electronics 10 Kinds of Tactile Switches Push Button SMD Tact Switch Switch 100pcs


도착한 PCB 에 필요한 부품은 through hole 부품이네요.
SMD 부품도 같이 있어서 필요시에는 SMD 버전을 사용해도 될 것 같습니다.




9. Diode


M7 은 1N4007 이라는 diode 의 별칭인 것이라는 것을 처음 알았습니다.

* 7 kinds*10pcs=70pcs/lot SMD diode package / M1 (1N4001) / M4 (1N4004) / M7 (1N4007)/ SS14 US1M RS1M SS34 KIT



LED 도착시 같이 왔습니다. 생각보다 이것도 크기가 꽤 작네요.






10. FT232RL


USB 통신을 위한 controller 입니다.

ATmega328P 는 CPU 자체에 USB 컨트롤러 부분이 없어서 이렇게 추가 USB controller chip 이 필요합니다.


참고로, Arduino Micro 에 사용되는 ATmega32U4 는 내장 USB controller 가 있어,

이렇게 추가 USB controller chip 이 필요 없습니다.


* 5pcs/lot New FT232RL FT232 FTDI USB FS SERIAL UART SSOP28 serial chips imported original In Stock


이제야 chip 들이 도착하는군요.



이번에 구입한 FTDI chip 은 마킹이 깔끔해 보여서 흔한 fake chip 은 아닌 듯 합니다.

모두 조립 후, 한번 확인해 볼께요.






11. Voltage regulator


5V 800mA 용량의 레귤레이터 입니다.

좀더 큰 용량으로 하고 싶었으나, 이쪽 지식이 충분치 않고, 과전류시 chip 들의 안전이 보장되지 않기에 스펙대로 구매했습니다.


* Free shipping 10pcs/lot MC33269DT-5.0G 5V .8A MC33269DT-5. 33269DT MC33269DT 33269DT MC33269 MC33269DT-5.0RKG

https://www.aliexpress.com/item/Free-shipping-5pcs-lot-MC33269DT-5-0G-5V-8A-MC33269DT-5-33269DT-MC33269DT-33269DT-MC33269-MC33269DT/32826048602.html



배송 포장 표기는 Cable Tools... 무엇?



전압/전류 관련 부품이다 보니, 다른 부품들보다 크기가 큽니다.






12. DC power jack plug socket

일전에 Transistor Tester 를 DIY 할 때, power jack 의 안쪽 심 두께가 달라서 기존 adapter 들을 사용 못하는 상황이 있었습니다.
결국 맞는 사양으로 이식했고, 그 뒤로 내경이 2.1mm 용으로만 통일하고 있습니다.

다행히 Duemilanove 스펙에도 5.5/2.1mm 사양으로 되어 있네요.

* 10Pcs PCB Mount 5.5 x 2.1 mm Female DC Power Black Jack Plug Socket Connector G08 Drop ship


잘 도착했구요.


내경도 2.1mm 인듯 하구요.


기존 DC adapter 에도 잘 맞습니다.



PCB 에도 맞춰 보니 문제 없네요.






13. ATmega328P

드디어! main chip 인 ATmega328P 입니다.

* 1PCS ATMEGA328P-PU DIP28 ATMEGA328-PU DIP ATMEGA328P U DIP-28 328P-PU new and original IC



중요 부품이지만, 그런거 없습니다. 여타 부품처럼 평이하게 도착했습니다.



선명하게 CPU 마킹이 되어 있습니다. Socket 이랑 같이 찍어봤습니다. 이쁘다...






14. DIP28 Socket

ATmega328P 을 얹일 DIP28 socket 입니다.

* 5pcs DIP-28 Round Hole 28 Pins 2.54MM DIP DIP28 IC Sockets Adaptor Solder Type 28 PIN 2.54 IC Connector

https://www.aliexpress.com/item/10pcs-Round-Hole-28-Pins-2-54MM-DIP-IC-Sockets-Adaptor-Solder-Type-28-PIN-2/32799885322.html




구멍이 round hole 과 lead 방식이 있습니다.

자주 chip 을 뺏다 꼈다 할 경우에 round hole 이 장점이 있고, lead 방식은 오랜동안 그냥 놔둘 경우 좋다고 합니다.


사실 lead 방식이 접점이 확실합니다.

다만, 이왕 하는 김에 고급지게 해보고자 round hole 타입을 구매해 봤습니다.

round hole 은 금속 다리 부분이 주조 방식으로 제작되므로 좀더 비쌉니다. 그리고 점점도 나쁘지 않아요.



PCB 에 잠깐 얹어 봤습니다. 아주 부드럽게 잘 맞습니다.






15. SOP8 OP AMP

다리가 8개인 OP AMP 입니다.


* 50PCS LM358DR SOP8 LM358 SOP LM358DT SOP-8 SMD LM358DR2G new and original IC

https://www.aliexpress.com/item/10PCS-LM358DR-SOP8-LM358-SOP-LM358DT-SMD-LM358DR2G-new-and-original-IC-free-shipping/32533323519.html



ATmega328P 과 함께 도착한 부품입니다.






16. SOT-23 MOSFET

Transistor 의 digital 버전이라고 불릴 수 있는 MOSFET 입니다.


* HMICICAWK Original 100% NEW 2955 NDT2955 SOT-223 10PCS/LOT

- https://www.aliexpress.com/item/NDT2955-DT2955-T2955-2955-SOT-223-Original-100-NEW-10PCS-LOT/32734398979.html



씌여진 문구에 SOT-223 이라고 되어 있습니다만, 배송된 것은 DPAK 버전으로 큰게 왔습니다.



크고 좋아보입니다만 보드에 맞질 않습니다.



Dispute 환불을 걸고 다른 업자에게 주문했더니만, SOT-233 버전을 또 보냈더랬습니다.



마킹이 조금 이상합니다만 문제 없겠죠?



다시 보낸다는 이야기가 없어, 다른 판매자에게 이미 주문을 또 했더랬습니다.


* BQ24040DSQR AP3608EG-G1 SN74LVC2G66DCTR NDT2955 MMFT2955 NTF2955 SP202EEN IR2153S STP100N8F6 MBR40100CT TPS60400DBVR D15XB80

https://www.aliexpress.com/item/BQ24040DSQR-AP3608EG-G1-SN74LVC2G66DCTR-NDT2955-MMFT2955-NTF2955-SP202EEN-IR2153S-STP100N8F6-MBR40100CT-TPS60400DBVR-D15XB80/32908941557.html



SOT-233 버전의 MOSFET 이 또 왔어!



이놈은 마킹이 프린팅 되어 있네요.






16. 실장

모든 부분이 준비되었고, SMD 실장을 위한 Flux Paste 와 오븐이 구비되었으니, 작업을 시작합니다.
(대략 준비기간 1년.... 눈물)



대략 실장될 부품을을 위치 시켜보구요.



Flux Paste 를 바르면서 진행해야 하므로, 부품들이 도망가지 않게 테이프에 layout 에 맞게 안착/준비 시켜 놓습니다.



한땀 한땀... 이라고 하기엔 다소 지저분하게 작업을 진행합니다.



오븐을 통해 구워져 나오진 첫번째 Duemilanove 작품.



온도 조정에 실패해, 흰색 기판이 빵색으로 되었습니다.

결국 LED 극성을 거꾸로 해버려, 부품 때어 내다가 패턴이 나가는 사태가... 폐기 처분.



꽤 시간이 지난 후, 다시 새로 PCB 받아서 심기일전, 다시 시작.



이번에는 Flux Paste 를 적정량 도포할 정도로 실력이 조금 향상.



구워지기 전 사진.



오븐에 구워져 나온 후, USB, Power Jack, Pin header, Switch 등등, CPU 만 빼고 모두 장착.



마지막으로 CPU 장착.... 아... 감격.




17. bootloader


이제, arduino 를 IDE 등을 통해 소스코드 넣고 동작시키려면 bootloader 를 올려야 합니다. 지금은 완전 깡통 상태.



위의 사진의 ICSP 부분을 통해서 bootloader 를 밀어 넣을 수 있습니다.



연결법은, 예전 bootloader update 할 때의 방법과 동일합니다.


* Software | Arduino Nano Bootloader 를 update 해보자

https://chocoball.tistory.com/entry/Software-Arduino-Nano-Bootloader-update



========================================
| Source (Nano) | Target (Duemilanove) |
========================================
|      D12      |     MISO  (pin 1)    |
|      5V       |     5V    (pin 2)    |
|      D13      |     SCK   (pin 3)    |
|      D11      |     MOSI  (pin 4)    |
|      D10      |     RESET (pin 5)    |
|      GND      |     GND   (pin 6)    |
----------------------------------------


처음 작업 시, Arduino Micro 를 활용해서, 스샷이 이렇게 되었네요. 소스 아두이노를 Nano 로 하면 Nano로 선택.



Source 아두이노에 "Arduino ISP" 스케치를 올립니다.



Programmer 를 "Arduino as ISP" 를 선택.



이제 다른건 다 놔두고, target arduino 기종을 선택. 대망의 Duemilanove 선택!



"Burn Bootloader" ~~~~~~~~~~!!!



동영상은 예의.



크아~~~~ 성공.



1년 이상 걸려서 조금 지친감이 없지 않아 있지만, 기분 너무 좋습니다.

이제 자가 Arduino Duemilanove 가 생겨, 다양한 프로젝트를 동시에 할 수 있는 여유가 생겼습니다.


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

Software | Arduino Nano Bootloader 를 update 해보자

|

1. upload 가 이상해


어느때 부턴가 arduino 에 sketch 를 upload 하면 다음과 같이 에러를 냈습니다. 뿜뿜~.



뭐지? 하고 찾아보다가 보니 bootloader 가 새롭게 업데이트 되면서 발생한 문제라고 하는군요.

Arduino IDE 가 업데이트 되면서 자동으로 바뀐것 같습니다.


기존에 선택되어 있던 "Processor : ATmega328P" 이 아니라...



아래와 같이 Processor 의 종류를 "ATmega328P (Old Bootloader)" 로 바꾸어서 upload 하면 해결 됩니다.


Tools > Processor > ATmega328P (Old Bootloader)



찾아보니 이런 내용이 올라와 있네요.

제가 즐겨 쓰는 arduino nano 버전에 사용되는 ATmega328P 에만 관련이 있어 보입니다. (Uno 도 마찬가지?)


* Getting Started with the Arduino Nano

- https://www.arduino.cc/en/Guide/ArduinoNano



일단 해결은 되었으니, 당시에는 급하게 Bootloader 까지 업데이트 할 필요는 없었습니다.





2. Bootloader 를 업데이트 해보자


새로 올라온 Nano 용 Bootloader 는 몇가지 장점이 있다고 합니다.


* Arduino Nano ATmega328P bootloader difference

https://arduino.stackexchange.com/questions/51866/arduino-nano-atmega328p-bootloader-difference


1. Optiboot will not go into an endless reset loop after a watchdog reset. ATmegaBOOT will.


2. Optiboot expects the upload communication at 115200 baud. ATmegaBOOT, 57600.

This is the reason why the old boards don't work with the Tools > Processor > ATmega328P selection and vice versa.


watchdog 을 리셑 후, 무한루프에 빠지는 문제와, 통신 속도가 달라졌다고 합니다. (저는 못느꼈던 부분....)


추가로 Bootloader 가 작아지면서, 더 많은 소스를 올릴 수 있게 되었다지만, 여분의 부분을 사용하게끔은 아직 안되었다고 하네요.

여분의 메모리 공간 활용을 위해서, 새 Bootloader 는 Optiboot 는 Uno 와 동일하므로,

Nano 이지만, 편법으로 Uno 로 설정하고 Bootloader 를 입히면 된다 합니다.


아직 큰 소스를 제작하지도 않는지라, Uno 용으로 Bootloader 를 입히는 것은 나중에 해보겠습니다.





3. Arduino as ISP 로 연결


궁금하니 새로운 Bootloader 를 올려보기로 합니다.


Bootloader 를 입히는 방법은 여러가지가 있습니다만,

저는 여분의 Arduino Nano / Micro 를 상호 사용하여 Bootloader 를 입히는 방법으로 진행합니다.


이때 사용되는 interface 는 ICSP header 를 사용합니다.



지금까지 arduino 를 사용하면서, 이 ICSP header 가 필요할까? 했는데, 이럴 때 필요하네요.



새롭게 Bootloader 를 입힐 arduino 는 ICSP 에 연결하고,

PC 와 연결되는 arduino 는 ISP 모드로 사용됩니다.


그럼 하나하나 진행해 볼까요.





4. Pin 연결


ISP 모드로 연결되는 arduino 를 SOURCE 라고 칭하고, 새로운 Bootloader 가 입히게 될 arduino 를 TARGET 이라고 하겠습니다.

TARGET 의 ICSP header 와 SOURCE 의 pin 이 어떻게 연결되는지 표로 만들어 봤습니다.


아래는 Arduino Micro 가 SOURCE 로 했기 때문에,

Nano 나 다른 기존일 때에는 거기에 맞는 FUNCTION pin 을 찾아서 연결해 주면 됩니다.


Function | SOURCE (Micro) | TARGET ICSP (Nano)
----------------------------------------------
  MISO   |      MISO      |       1
  5V     |      5V        |       2
  SCK    |      SCK       |       3
  MOSI   |      MOSI      |       4
  RESET  |      D10       |       5
  GND    |      GND       |       6
----------------------------------------------


각 Nano 및 Micro 의 pin 의 FUNCTION 과 ICSP header 정보는 다음 그림을 참고해 보세요.



Micro 는 Nano 와 조금 다른 pinout 을 가지므로 주의해야 합니다.



회로도는 다음과 같습니다.



실제로 연결한 사진은 다음과 같습니다.






5. SOURCE 에 올리는 sketch


다음으로, ISP 모드로 연결될 SOURCE 는 "ArduinoISP" sketch 가 올라가 있어야 합니다.

이 소스는 Arduino IDE 가 설치되어 있으면, 기본으로 가지고 있는 소스 입니다.


File > Examples > 11.ArduinoISP > ArduinoISP



저의 경우는 SOURCE 가 Arduino Micro 이므로, 이 micro 에 upload 해주었습니다.



위처럼 Programmer 를 "AVRISP mkII" 에서 "Arduino as ISP" 로 바꾸어 줍니다.


Board      | Arduino Nano
Processor  | ATmega328P
Port       | COM6 --> Port connected arduino as a SOURCE
Programmer | Arduino as ISP


위의 그림과 조금 다르지만, 새로운 소스는 이제 Old Bootloader 가 아니므로

Processor 에서 "ATmega328P" 로 정의해 주면 됩니다.


추가로 주의할 점은,

Programmer 에서 비슷하게 생긴 "ArduinoISP" 항목이 있지만, 속지 말고 "Arduino as ISP" 을 선택해줘야 합니다.


이제 준비가 완료 되었습니다.





6. 쉽게 끝나지 않는다


그렇죠... 이렇게 쉽게 끝나면 아쉽죠.

모든 글을 참조하여 잘 따라 했는데도 불구하고 실패합니다.



"Device signature = 0x000000" 이라는 문구가 중국 복제품이라서 그런가? 라는 생각도 해봤습니다.

중국 복제품은 아래처럼 Unknown board 라고 표시가 되거든요.



그래서, 이 부분을 강제적으로 메모리에 덮어 씌울 수 있는 방법이 없는가도 찾아 봤습니다.

없더군요... (Atmel Studio 라는게 있지만 잘 안됨...)



그래도 안되길래, ICSP header 접속시 1번 pin 을 잘못 인식하여 5V 를 엄한데 꽂아버려

chip 이 타버렸나 생각해 보기도 했습니다. 그렇게 되면 얼마 하지 않지만 또 구입해야 하니까 매우 번거럽게 됩니다.


참고로, 여러 troubleshooting 하면서 알게된 글이 아래 사이트 입니다.

발생할 수 있는 모든 가능성에 대해, 그에 따른 대응방법을 자세하게 적어 놨습니다.


Bootloader 관련하여 문제가 생겼을 시, 어떻게 조치해야 하는지를 알려주는 성지와 같은 글 입니다.


* Have I bricked my Arduino Uno? Problems with uploading to board

https://arduino.stackexchange.com/questions/13292/have-i-bricked-my-arduino-uno-problems-with-uploading-to-board




7. 심기 일전


다시 처음부터 시작한다는 마음으로

다음날 아침 일찍, 배선도 다시하고 ArduinoISP 도 새로 올려보고, 모든 과정을 다시금 천천히 해봤습니다.



음?!!!!!!!!!!

성공 했네요?!

"Done burning bootloader" 문구가 뜹니다.


성공한 로그를 첨부합니다.


Bootloader_update_201812.txt


축하 동영상 올라 갑니다. 아래와 같이 SOURCE 와 TARGET LED가 서로 사이좋게 끔뻑끔뻑 하면 됩니다.



확인해봐야 겠죠?

Processor 를 "ATmega328P" 로 변경하고, 아무 sketch 나 올려 봅니다.



잘 되네요.

로그를 첨부합니다.


Sketch_upload_201812.txt



첫날 연속 실패의 원인은, pin 을 잘못 연결하지 않았나로 추측해 봅니다.

역시 이 취미는 차분하게 해야 합니다.





8. 여러가지...


IDE 가 업데이트 되면서 지 맘대로 Bootloader 도 업데이트 할 수 있게 되었다면,

필시 그 파일이 존재할 터, 찾아봅니다.


C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\optiboot



요놈!


Atmel Studio 를 잠깐 사용해 보면서 느낀 것은,

기존에 보유하고 있는 Arduino 의 상태에 대해 알아둘 필요가 있었습니다.


예를 들면, memory 크기나, 인식하는 code, Signature, Fuse bit 같은 것들.

아래 소스를 사용하면 ATmega 시리즈를 사용하는 Arduino 의 chip 현황을 자세하게 알 수 있습니다.


* nickgammon/arduino_sketches

https://github.com/nickgammon/arduino_sketches

- arduino_sketches-master.zip


특히 "Atmega Board Detector" 를 사용하면 Bootloader 소스 뿐만 아니라 거의 모든 정보를 알 수 있습니다.

여기서도 연결은 Arduino as ISP + ICSP header 조합입니다.


우선 Arduino Nano 의 정보 입니다.

Arduino_Nano_result.txt


Atmega chip detector.
Written by Nick Gammon.
Version 1.20
Compiled on Dec 10 2018 at 21:28:36 with Arduino IDE 10803.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F 
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF 
HFuse = 0xDA 
EFuse = 0xFD 
Lock byte = 0xCF 
Clock calibration = 0x87 
Bootloader in use: Yes
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 2048 bytes starting at 7800

Bootloader:

7800: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 
7810: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 
...


이대로 끝나면 아쉬우니, Arduino Micro 도 확인해 봅니다.

Micro 는 ICSP header 의 1번 pin 자리가 살짝 다르니 주의해야 합니다. (아래 그림)



후후, 정상으로 돌아온 Arduino Nano 를 SOURCE 로 하고 Arduino Micro 를 확인해 보는 사진입니다.



Arduino Micro 의 정보 입니다.

Arduino_Micro_result.txt


Atmega chip detector.
Written by Nick Gammon.
Version 1.20
Compiled on Dec 10 2018 at 21:28:36 with Arduino IDE 10803.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x87 
Processor = ATmega32U4
Flash memory size = 32768 bytes.
LFuse = 0xFF 
HFuse = 0xD8 
EFuse = 0xCB 
Lock byte = 0xEF 
Clock calibration = 0x71 
Bootloader in use: Yes
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 4096 bytes starting at 7000

Bootloader:

7000: 0x5F 0xC0 0x00 0x00 0x78 0xC0 0x00 0x00 0x76 0xC0 0x00 0x00 0x74 0xC0 0x00 0x00 
7010: 0x72 0xC0 0x00 0x00 0x70 0xC0 0x00 0x00 0x6E 0xC0 0x00 0x00 0x6C 0xC0 0x00 0x00 
...


Micro는 Bootloader 가 훨씬 크네요.

USB 연결을 위한 chip 도 built-in 되어 있고, 나중에 나온 CPU 이니 확장이 많이 되어있는 듯 합니다.





FIN


뭐가 달라졌을까요?

Old Bootloader 를 일부러 선택하지 않아도 된다는 정도?


또한 가장 눈에 띄는건 Baud Rate 입니다.

19200 --> 115200 으로 바뀐걸 아래와 같이 알 수 있네요.


기존


         Using Port                    : COM6
         Using Programmer              : arduino
         Overriding Baud Rate          : 19200
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         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



NEW


         Using Port                    : COM6
         Using Programmer              : arduino
         Overriding Baud Rate          : 115200
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         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



And
prev | 1 | next