2017年8月16日水曜日

TQFPアダプタソケット製作(後編)

盆は、何かと忙しいですが、
早くアダプタを試したくて...
生チップへのブートローダー書込に移ります。
失敗も隠さず記録していますのでお楽しみください。

前回完成したTQFPアダプタシールド
ATmega328P-AU 32pin TQFPチップを装填します。
ここから3個入手しました。
台座の真中に乗せて
蓋をキッチリかぶせます。
ピンと金線の位置はいい感じにあっています。
ちゃんとピンが当たっているか
マイクロスコープで確認。
4辺別々に撮影して合成です。
中心がATmega328P-AU本体です。
金色が台座の金メッキ線、白いのがチップの足です。
うまく当たっているようです。
では、Arduino Uno書込機にシールドとして装着します。
書き込みの準備が整いました!
まずは、デバイスIDを
コマンドプロンプトからavrdude.exeで確認します。
微妙に認識した状態でArduino Unoで書き込むと
この時と同じ失敗を招く可能性があるからです。

ここの「デバイスIDを確認する」の所を参考にさせていただきました。
この所、何度もお世話になっています。
ありがとうございます。

以前した時と同じように
C:\Program Files (x86)\Arduino\hardware\tools\avr\etc
のavrdude.confを
avrdude.exeのあるフォルダ
C:\Program Files (x86)\Arduino\hardware\tools\avr\bin
にコピーします。
avrdude.confのフォルダパスを指定すると
命令が長くなり見難いという理由だけです。

コマンドプロンプトで
cd c:\program files (x86)\arduino\hardware\tools\avr\bin
ENTERして
avrdude.exeのあるディレクトリに移動します。

コマンド
"avrdude -C avrdude.conf  -c avrisp -P COM3 -b 19200 -p m328p"
ENTERで実行します。
Device signature = 0x000000です。
ダメですね~
なかなか一発でいかないですね~
わざとじゃないんですよ~ (^^ゞ
このavrdudeに言いたいのですが
エラー時に最後の”Thank you”は止めて欲しい、余計に悲しくなります。
もう一度、入念にパターンをチェックします。

ありゃりゃ、間違いがありました。
Fusion360でパターンを描いている時に
眼が一瞬ボケて"25"が"26"に見えたようです。
なので29pinへの配線が28pinに接続されています。

カッターでパターンカットして(裸眼で!)
マイクロスコープで確認します。
綺麗にカットできています。
目は大丈夫のようです。
ジャンパーで正しい接続にします。
所で、
上のマイクロスコープ写真、VGAですが綺麗です。
前のよりレンズが大きいからでしょうか?
いつの間にかコレを購入していたのです。
拡大写真はコレの方がいいですね。
お腹のダイヤルで50X~500Xの倍率を決め
対物との距離で焦点を合わせます。
手持ちでも意外と大丈夫です。

Override invalid signature check するには、"-F"追加を!とあるので
"-F"を追加して再び、デバイスID確認です。
"avrdude -C avrdude.conf  -c avrisp -P COM3 -b 19200 -p m328p -F"
このavrdude.exeは、大文字と小文字で機能が違うので注意します。
ちょっと頭冷やします。
原因として考えられるのは、
1.32pinだけ特別に処理するピンがあるのでは?
2.書込機Arduino Uno Rev3だとRESETの10μFは不要?
3.生チップの最初の書込は、水晶発振子が無い方がいいのかも?
4.チップの接触不十分
あくまでマーティーの過失は、最後に取って置く?

1.328PのDIPとTQFPで増えているピンは?
 ADC6 19pin と ADC7 22pin
 これらは、ADC専用ピンになっています。
"ADC[7:6] (TQFP and VFQFN Package Only) In the TQFP and VFQFN package, ADC[7:6] serve as analog inputs to the A/D converter. ..."
 なのでDIPとTQFPの配線の違いはありませんね~

2.RESETの10μFを外してみる。
 "protocol error"がでました。
 書込機がArduino Uno Rev3でも必要なようです。
3.水晶発振子を外してみる。
3-1.
・水晶発振子、22pFなし---変化なし
3-2.
・水晶発振子を交換:変化なし
・22pFだけを外す:変化なし
3-2.
・水晶発振子の両端に1MΩ:変化なし
 Arduino Uno Rev.3の回路図にあったので。

残るは、
最後のチップとアダプタの接触不良しかないですね~
アダプタソケットとチップが
ちゃんと接触しているか確認できないだろうか?

テスターでやれそうです。
テスターの探針は、
黒の-棒に電池の+
赤の+棒が電池の-
になっているので
赤棒をGNDにつけて各ピンの抵抗値を見ます。
ちゃんと接触していると
GND間の抵抗値が150KΩ付近になります。
最初からこれに気づいていたら...
接触していないピンがありました。
接触が悪かったのです。
やはりマーティーが悪かったのでした。
台座の8本金メッキ線が微妙に凸凹しているのです。
上からの押さえが平坦なアクリルで硬いので
その凸凹にうまく合ってくれず
蓋をかなり強く押さえないと
うまく接触しなかったようなのです。
断面を図示するとこんな感じ。
大変微妙なのです。と言い訳がましく...
ここまで2個のチップを試しています。
最後の3個目のチップに交換して装着。
テスターで入念に接触を確認します。

avrdude.exeでデバイスID確認
コマンド
"avrdude -C avrdude.conf  -c avrisp -P COM3 -b 19200 -p m328p -F"
ENTERで実行します。
おーー!認識できました!
Device signature = 0x1e950f(probably m328p)
ちゃんと”m328p”を認識しています。
数回やってみても同じ結果です。
遂にやりました!
いよいよブートローダーの書き込みです。
Arduino IDE 1.8.3使います。
もう一度、ボード、プロセッサ、シリアルポート、書込装置を確認して
いざ[ブートローダーを書き込む]クリックっと!
ワクワク、ドキドキ...
進んでいるようです。
*****
Arduino:1.8.3 (Windows 10), ボード:"Arduino Nano, ATmega328"

C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -cstk500v1 -PCOM3 -b19200 -e -Ulock:w:0x3F:m -Uefuse:w:0xFD:m -Uhfuse:w:0xDA:m -Ulfuse:w:0xFF:m 

avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53
         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                    : COM3
         Using Programmer              : stk500v1
         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
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel STK500 Version 1.x firmware
         Hardware Version: 2
         Firmware Version: 1.18
         Topcard         : Unknown
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: erasing chip
avrdude: reading input file "0x3F"
avrdude: writing lock (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x3F:
avrdude: load data lock data from input file 0x3F:
avrdude: input file 0x3F contains 1 bytes
avrdude: reading on-chip lock data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of lock verified
avrdude: reading input file "0xFD"
avrdude: writing efuse (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0xFD:
avrdude: load data efuse data from input file 0xFD:
avrdude: input file 0xFD contains 1 bytes
avrdude: reading on-chip efuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of efuse verified
avrdude: reading input file "0xDA"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xDA:
avrdude: load data hfuse data from input file 0xDA:
avrdude: input file 0xDA contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xFF"
avrdude: writing lfuse (1 bytes):

C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -cstk500v1 -PCOM3 -b19200 -Uflash:w:C:\Program Files (x86)\Arduino\hardware\arduino\avr/bootloaders/atmega/ATmegaBOOT_168_atmega328.hex:i -Ulock:w:0x0F:m 
Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xFF:
avrdude: load data lfuse data from input file 0xFF:
avrdude: input file 0xFF contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified

avrdude done.  Thank you.


avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53
         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                    : COM3
         Using Programmer              : stk500v1
         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
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel STK500 Version 1.x firmware
         Hardware Version: 2
         Firmware Version: 1.18
         Topcard         : Unknown
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

ブートローダの書き込み中にエラーが発生しました。
Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0xffc000
avrdude: Expected signature for ATmega328P is 1E 95 0F
         Double check chip, or use -F to override this check.

avrdude done.  Thank you.
*****
がくっ、また、最後でエラーかあぁ...!
かなりいいとこまで行ったようなのにー!

あちゃー、水晶発振子を取ったままでした(´-﹏-`;)
暑さのせいか、どうも注意力欠乏です。

最後の補足に書きますが、ここを読むと
生チップのブートローダー書込で水晶発振子を付けてないと
最初にEraseを内部発振で行い、
その後に外部発振に切り替わるので
肝心のブートローダー書込ができないということなのです。

FUSE bitとやらの書込に成功しているので
Erase後に内蔵発振が解除され
外部発振回路に固定されたようです。
ということらしい。

水晶発振子と22pFを付けます!
また、コマンドプロンプトでデバイスIDを確認。
”m328p”を認識してくれています。
Fusesの内容は、変わっています。
再度!Arduino IDE 1.8.3で
[ブートローダーを書き込む]!イキマ~~す!
###が進む所は心臓に悪いですね~
おお~~~成功です!!!
記念すべき瞬間です!
しばし感激で固まっています。
この時ばかりは
最後の「Thank you」が嬉しく思えます。
動画です。
成功すると書込機のArduino Unoの"L"のLEDが点滅します。
どうでもいい動画ですが...
この瞬間は興奮していて成功の証の動画が欲しかったのです。
記念に詳細ログも
***********
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -cstk500v1 -PCOM3 -b19200 -e -Ulock:w:0x3F:m 

avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53
         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                    : COM3
         Using Programmer              : stk500v1
         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
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel STK500 Version 1.x firmware
         Hardware Version: 2
         Firmware Version: 1.18
         Topcard         : Unknown
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: erasing chip
avrdude: reading input file "0x3F"
avrdude: writing lock (1 bytes):

C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -cstk500v1 -PCOM3 -b19200 -Uflash:w:C:\Program Files (x86)\Arduino\hardware\arduino\avr/bootloaders/atmega/ATmegaBOOT_168_atmega328.hex:i -Uefuse:w:0xFD:m -Uhfuse:w:0xDA:m -Ulfuse:w:0xFF:m -Ulock:w:0x0F:m 
Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x3F:
avrdude: load data lock data from input file 0x3F:
avrdude: input file 0x3F contains 1 bytes
avrdude: reading on-chip lock data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of lock verified

avrdude done.  Thank you.


avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53
         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                    : COM3
         Using Programmer              : stk500v1
         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
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel STK500 Version 1.x firmware
         Hardware Version: 2
         Firmware Version: 1.18
         Topcard         : Unknown
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e950f (probably m328p)
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: reading input file "C:\Program Files (x86)\Arduino\hardware\arduino\avr/bootloaders/atmega/ATmegaBOOT_168_atmega328.hex"
avrdude: writing flash (32670 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 32670 bytes of flash written
avrdude: verifying flash memory against C:\Program Files (x86)\Arduino\hardware\arduino\avr/bootloaders/atmega/ATmegaBOOT_168_atmega328.hex:
avrdude: load data flash data from input file C:\Program Files (x86)\Arduino\hardware\arduino\avr/bootloaders/atmega/ATmegaBOOT_168_atmega328.hex:
avrdude: input file C:\Program Files (x86)\Arduino\hardware\arduino\avr/bootloaders/atmega/ATmegaBOOT_168_atmega328.hex contains 32670 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 32670 bytes of flash verified
avrdude: reading input file "0xFD"
avrdude: writing efuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0xFD:
avrdude: load data efuse data from input file 0xFD:
avrdude: input file 0xFD contains 1 bytes
avrdude: reading on-chip efuse data:

Reading | ################################################## | 100% 0.02s

avrdude: verifying ...
avrdude: 1 bytes of efuse verified
avrdude: reading input file "0xDA"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xDA:
avrdude: load data hfuse data from input file 0xDA:
avrdude: input file 0xDA contains 1 bytes
avrdude: reading on-chip hfuse data:

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

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xFF"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xFF:
avrdude: load data lfuse data from input file 0xFF:
avrdude: input file 0xFF contains 1 bytes
avrdude: reading on-chip lfuse data:

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

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude: reading input file "0x0F"
avrdude: writing lock (1 bytes):

Writing | ################################################## | 100% 0.03s

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x0F:
avrdude: load data lock data from input file 0x0F:
avrdude: input file 0x0F contains 1 bytes
avrdude: reading on-chip lock data:

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

avrdude: verifying ...
avrdude: 1 bytes of lock verified

avrdude done.  Thank you.

***********

アダプタへの装着の確認のコツがわかってきたので
認識できなかった2個目のチップを装着します。
アダプタの蓋をよ~く締めてテスターで接触を確認。
avrdude.exeでデバイスIDを確認します。
Fusesは、生チップの値になっています。
これは呆気なくブートローダー書込成功です!
これで2個成功!
調子に乗って1個目のできなかったチップにいきます。
テスターでのチェックはOKですが、
ダメですね~。
Device signature = 0xffffff と
Device signature = 0xffe0ff と
違うのがでています。
これは微妙に接触不良の感じです。
このチップ、よ~~く見ると
アダプタソケットにきれいに入っていません。
どうしても1辺だけ、チップピンが微妙に隣合う金メッキ線の間に
来ている感じなのです。
微妙に外径が違うのだろうか?
アダプタのアクリルがすり減ってきたのか?
テスターで測ってもわからないはずです。
チップの四隅の隙間に紙(青いの)を挟み込んで
できるだけ動かないようにします。
で、デバイスIDを見ると
遂にm328pと認識されました!
再度、Arduino IDEで[ブートローダーを書き込む]します。
成功で~す!
これで3つのチップ全てにブートローダーを書き込むことができました。
生チップとブートローダー書込後で
Fusesは、こう変わっています。
上(生チップ):Fuses OK (E:FF, H:D9, L:62)
下(書込後) :Fuses OK (E:FD, H:DA, L:FF)
やっぱ
TQFPアダプタソケット
伊達に高いわけではないのですね~
確実に接触させるために色んなノウハウが詰まっていそうです。

しばし、充実感に浸っています。
ここまで来るのに結構長かったです。
一時は、”お蔵入り”が頭をよぎりました。
見て頂いている皆様のお陰で頑張れたのだと思います。

最後に、ここでブートローダーを書き込んだチップを
壊れているWoodpeckerに載せ替えて
USB接続でブートローダーを起動して
GRBLソフトを書き込む作業が残っています。
その前にチップのハンダ付けの難関が待っています。
後もう少しです。

【まとめ】
1.回路図
最終は、これです。
水晶発振子に並列に1MΩを追加しただけ
Arduino Uno Rev.3には、ついていたからです。
一番右のRESETの10μFは、シールド側の基板につけています。
2.念の為、USB-SERIAL CH340(COMx)の設定。
ビット/秒:19200

3.デバイスID(Device Signature)をの確認。
先にavrdude.exeでデバイスID(Device Signature)を確認するのが安心。
コマンドプロンプトで
"avrdude -C avrdude.conf  -c avrisp -P COM3 -b 19200 -p m328p -F"
ENTERで実行。

avrdude.confのフォルダパスを指定すると
命令が長くなるので。
C:\Program Files (x86)\Arduino\hardware\tools\avr\etc
のavrdude.confを
avrdude.exeのあるフォルダ
C:\Program Files (x86)\Arduino\hardware\tools\avr\bin
にコピーしています。

4.ブートローダー書き込み。
書込装置は、ArduinoISPを書き込んだArduino Uno。
Arduino IDE 1.8.3を起動して、
Woodpeckerとして使う場合は、
ボード:Arduino Nano
プロセッサ:”ATmega328”
シリアルポート:COM3(マーティーのUSBポートの場合)
書込装置:Arduino as ISP
[ブートローダーを書き込む]をクリック。
*****まとめここまで*****

【補足】
最後に備忘録として
途中で参考になった情報。

ここに内部発振と外部発振の切り替えのことが詳細にあります。

生チップのブートローダー書込で水晶発振子を付けてないと
Eraseまでは内部発振で行われますが
その後に外部発振に切り替わるので
肝心のブートローダーを書き込みできないということなのです。

マーティーの場合も
水晶発振子無しでEraseとFuses書込に成功し
ブートローダー書込でエラーがでました。
水晶発振子をつけてやり直すと成功しているので
実際にこの方が書かれているようになっている事が
実証できたわけです。

この編集をやると
生チップに水晶発振子無しでも
1回だけブートローダーを書き込むことができるとのこと。
その後は、外部発振に切り替わるので水晶発振子必須です。

¥arduino¥hardware¥arduino¥avr¥platform.txt
内の2行を以下のように編集します。
赤文字部を
erase.patternからbootloader.patternの所に移動するわけです。
*****
tools.avrdude.erase.pattern="{cmd.path}" "-C{config.path}" {erase.verbose} -p{build.mcu} -c{protocol} {program.extra_params} -e -Ulock:w:{bootloader.unlock_bits}:m -Uefuse:w:{bootloader.extended_fuses}:m -Uhfuse:w:{bootloader.high_fuses}:m -Ulfuse:w:{bootloader.low_fuses}:m
 tools.avrdude.erase.pattern="{cmd.path}" "-C{config.path}" {erase.verbose} -p{build.mcu} -c{protocol} {program.extra_params} -e -Ulock:w:{bootloader.unlock_bits}:m

~~~~~
tools.avrdude.bootloader.pattern="{cmd.path}" "-C{config.path}" {bootloader.verbose} -p{build.mcu} -c{protocol} {program.extra_params} "-Uflash:w:{runtime.platform.path}/bootloaders/{bootloader.file}:i" -Ulock:w:{bootloader.lock_bits}:m
 tools.avrdude.bootloader.pattern="{cmd.path}" "-C{config.path}" {bootloader.verbose} -p{build.mcu} -c{protocol} {program.extra_params} "-Uflash:w:{runtime.platform.path}/bootloaders/{bootloader.file}:i" -Uefuse:w:{bootloader.extended_fuses}:m -Uhfuse:w:{bootloader.high_fuses}:m -Ulfuse:w:{bootloader.low_fuses}:m -U lock:w:{bootloader.lock_bits}:m
*****

2017年8月12日土曜日

TQFPアダプタソケット製作(中編)

前回に続き「中編」になりました。
アダプタの下に基板を付け水晶発振子なども付けて
Arduino Unoのシールドにしたいのです。

回路図は、
ここの(水晶発振子あり)を参考にさせていただきました。
で、これは、パッケージがDIPなので
TQFP 32pinの回路図を起こします。
Bootloader書込機にしたArduino Unoと
ターゲットのATmega328P-AU 32pin TQFPとの接続です。
何で描いたかは内緒です。(ヒント:Pで始まる)
基盤の作成にとりかかります。
EAGLEは、まだインストールしておりません。
使い慣れた?Fusion360で描くことにします。
前回のアクリルの台座の穴位置に合わせ易いという言い訳です。

スケッチです。
う~ん、やはりFusion360はパターン向きではないようですね~
左右の四角群は、Aiduino Unoのピンヘッダ位置合わせ用。
Fusion360のスケッチでパターン考えるのは慣れません。
最後の方でやっと描き方に大分慣れてきました。
オフセットとフィレットを使うと
箔間距離を保ちつつ、曲線も早く描けますね~。
ひとつのスケッチ面に沢山描いていくので
だんだん重たくなってくるのがわかります。
最後の方は、1本の線をトリムするのに5秒位かかります。
モデルで銅箔パターン部を0.1mmプレスアップします。
凹んだ部分を切削すれば銅が削れパターンができるという戦法です。
もう一枚
モデル厚は、1.5mm、銅箔部を0.1mmプレスアップするので
板厚1.6mmになります。
選択状態にしている青が凹んだ部分です。
左の白部は中央の四角穴。
で、出来上がったモデルはこれです。
外径 50 x 54mmです。
穴が半月になっている所はご愛嬌ということで。
ドリルの穴開けはこれでも大丈夫なのです。
ジャンパーで飛ばす所が1箇所。
ピン間に細~いパターン通したくなかったし
0.6mエンドミル 1本でやることにしたので。
その内、Vカッターと0.6mmの2本/2工程で
細~いパターンもやってみようかと思います。
では、
CAM設定に行きます。
1.穴開け(0.6mm)

 [ドリル]使います。
 
刃径:0.6mm、軸径:3.175mm ドリルビットです。
今回は、溶着しないので一気に掘っていいでしょう。
[サイクルタイプ]:「ドリル-早送り退出」
で一気に底まで掘り込んでいきます。
500rpm(50% Duty)です。
[切り込み速度]:5mm/min(弱腰です)
後で見直すと、
[退避送り速度]:50~100mm/minがよかったです。
何も考えずに[切り込み速度]と同じにしていたら
退避位置から表面への移動が遅すぎて無駄な時間がでました。
2.穴開け(0.8mm)
 [ドリル]
 刃径:0.8mm、軸径:3.175mm ドリルビットです。
 0.6mmと同じです。
3.パターン
[2D]-[2D]
以前にPCBを切削した時、最大0.3mm程も反っていたので
モデルは、0.1mm掘り込んでいます。
HeghtMapができればいいのですが壊れています。
様子を見て、削り残しが出れば
これを繰り返そうと思っています。
パターンの最小間隔 0.7mm
外周の縁も銅箔を少し削ります。
切削設定はこれです。
4.中四角の縁削り
中心四角部は、穴を開けるので縁の銅箔を少し削ります。
5.輪郭(内側)
6.輪郭(外側)
エンドミルと切削条件は同じなのですが
タブの間隔を変えるので別々に設定します。
ポスト処理(Gcode吐出)は、一緒にします。
内側
外側
切削条件はこれです。
シミュレーション結果です。
真上から(銅箔面)
Fusion360のモデル上は真下からです。
切削開始です。
まずは、0.6mm穴開けから
0.6mm穴開け
掘り込みスピードが遅すぎました。
表面は銅だし、ビットが1本しかないので慎重に!
紙フェノールなのでMDF並だとは思うのですが。

掘り込みスピード(Z軸)はFeedで変わらないのかあ?
と思いきや、変わっていました。
あまりに遅くしていたので変化が目視でわからないのです。
掘る時間を測ると早くなっていました。
結局、Feed:200%で
5mm/mim ⇒ 10mm/minです。1穴14秒!
20mm/min位でも良さそうです。
間もなく終了。
こんなに時間がかかってしまいました。
次は、0.8mm穴開け10本です。
これもFeed:200%ですが、ノロノロでした。
さて本命のパターン切削です。
というかパターン外堀切削ですが。
0.6mm トウモロコシ エンドミル使います。

退避位置から表面へ
Z軸が降りるだけで削っていないランプ部分が
あまりにも遅いのでCAM設定を変更してGcodeを作り直します。
削り方の規則性がよくわかりません。
広い所からあちこち動き回って削っています。
初めての基板作りなので
動画を3本。
深さは0.1mmのはずです。
反っていなければですが。
最後のはちょっと長いです。
見てたら面白いので調子に乗ってしまって
箔間距離0.7mmを0.6mmのエンドミルで切削しているので
基本的には同じ所を2回通っています。
エンドミルより溝が細いとツールパスができないんです。
パターンは終了して
外枠の銅箔削りに移っています。
削り残しはないようなので
もう1回削らなくて大丈夫そうです。
上の写真の様に
PCBの長手方向の辺を全面的に固定したのがいいのか
ゼロ点調整を端っこでやったからだと思います。
見た目、PCBの反りは、4角の4点固定よりは
少ない感じがします。
たぶんX軸方向の中央部が浮いていると思われます。
写真ではわかりませんね~
まあわからないくらいの反りということで。
終わりました。
元のGcodeは、S700、F100です。
Overridingは、Feed:120%。
最後のタブ付き輪郭です。
切削中~
エンドミル1.0mmだと随分早くできそうです。
と思ったら、慎重すぎて1回の切削深さ0.2mmにしておりました。
だんだんFeedを早くしていって
結局、Feed:200%で200mm/minになりました。
状態を見ながらジワジワ変えられるのはいいです。
完了です。
タブもいい感じに付いています。
下に敷いていたベニヤ板も均等に掘られています。
アップ。
思うに
もはや”PCB:Printed Circuit Board”ではなく
Cutted Circuit Board:CCB
なんか響きが良くない気がする。
Milling cutted Circuit Board:MCB
と言った所でしょうか?
素晴らしい時代を感じさせます。

先に作ったTQFPアダプタ台座部の金メッキ線を基板の穴に通します。
穴位置ピッタリなので
全32ピンを入れるのは思ったより簡単でした。
別アングルで。
部品面から。
一箇所
箔間0.6mm未満になっている所があって
そこだけ削られてなかったのでカッターで切ります。
金メッキ線を通す時に気づいたから良かったものの
気づかなかったら、大きな被害になる所でした。
5VとGNDがもろショートでした。
他もじっくり眺めて点検します。
改めてFusion360のツールパスを見返すと
ツールパスがないですね~
ここは
[工具制限境界]は、通常「工具中心境界」ですが
「工具内側境界」にすると良かったみたいです。
説明を読むと
”中心境界"より"内側境界"の方が
狭い所でパスができないような気がしますが
「工具内側境界」にしてみると
ちゃんとツールパスができています。
これを利用すれば、箔間0.6mm未満でも
0.6mmのエンドミルで切削できますね。
基盤ができたので
パーツをはんだ付けしていきます。

銅箔に指紋がついて錆びそうなので
手で持つ四隅をこのポリイミドテープで
取り敢えず、適当に保護します。
こんな感じに
周りの足をハンダ付け終了。
全面に張って、レーザーでランドだけカットできないかなあ?
ブルーレーザーでは切れないだろうな?
試してみる価値はあるかもですが。
切れたとしても位置合わせ難しそう。
パーツを準備します。
チップ部品は持っていないので
アキシャルリード品ばかりです。
全部品のハンダ付け終了。
Arduino Uno、台座、蓋を並べます。
Arduino Uno(ブートローダー書込機)に
シールドとして台座を装着!
更に蓋をかぶせます。
ATmega328P-AU 32pin TQFPアダプタシールドの完成です!
一応、赤マジックで1ピン目印つけました。
いい感じ、上出来!
自己満足に浸って、しばし眺めます。