前回は3DプリンタのCPU破損に伴い、MelziボードのCPU(ATMEGA1284P)を交換しました。
今回は、交換したCPUにソフトをインストールします。
CPUに制御ソフトをインストールするにはMAC,Linux,Windowsのいずれかのパソコンが必要です。
私のパソコンはWindows10/64bitですので、この環境で作業を進めます。
RepRapの制御ソフトはArduinoで開発されています。従って、Arduinoの開発環境を使ってターゲットCPUにインストールする訳ですが、その前提としてパソコンからファームウェアを転送するために、事前にブートローダーがCPUに書き込まれている必要があります。
Melziを含め、市販のArduinoボードには既にブートローダーが書き込まれています。しかし、今回、CPUを新しく置き換えたため、自身でこれを書き込む必要があります。
ブートローダーを書き込むには、書込み装置とソフトが必要です。今回、書込み装置にはAVRISP mkIIを、ソフトにはAtmel Studioを使用します。
Atmel StudioはAtmelのホームページから最新版(Atmel Studio 7.0 (build 1006) web installer)をダウンロードします。
このツールはVisual Studio2015をベースにしているので、インストーラを起動すると、まずこれがインストールされます。インストール後、再起動が求められこれを行いますが、インストールはまだ終わっていないので注意が必要です。再度、インストーラを起動して後続の処理を行います。
尚、このツールはファイルパスに日本語があるとエラーになるので、名前に日本語を含まないユーザーでログインする必要があります。
次にCPUに書込むブートローダープログラムを入手します。
これはファームウェアプログラムに含まれていますので、これら一式をここからダウンロードします。ファームウェアの名前はMarlinで、このリンクのバージョンはReprapproによりフォークされたものです。
入手したファイルは解凍して、適当なフォルダに配置します。ファイルは後述のファームウェアのインストール時にも使用します。
画面上部の各入力欄に次の設定を行い、Applyボタンを押します。
Device: "Atmega128P"
interface: "ISP"
念のため、[Erase Chip]-[Erase now]ボタンを押して、メモリをクリアします。
[Program]ボタンを押して、ブートローダーを書き込みます。
Fuse Registerに次の値を入力します。
HIGH: 0xDC
LOW: 0xD6
[Program]ボタンを押して書き込みます。
LOCKBIT欄に0x0Fを設定します。この値もboards.txtで指定されています。
[Program]ボタンを押して書き込みます。
これでブートローダの書込みは完了です。
制御ボードのリセットボタンを押すことにより、ブートローダは起動します。ファームウェアはUSB経由でArduino開発ツールから書込み可能となりました。
ブートローダーに続き、ファームウェアを書き込みます。
まず、Arduino開発環境を構築します。
Arduino開発ツール(Arduino IDE)のWindows Installer版をここからダウンロードし、インストールします。
このパッケージにはMelzi関連のハードウェア情報が含まれていないので、先ほどダウンロードしたファームウェアファイルの中からハードウェア情報ファイルを取り出し、IDEのインストールディレクトリ上にコピーします。
本来この作業はコピーするだけの簡単な作業ですが、ファームウェアが開発された時点のAduino IDEと最新のAduino IDEのバージョンでは、ハードウェアファイルの形式に互換性がなくなっているので、以下のような多少面倒な作業となります。
ダウンロードしたファームウェア中の'sanguino’フォルダとその内容をIDEの'Arduino/hardware/’フォルダにコピーします。
コピーしたsanguinoフォルダの下にavrフォルダーを作成し、sanguinoフォルダ直下のファイル及びフォルダを移します。
\sanguino\avr\bootloaders\atmegaの下のブートローダー関連ファイルを\sanguino\avr\bootloadersに移動します。
\arduino\avr\platform.txtファイルを\Sanguino\avrフォルダにコピーし、内容を編集します。
name=Arduino AVR Boardsを
name=Sanguino AVR Boardsに変更します。
boards.txtを編集します。
atmega1284.upload.protocol=stk500v1を
atmega1284.upload.protocol=arduinoに変更します。
atmega1284.bootloader.tool=arduino:avrdudeを追加します。
arduinoのスケッチフォルダ(<ドキュメント>\Arduino)にダウンロードしたファームウェアファイルのMarlinフォルダをコピーします。
制御ボードのUSBコネクターとパソコンのUSBコネクタをUSBケーブルで接続します。
[ファイル]-[スケッチブック]メニューから"Marlin"を選択し、ファームウェアのスケッチブックを開きます。
ファームウェアファイルは書き込むハードに合わせてソースコードの変更が必要となります。
Configuration.hを編集します。
//#define REPRAPPRO_HUXLEY行のコメントアウトを外します(先頭の//を削除)。
//#define REPRAPPRO_MELZI行のコメントアウトを外します。
ホットエンドのサーミスタ直列抵抗(R5)の値により
//#define SERIAL_R 4700または
//#define SERIAL_R 10000行のコメントアウトを外します。
今回ダウンロードしたファームウェアの場合、何故か関数重複定義エラーが発生しました。
調べてみると、引数が異なる同一名の関数:code_seenが2つ存在しています。
bool code_seen(char*)
[ツール]-[ボード]メニューで"Melzi 1284p 16mhz"を選択します。
[ツール]-[シリアルポート]で制御ボードのUSBシリアルポート番号を選択します。
書込み後、制御ボードのリセットボタンを押下し再起動します。
後は、XYZ軸のキャリブレーション値などの後で設定した値について、組み立て時と同じ要領で設定して終了です。
以上の作業で無事、機能するようになりました。
ボードごと交換することに比べ、手間がかかってしまいましたが、古いボードが再利用できて良かったです。
実は、保険として安価なボードを購入していましたが、今回は出番がなかったので、将来の補修部品としてストックしておくことにしました。