AVRマイコンをすげ替える
- カテゴリ: 3Dプリンタ
- 投稿日時: 2017/10/11(水) 22:51:17
SD Ramps を有効にした Marlin がプログラム領域が足りないエラーでインストールできなかった話の続きです。
Arduino Mega2560 と RAMPS1.4 で電装をすべて入れ替えるのもアリですが、既存のハーネスを作り直すのが地味に面倒。加えてなにげに GEN6 にも愛着が湧いてきたもので。どんなにいじっても主流には勝てはしないんですけどね。
実は QFP (Quad Flat Package) の取り外し、取り付けはやったことがありません。無理をすると基板のパッドをやっつけそうです。やり方を模索。一番参考になったのがこちら。
ハンダゴテだけで面実装ICを外す方法 | アナログ電子回路コミュニティ | EDN Japan BBS
治具をつくって四辺を同時に加熱するんですね。なるほど。
手持ちのハンダゴテは 23W と 40W の二本。今回の作業ではたぶん熱容量的に辛いと思われたので 60W 品を新調することにしました。ヒーテッドベッドの配線とかベタアースのデバイスでいつも苦労していたのでいい機会だと。
人生最初に買ったハンダゴテは goot の 60W だった気がします。こんなにデカかったかな。最近小さいのばかり見ていたので慣れの問題なんでしょう。
goot の本体は行方不明ですが当時モノのヒートカッター用アタッチメントは今も持ってます。いまは ファンテック カービングヒートペンCH-1 があるので出番はほとんどありません。 たまたま家にあったφ0.9の銅単線を使って口型の治具を作成。脚を取り囲むように、すべての脚に接触するように曲げます。参照元では撚り線のほうが加工性がよいとありましたが、このあたりは自由にアレンジしましょう。
いきなり本番はヤバそうなので、いらないジャンク基板で練習です。この基板は例の HP のジャンクプリンタのメイン基板だったかな。使い道のないゴミです。
結果は… 失敗。石も割れてパッドももげてしまいました。石の裏側になにやら放熱板か GND のようなものがあり、脚のハンダ付けだけでなく裏側全体で基板に取り付けられていたようです。こりゃ無理だ。
次はこちら。一度も実運用されぬまま電源ショートして燃やしてしまった DSO138 の成れの果てです。発煙した STM32 には穴が空いてました。石のサイズに合わせて治具を作り直し。うまくいきました。意外と簡単です。
ファームウエア書き込み済みの STM32 を入手できれば修理も可能ということですね。いつかやってみよう。
でもって本番。ちょっとだけ手間取りましたがうまくいきました。はんだ吸い取り線できれいにならしてアルコールでヤニを落としておきます。外した Atmega644P も再利用できそう。
外すのは大変でも Atmega1284P の取り付けは簡単。パッドに合わせて上に載せ、テープで仮固定、サクサクとハンダ付けしていきます。
音の出るタイプのテスタで導通チェック。一発でうまくいきました。プローブ先端につけたアタッチメントはアメリカ出張時にジョージアの RadioShack で買ったもの。ワニ口クリップのものもあります。便利なんですよこれ。
物理的な作業は割合簡単でした。問題はここから。ファームウエアの書き込みです。
約一年前、3DSM Mendel Prusa を買ったばかりの頃に一番ハマったのがこのブートローダの書き込みでした。
何も書かれていない AVR マイコンにブートローダを書き込むためには、ライターと呼ばれる物理的な機器が必要です。
前回は Arduino UNO をいじって AVRISP MKII クローンを作成、いろいろやっている間にいつの間にか書き込みに成功していたんですね。だから当時の記事を見ても詳しいことが書いてない。ひとまず動いているからいいやと。こーゆーのが一番困るんですよねwww
ひとまず覚えている限りで同じことをしてみます。参考にしたのは前回と同じくこちら。当時と比べると少々加筆されてます。
外付けAVRライタ無しでBootloaderなどを書き込む(Arduino UNO Rev. 3 ) - kosakalab -
DFU モードで起動した Arduino UNO の ATmega16U2 に Flip で AVRISP-MKII_ATmega16u2.hex を書き込むと、AVRISP MKII クローンが出来上がります。ここまでは問題なし。
Arduino UNO の ATmega16U2 - ICSP から伸ばしたハーネスを GEN6 の ICSP に接続。
Arduino UNO をPC に USB 接続してドライバをインストール。
Avrdude 5.6 と avrdude-GUI を使ってヒューズバイトを読み出し / 書き込み … できません。こんなエラーを吐いてます。
avrdude: stk500v2_recv_mk2: error in USB receive
ここからが泥沼。
まず Atmega1284P のハンダ付け不良を疑って再チェック。問題なし。
UNO とGEN6 の接続間違いもなし。
Avrdude のバージョン違いを試したり、USB ドライバを Jungo 、libusb と変えてみたり。Arduino IDE からサクッと書けないものかと、手持ちの複数バージョンを試してみたりもしました。
… 全く変化がありません。弱りました。
しばし現実逃避。普段あまり見ないアニメ見てみたり。
で、考え方を変えることにしました。
前にこの AVRISP MKII クローンを使って書き込みができたときの環境は今とは随分違います。PC は同じですが Windows10 は 32bit から 64bit へ。前がうまく行ったからといって今もうまくいくとは限らない。
AVRISP MKII にこだわるのをやめて、ぜんぜん別のキーワードでググっていると、とある方の日本語の記事が目に止まりました。はてなダイアリーです。
ただ、目指しているものや説明、略語の使い方がちょっと難解でしたので、そこで引用されていた海外の記事を見に行ってみました。
Gammon Forum : Electronics : Microprocessors : How to make an Arduino-compatible minimal board
開発はオーストラリアの Nick Gammon さん。独自開発したスケッチを入れた Arduino UNO を使って、ATmega328P にブートローダを書き込んでます。他の様々な AVR マイコンに対応しているようで、最後のほうには Atmega1284P の例もあります。
これですよこれ、正にこれ。ビンゴ。
今後のこともあるので、手順を書いておきます。
GEN6 にブートローダを書き込む方法
用意するもの
- Arduino UNO
- ジャンパーワイヤ 片側オス片側メス 6本
- Arduino IDE ( UNOと接続し書き込みできるもの) 今回は v1.6.9 を使用
- 下記手順2の ZIP ファイル ( Nick Gammon さんの Github から入手 )
手順
1. GEN6 の ICSP と UNO のデジタル入出力ピンをジャンパーワイヤで接続。PC とはまだ接続しない2. Nick Gammon さんの Github へ行ってスケッチ一式をダウンロードする。Clone or download > Download ZIP からPC の適当な場所に保存する
3. Arduino IDE を起動してスケッチを保存しているフォルダを確認する。ファイル > 環境設定 > 設定
ちなみに私の場合は C:\Users\kyu\Documents\Arduino でした。
4. 先程ダウンロードした ZIP を解凍し、中身全てを上記のフォルダに移動。全て必要です
5. Arduino UNO を PC に USB 接続して Arduino IDE 起動。ツール > ボード で Arduino/Genuino UNOを選択。ツール > シリアルポート で UNO が接続されているポートを選択
6. スケッチ「Atmega_Board_Programmer.ino」を開き UNO に書き込む
7. ツール > シリアルモニタ を開き通信速度を115200 に設定する。 UNO のリセットボタンを押す
8. シリアルモニタに対話式のメニューが表示されたら、「G」をタイプしてエンターキーを押すと、Atmega1284P にブートローダーが書き込まれる
ブートローダさえ書き込めてしまえばあとは楽勝。UNO を取り外して GEN6 を PC に直接接続、前回書いたとおりに pins_GEN6.h と Configuration.h を修正して Marlin を書き込みました。
話が前後しますが SD Ramps を先に注文していました。
いつもの AliExpress です。送料無料で $1.9 。到着は MCU と同時でした。 ドーターボードに増設したコネクタに差してみたら、他のコネクタとちょっと干渉してましたので修正。
GEN6 の ICSP につながってます。ICSP だけでは一本足りないので空いていた PCINT21/TDI (24番ピン) も使ってます。プルアップ抵抗は 1.8k。
安物なのでインジケータの LED がありません。回路図 を探し出して空きスペースにつけてみました。3.3Vのレギュレータが生きているかどうかの確認くらいしかできませんけどね。読み書きしているときにチラチラと点滅すればいいのに。
基板を本体に復元していざ起動。Pronterface を起動して接続すると「SD OK」の文字が。うまくいったようです。
適当なスライス済みファイルを読み込み、「SD」メニューから SD カードへアップロード。デバッグオンにしていると右のコンソールに G コードが流れていくのがわかります。なるほどこりゃ遅いわけだ。実運用時は PC に接続したSD カードリーダーで書き込んだほうが良さそうです。
GEN6 にドーターボードをつけてヒーテッドベッド対応、PWMファン対応、SDプリント対応。
こんなに苦労してやっと Melzi 相当になったんですね。誰もやらないわけだ。ははっ
コメント
2件のコメントがあります
御無沙汰しております。
最近Arduinoを弄り始めたので、タイトルに轢かれてやって来ました。
UNOを使ったブートローダの書き込みは、ウチでも上手く出来なかったので参考になります。ウチで書き込もうとしたのは、間違ってブートローダを消してしまったArduino Megaなんですが。
テスターのアタッチメントはイイですね。老眼入ってくると、普通のテスターのピンでは表面実装パーツの導通チェックが辛いので細いピンが欲しくなります。
日本でも買えないか、探してみます。
MAHARUさんこんにちは。お久しぶりです。
単車以外はいじらない人だと思ってましたwww
Arduino Mega ならAtmega2560 ですよね。Nick Gammon さんの対応リストにあるのでたぶん可能かと思いますよ。
ただし別に UNO が必要です。まあ Ali でクローンが500円しないので問題ないですよね。
Radio shack は倒産してしまったわけですが、いまはどうなってるんでしょ。電子工作野郎にとってはとてもよいお店だったのに残念です。