2017年7月28日金曜日

小型工作機CNC2418 その24(もう1枚 v1.1f Upgrade失敗)

新しいボードもGRBL v1.1fにUpgradeします。
やり方忘れない内にっと!
このボードです。
GRBL 0.9jです。
CNC2418のオリジナルボードとちょっと違いっています。
前回成功した手順でやります。
あっりゃーっ! 書き込みエラーです。

以下、失敗の長~~~い、苦難の記録です。
最後まで成功はしませんのでご了承の程を。

試しに
ボード:Arduino Unoでやってみます。
チップが同じなのでNanoと同じ結果になると思いきや
99%だったのが94%になっています。
フラッシュサイズを調べてみると
Uno:32KB(内0.5KBはbootloader用)
Nano:32KB(内4KBはbootloader用)@ATmega328
ちょっと違うんですね。
で、書き込みをすると
やっぱし書き込みエラーです。
Arduino IDEのシリアルモニタ機能
[ツール]-[シリアルモニタ]では、
ボードと通信できてGRBL設定が出るので
ボードがは死んでいません。

より詳細なエラーメッセージを見れるということで
環境設定で[コンパイラ]と[書込]にチェックを入れます。
こんなエラーがでています。
*********
Arduino:1.8.3 (Windows 10), ボード:"Arduino Nano, ATmega328"
~中略~
最大30720バイトのフラッシュメモリのうち、スケッチが30428バイト(99%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が1633バイト(79%)を使っていて、ローカル変数で415バイト使うことができます。
スケッチが使用できるメモリが少なくなっています。動作が不安定になる可能性があります。
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM3 -b57600 -D -Uflash:w:C:\Users\xxxx_X~1\AppData\Local\Temp\arduino_build_403558/grblUpload.ino.hex:i

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              : arduino
         Overriding Baud Rate          : 57600
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x8c
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x8e
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x0d
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x2a
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xc5
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x46
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x48
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x48
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x0e
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xbc

avrdude done.  Thank you.

スケッチの書き込み中にエラーが発生しました
********
"not in sync"どうも通信の同期が取れてないみたい?
特に"Overriding Baud rate: 57600"
ってのが気になります。
書込の時だけ 115200 から 57600にするのだろうか?
デバイスマネージャーで
COM3のBaud Rateを57600にしてみるもダメ!です。
そもそも最初に成功したオリジナルのボードは
このCOM3 115200のままでもうまくいったのです。
Arduino IDEでは書込時はこの設定をスルーして
内蔵のドライバを使うようです。
そう言えば、インストールの時になんかドライバ入っていきました。
エラーメッセージにあるように
Arduino IDEは、書込時にインストールフォルダ内の
avrdude.exeを実行しています。
そのconfigファイルが
C:\Program Files (x86)\Arduino\hardware\tools\avr\etc
の avrdude.conf だとわかったので、
baudrate = 115200
を追加できないかやってみます。
*****
programmer
  id    = "avrispmkII";
  desc  = "Atmel AVR ISP mkII";
  baudrate = 115200;  これを追加
  type  =  "stk500v2";
  connection_type = usb;
*****
結果、
Overriding baud rate: 57600 で変化はありません。
この avrdude.conf では変更できないのですね。
ここにコマンドで書き込む方法がありました。
コマンドプロンプトでavrdude.exeを直接使うというものです。
Baud rateを指定できるようです。

まずコンパイルされたバイナリデータを準備します。
コンパイルした後、
[スケッチ]-[コンパイルしたバイナリを出力]します。
こんなエラーがでますが
適当なフォルダを指定します。
[grblUpload]というフォルダができます。
中には3つファイルが入っています。
そのフォルダごとCドライブのルートに移動します。
C:\Program Files (x86)\Arduino\hardware\tools\avr\etc
のavrdude.confを
avrdude.exeのあるフォルダ
C:\Program Files (x86)\Arduino\hardware\tools\avr\bin
にコピーします。
コマンドプロンプトでフォルダパスを指定するのが面倒だからです。
(終わったら削除するのを忘れないようにしなきゃ)

コマンドプロンプトで
”cd c:\program files (x86)\arduino\hardware\tools\avr\bin”

avrdude.exeのあるディレクトリに移動します。
"dir /w"
でフォルダ内のファイルリストを確認します。
次のコマンドを叩きます。
この引数でOverriding Baud rateを変えられます。
Baud rateを-bで115200にしています。
”avrdude.exe -C avrdude.conf -v -p atmega328p -c arduino -P COM3 -b 115200 -D -U flash:w:C:\grblUpload\grblUpload.ino.hex:i”
しばし間を置いて
エラー出ますね~、ちょっと違いますが、
「program is not responding」の文字が増えています。
試しに 57600にしてみます。
”avrdude.exe -C avrdude.conf -v -p atmega328p -c arduino -P COM3 -b 57600 -D -U flash:w:C:\grblUpload\grblUpload.ino.hex:i”
Arduino IDEのメニューから書き込んだ時と同じエラーになります。
少なくとも
115200では、エラーメッセージに
「programer is not responding」ってのが増えていて
57600では、ないので通信だけはできているのかなあ?
このエラー、調べるといっぱい出てくるんです。
皆さん悩んでおられます。
でもずばり解決できたのは、ないようなのです。

ここのKnown Issueに
*****
Clone Arduino boards using the CH340G USB to Serial chip experience occasional transmission errors and their use is at your own risk. There is no current fix for this problem on CH340G equipped boards.
*****
「CH340G USB to Serialチップを使用してArduinoボードを複製すると、
 時折伝送エラーが発生します。自己責任で使ってください。
 現在(2017.5.13時点のもよう)、
 CH340G搭載ボードでは、この問題に対する修正はありません。」
ということが書いてあります。
この”時折”ってのが引っかかりますね~。

先に成功したオリジナルのボードは、CH340Gです。
そしてこの失敗しているボードもCH340Gです。
最初のは、偶然成功したというのだろうか?
マーティーは”時折”に引っかかったのでしょうか?

チップを取り外して直接書き込むしか方法がないのだろうか?

色々検索しているとこんな情報
Baud rateを微妙に変えたらいいみたいなのもあるので。

avrdude.exe -C avrdude.conf -v -p atmega328p -c arduino -P COM3 -b 57850 -D -U flash:w:C:\grblUpload\grblUpload.ino.hex:i

そううまくはいきませんね~
「non-standard baud rate」ってのが追加されますが
57600と同じ結果です。

半分の28800ではどうか
avrdude.exe -C avrdude.conf -v -patmega328p -carduino -PCOM3 -b28800 -D -Uflash:w:C:\grblUpload\grblUpload.ino.hex:i

エラーですが、違ったコメントが
「avrdude.exe: serial_baud_lookup(): Using non-standard baud rate: 28800avrdude.exe: stk500_recv(): programmer is not responding」

ここに
avrdude.exeのserial_baud_lookup()のテーブルがあります。
1200, 2400,4800,9600,19200,38400,57600,115200, 230400
このテーブルを変えれば
違ったBaud rateもできるのでしょうが
どこのファイルにあるか探せませんでした。

これらを試してみる
遅いやつならタイミングにも余裕があると思われるので
4800、9600で試すもだめー。
念の為、COM3も設定しているのです。

どうやら57600以外では
「programmer is not responding」がでます。

しばし考え.....そうだ
Serial変換ボードを持っていた気がする。
ありました!RS232C~TTL変換ボードでした。
チップは、Maxim MAX3232 9pinDSUBです。
10年位前に確か秋月電子で買ったかと。
流石にもう売ってないですね~
シリアルかあーー
Arduino IDEの
C:\Program Files (x86)\Arduino\hardware\tools\avr\etc
avrdude.confを見ると
"avrisp”がserialになっています。
*****
programmer
  id    = "avrisp";
  desc  = "Atmel AVR ISP";
  type  = "stk500";
  connection_type = serial;
;

programmer
  id    = "avrispv2";
  desc  = "Atmel AVR ISP V2";
  type  =  "stk500v2";
  connection_type = serial;
;

programmer
  id    = "avrispmkII";
  desc  = "Atmel AVR ISP mkII";
  type  =  "stk500v2";
  connection_type = usb;
;
*****
[書込装置]を[AVR ISP]にすればできそうな気がします。
一方、Woodpeckerボードの方は、
v1.1f Upgrade成功の時に偶然見つけた
ここのほぼ最後に回路図があります。
Linksprite CNC1610=Woodpeckerと同じはずだ、
の回路図を見ます。
schematic 2.pdf にチップ周りが載っています。
USBのCH340G と ATMEGA328P とは
RxDとTxDの2本だけで繋がています。
Woodpeckerボードの表は
赤枠で囲んだピンがRxDとTxDです。
CH340Gのピンを浮かせることは何とかできそうですが
その下のランドにリード線をハンダ付けするのは無理そうです。
ほとんど脳外科手術の世界。
そこでパターンを探っていくと
CH340G と ATMEGA328P は、この赤線のパターンだけで
繋がっています。
ここをカットすれば、リード線も引き出せそうです。
脳外科医でないマーティーも手術できるでしょう。
とは言うものの
今時のPCには、シリアルポートがない。
ありました!
DestTopのWindows7です。
Core2 Duo E7500 2.93GHz ご老体です。
USBカメラで監視カメラとして使っていたものです。

でWin7機にArduino IDE 1.8.3をインストールします。
この前やった手順です。
デバイスソフトウェアは、Win10の時の3つ以外に
libusb-win32
Genuino USB Driver
Linino ポート(COM と LPT)
ってのもインストールされました。

Arduino IDEを起動して
GRBL v1.1fのライブラリをインクルードします。
この前の手順です。

まずは、USBで接続してみたいので
江苏沁恒股份有限公司のHPから
CH341SER.ZIPをダウンロードして
解凍してsetup.exeでインストールします。
で、普通通りUSBで接続して
Arduino IDEのメニューから普通の手順でやってみます。

だめですね~
結果は同じです。
CH340Gのドライバーの日付が
CNC2418付属のより新しかったので
少~し期待したのですが

では、RS232Cボードの取り付けに入ります。

回路図をよく眺めます。
TxDとRxDが逆にならないように
対抗なのでひねる必要があります。
340G:TxD -- 328P:RxD(30pin)
340G:RxD -- 328P:TxD(31pin)
となっているので
328P:RxD(30pin)--MAX232ボードのTxD
328P:TxD(31pin)--MAX232ボードのRxD
でいいはずです。

パターンをカットします。
もはやこれなしでは無理です。
レンズ2つの最高倍率の6倍にしています。
カットしました。
微妙に繋がっているといけませんので
念の為、テスターで確認します。
TxDとRxDのLEDがあったので
そこから細ーいリード線を引き出します。
5V、GND、TxD、RxDの4本を
RS232Cボードと接続しました。
Windows7機に接続します。
電源はUSBから取ります。

SerialのCOM1に設定します。
一度、シリアルモニタで確認したいので
115200に設定します。

”$$”を送るとGRBLの設定が出てきました。
通信は成功です。
結線に間違いはなかったということです。

書き込みに入るため
COM1を57600に設定し
書込装置:”AVR ISP”にして
いざ書き込み!
だめですね~
同じエラーがでます。
書込装置を色々変えてみてもだめです。

もう一度、回路図を眺めていると
CH340GのDTRが、328PのRESETに繋がっています。
リセット端子が怪しい気がしてきました。

ありました!
DTRとArduinoの関係
「DTR 信号線の電圧降下のタイミングは
スケッチのアップロード開始のタイミングと一致するよう調整。
スケッチのUploadのタイミングでDTR信号が1から0になる。」
と書いてあります。
だから、DTR信号をC6で微分してリセット信号を作っていたわけです。
WoodPeckerのCH340GでのRESET回路を見落としていました。
今頃気づくマーティーであります。(-_-;)
ここにブートローダー起動の詳しい説明が
なるほど~~~
シリアルのDTR信号でRESETをかけるんですね。
Arduinoのブートローダーは、リセットがかかると、
まず、スケッチが来ていないか見るんですね。
一定時間が経過すると内部のスケッチを起動するのか~。

先程のRS232C~TTL変換ボードは
DTRはDSUB 9pinの4番pin
しか~し Openになっています。
だめだー

よーし、ここまでくれば意地でも
232C-TTL変換ボードに
DTRをつけてやるしかありません!

RS232C to TTL 変換回路を調べます。
トラ技の試読み?にありました。

RS232Cの電圧レベルです。
受信では、
データの”1”:-15V~-3V
データの”0”:+15V~+3V
レベル変換と反転が必要です。
丁度いいことにトランジスタによる
TTLレベルへの変換回路もありました。
これ付けることにします。
それくらい自分で考えよう!と言われそうですが...
まず、WoodPeckerボードのCH340GのDTRピンを浮かせる必要があります。
13ピンがDTRです。
ついでにTxD、RxD(2、3ピン)も浮かせます。
ルーペ越しに撮影しましたが何とか見えるでしょうか?
2、3ピンを浮かせたので
この前カットしたパターンはもとに戻します。
細いワイヤーで繋ぎます。
RS232C~TTLレベル変換回路の実体配線図を書きます。
得意の空中配線です!
まあ急ぐ時はこれに限ります。
急がない時もよくやるのですが(-_-;)
配線完了!
手書き配線図に空中配線、なかなかいいでしょう!(笑)
Woodpeckerボードと接続します。
これで最後か?
DeskTop Windows7機に繋ぎます。

Arduino IDE 1.8.3を起動して
Arduino Nano、書込装置:AVRISPでgrblUploadを書き込みます。
だめで~す。
同じエラーです。

シリアルのプロトコル・アナライザで調べると
何かわかるのでしょうが
ちょっとそこまでは踏み込めずーー

この方法は、諦めるしかなさそうです。

中のブートローダーとの通信がうまくいっていないですね~
Arduino IDEは、ブートローダーがあるかどうか判らないのでしょう。
どうもこのWoodpeckerの328Pには
ブートローダーが入っていないような気がしてきました。
入ってないとしか考えられません。

ブートローダーを書き込むには
PICと同じようにISCPライターが必要です。
Arduino UnoをISCPライターにしようと思っているので
注文しておいたArduino Unoの到着を待つしかないです。
しかもWoodpeckerに装着された状態で
328Pチップに書き込みできる保証はありません。

それでだめなら
生チップ単体に書き込んでから
付け換えるしかないですね~。

まあ、収穫はあります。
Arduinoの書き込み方、avrdude.exe、RESETの謎
RS232Cでのやり方等々
この知識は今後役立つことでしょう?

そうこうしている内に
Arduino UNOが届きました!
格闘はまだ続きそうです(T_T)/~~~

0 件のコメント: