Hardware | Arduino 를 DIY 해보자 - 4

지금까지 Arduino 를 DIY 해본 글은 아래와 같습니다.


* Hardware | Arduino 를 DIY 해보자 - 1
  - https://chocoball.tistory.com/entry/Hardware-Arduino-DIY-itself-1


* Hardware | Arduino 를 DIY 해보자 - 2
  - https://chocoball.tistory.com/entry/Hardware-Arduino-DIY-itself-2


* Hardware | Arduino 를 DIY 해보자 - 3
  - https://chocoball.tistory.com/entry/Hardware-Arduino-DIY-itself-3

1. 다시 시작

저번에 USB mini B 로 설계된 것을 micro USB 로 교체하고 진행하다 PCB 기판이 망가졌기 때문에, 이번에는 설계 대로 따라 하면서 다시 처음부터 만들기 시작합니다. 

우선 상판의 SMD 들 부터 붙여 갑니다.

상판을 오븐에 잘 구워 나오면, 캡톤 테이프로 고정하고, 하판 SMD 들도 납 페이스트 > 오븐으로 실장해 줍니다.

두 번쨰라 깔끔하게 나왔습니다.

LED 쪽이 들뜬거 빼고는 너무 만족스러운 결과 입니다.

지금 단계에서 할 필요는 없지만, 녹색의 PCB 기판, 파란색의 ISP pin header 가 이뻐, 가지고 있던 노란색 male pin header 까지 납땜해 봤습니다.

이번에는 납땜 문제가 없으니, 당연히 성공하리라 생각 했던 것이죠.
왠걸... 이번에도 실패.


2. 심폐소생

일단, 이번에도 AliExpress 에서 구매한 ATmega328 이라, fake MPU 라고 가정을 하고 시작 했습니다.

조금 조사를 해 보니, 중국에서 만들어진 fake MPU 들은 강제로 fuse bit 을 수정해서 다시금 사용할 수 있게한 사람들이 있었습니다.

* nickgammon/arduino_sketches
  - https://github.com/nickgammon/arduino_sketches


* High-voltage programming for AVR chips
  - http://www.gammon.com.au/forum/?id=12898


High-voltage Parallel programming - this uses a large number of pins (18) plus /RESET, VCC and GND. Using this method a "high voltage" (12 volts) is applied to /RESET which puts it into high-voltage parallel programming mode. It is called "parallel" because when sending data to the chip all 8 bits are read or written at once (in parallel).

결국 high-voltage re-setter 가 필요한 것이군요.


위의 글 에서는 Arduino UNO 등을 이용해서 만든 연결선 이기에 컨트롤러 부분을 Arduino NANO 버전으로 바꾸어 보았습니다.


------------------------------------------------------
| Arduino Nano | ATmega328P                          |
------------------------------------------------------
|      6       | 14 (PB0) (data bit 0)               |
|      7       | 15 (PB1) (data bit 1)               |
|      8       | 16 (PB2) (data bit 2)               |
|      9       | 17 (PB3) (data bit 3)               |
|      10      | 18 (PB4) (data bit 4)               |
|      11      | 19 (PB5) (data bit 5)               |
|      12      | 23 (PC0) (data bit 6)               |
|      13      | 24 (PC1) (data bit 7)               |
|   RDY = A0   |  3 (PD1) (low means busy)           |
|   OE  = A1   |  4 (PD2) (low means output enabled) |
|   WR  = A2   |  5 (PD3) (low means write)          |
|   BS1 = A3   |  6 (PD4)                            |
| XTAL1 = A4   |  9 (XTAL1)                          |
|   XA0 = A5   | 11 (PD5)                            |
|   XA1 = 2    | 12 (PD6)                            |
| PAGEL = 3    | 13 (PD7)                            |
|   BS2 = 4    | 25 (PC2)                            |
|   VCC = 5    |  7 and 20 (VCC and AVCC)            |
------------------------------------------------------

/RESET (pin 1) on target connected to 12V via a transistor and MOSFET as described below.
Also connect the grounds. GND to pins 8 and 22.
Decoupling capacitors: 0.1 µF (100 nF) between VCC/AVCC (pins 7 and 20) and Gnd.
Not connected on target: pins 2, 10, 21, 26, 27, 28.


그런 다음, ATmega328P 를 ATmega328P-AU 에 맞게 pin 연결을 수정합니다. 왜냐하면, Arduino NANO 는 ATmega328P-AU 이기 때문이지요.

이렇게 해서 수정한 연결 정보는 다음과 같습니다.


------------------------------------------------------
| Arduino Nano | ATmega328P-AU                       |
------------------------------------------------------
|      6       | 12 (PB0) (data bit 0)               |
|      7       | 13 (PB1) (data bit 1)               |
|      8       | 14 (PB2) (data bit 2)               |
|      9       | 15 (PB3) (data bit 3)               |
|      10      | 16 (PB4) (data bit 4)               |
|      11      | 17 (PB5) (data bit 5)               |
|      12      | 23 (PC0) (data bit 6)               |
|      13      | 24 (PC1) (data bit 7)               |
|   RDY = A0   | 31 (PD1) (low means busy)           |
|   OE  = A1   | 32 (PD2) (low means output enabled) |
|   WR  = A2   |  1 (PD3) (low means write)          |
|   BS1 = A3   |  2 (PD4)                            |
| XTAL1 = A4   |  7 (XTAL1)                          |
|   XA0 = A5   |  9 (PD5)                            |
|   XA1 = 2    | 10 (PD6)                            |
| PAGEL = 3    | 11 (PD7)                            |
|   BS2 = 4    | 25 (PC2)                            |
|   VCC = 5    |  4, 6, and 18 (VCC and AVCC)        |
------------------------------------------------------


결국 PCB 기반 기준으로 연결해야 할 선들을 표시해 봤습니다.

혹시 몰라, 출처는 기억나지 않지만, 다른 버전의 연결도 참고하여, 한 가지 더 시도할 수 있는 연결선 정보도 준비.

우선, pin header 로 연결할 수 있는 부분을 먼저 연결 해 보니 대략 이런 식이 되는군요.

ATmega328P-AU 에 직접 연결될 pin 들에 마킹을 합니다.

그리고, 일전에 구입해 놨던 AWG 30 짜리 선을 한 땀 한 땀 연결합니다.

최종 breadboard 모습은 다음과 같습니다.

결과는 실패.

다른 버전의 연결 정보도 확인하여 동일하게 실행해 봤어도 실패.


3. Fuse bit

혹시 fuse bit 을 잘 모르고 설정했나 싶어, fuse bit 을 다시 점검해 봅니다.

위의 스샷에서도 알 수 있듯, Nano 와 Duemilanove 는 ATmega328P-AU (Nano) 및 ATmega328P (Duemilanove) 로 다르지만, Arduino 로 사용될 시 fuse bit 은 동일합니다.


Arduino Nano
-------------------------
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDA
EFuse = 0xFD
Lock byte = 0xCF
Clock calibration = 0x87
 
 
DIY Duemilanove
-------------------------
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDA
EFuse = 0xFD
Lock byte = 0xCF
Clock calibration = 0x89


AVR Fuse Calculator 로 확인 해봤습니다.

* AVR Fuse Calculator for ATmega328P
  - https://eleccelerator.com/fusecalc/fusecalc.php?chip=atmega328p

기본은 아래와 같이, 추가 programming 을 할 수 없도록 LOCKBIT 가 심어져서 생산된다고 하네요.

문제 없이 돌아가는, 가지고 있는 Arduino Nano / Duemilanove 를 참고하여 아래 Fuse bit 을 다시금 확인합니다.


4. MPU 분리

아래 글에서 fuse bit 수정을 위해, MPU 를 분리해서 작업하라 합니다.

* Trying to rescue 32 TQFP mounted on PCB
  - http://mightyohm.com/forum/viewtopic.php?f=7&t=4509

가능하면 분리해서 하라고 하네요.

You'll need to remove or isolate the AVR from the PCB. The HV programmer will not work if the chip is still connected to power supply, crystal, etc on the PCB.

깔끔하게 연결한다 해도, 다른 부품과 전기적으로 엮여 있을 수도 있고, 통신에 방해가 되어서, 명령어 타이밍이 맞지 않을 수도 있습니다.

한 숨 쉬며 PCB 에서 CPU 를 분리하기로 합니다.

인두기로 지지면서 해 봤으나 도저히 불가능 하여, 오븐으로 구워서 분리하기로 합니다.

캡톤 테이프로 잘 감쌓아서, 다른 부분은 유지한 채, ATmega328P-AU 만 잘 분리해 냈습니다. 휴...


5. MPU 선 연결

기존 선을 사용해서 연결이 가능한지 확인해 봅니다. 얼추 선의 두께는 맞을 듯 하네요.

얇은 폭에 납땜을 해야 하니, 아껴 두었던 인두팁을 꺼내 듭니다. T12-ILS.

새거라 기분이 좋군요.

아마 중국 카피품이긴 하겠지만, 마킹 로고도 잘 되어 있거 괜찮아 보입니다.

사진으로 남겨 놓지는 않았지만, 선이 너무 가늘어 쉽게 납땜할 수 없었습니다. 실패.


6. QFP32 소켓 구입

선을 직접 연결해서 작업하는 것이 쉽지 않아 전용 소켓을 구입 했습니다.

* Burn Arduino Bootloader on Atmega-328 TQFP and DIP Chips on Breadboard
  - https://www.instructables.com/id/Rapid-programming-of-Atmega-328-TQFP-and-DIP-chips/

이 작업의 끝을 알 수 없네요. 어디까지 가는 것일까요.

잘 도착 했습니다.

깔끔하게 연결할 수 있게 되어 있네요. 이 제품은 언제 다시 쓰게 될까 하면서 구매했습니다.

제품 완성도는 괜찮습니다. 이번에 쓰고 언제 다시 쓰게 될 지는 모르겠지만... ㅠㅠ

ATmega328P 용 소켓을 통해서 ATmega328P-AU 를 프로그래밍 할 수 있도록 되어 있습니다.

또한, 일반 breadboard 에 연결해서 사용할 수 있도록도 되어 있어요.

분리한 ATmega328P-AU 를 장착.

ATmega328P 기준으로 연결 합니다.

실제로 연결해 보면 케이블이 한묶음.

Fuse bit 은 확실하게 변경 완료.

다시 PCB 에 납땜하고, bootloader 를 올려 보면 동일한 결과가 나옵니다. 결과는 실패.

7. 다시 도전

Fuse bit 을 이렇게까지 재설정 했음에도 정상적이지 못한 것은, fuse bit 문제가 아니라 ATmega328P-AU 자체 문제라고 판단하고 PCB 에서 제거하고 새 MPU 를 교체하기로 결정.

일전에 오븐을 통해 MPU 를 제거 했으므로, 기판에 피로도가 쌓여 있을 듯 하여 인두로 제거해 보기로 합니다.

결국 안되어서 오븐으로 직행.

잘 분리가 안되길레 살짝 밀었더니, 이번에는 기판의 동판까지 일어나 버렸습니다.

점프선을 연결하면서 역시 기판에 피로도가 많이 쌓여 있었던 듯. 폐기합니다. ㅠㅠ


To Be Continued...


댓글