前回は3DプリンタのCPU破損に伴い、MelziボードのCPU(ATMEGA1284P)を交換しました。
今回は、交換したCPUにソフトをインストールします。
この文書は個人的なものであり、読者による修理を推奨するものではなく、内容について一切の責任を負いかねます。
CPUに制御ソフトをインストールするにはMAC,Linux,Windowsのいずれかのパソコンが必要です。
私のパソコンはWindows10/64bitですので、この環境で作業を進めます。
RepRapの制御ソフトはArduinoで開発されています。従って、Arduinoの開発環境を使ってターゲットCPUにインストールする訳ですが、その前提としてパソコンからファームウェアを転送するために、事前にブートローダーがCPUに書き込まれている必要があります。
Melziを含め、市販のArduinoボードには既にブートローダーが書き込まれています。しかし、今回、CPUを新しく置き換えたため、自身でこれを書き込む必要があります。
ブートローダーを書き込むには、書込み装置とソフトが必要です。今回、書込み装置にはAVRISP mkIIを、ソフトにはAtmel Studioを使用します。
AVRISP mkIIは秋月電子通商から購入しました。
Atmel StudioはAtmelのホームページから最新版(Atmel Studio 7.0 (build 1006) web installer)をダウンロードします。
このツールはVisual Studio2015をベースにしているので、インストーラを起動すると、まずこれがインストールされます。インストール後、再起動が求められこれを行いますが、インストールはまだ終わっていないので注意が必要です。再度、インストーラを起動して後続の処理を行います。
尚、このツールはファイルパスに日本語があるとエラーになるので、名前に日本語を含まないユーザーでログインする必要があります。
次にCPUに書込むブートローダープログラムを入手します。
これはファームウェアプログラムに含まれていますので、これら一式をここからダウンロードします。ファームウェアの名前はMarlinで、このリンクのバージョンはReprapproによりフォークされたものです。
入手したファイルは解凍して、適当なフォルダに配置します。ファイルは後述のファームウェアのインストール時にも使用します。
書込み装置をパソコンと制御ボードに接続します。制御ボードには電源を接続し、給電しておきます。
Atmel Studioを起動します。
画面上部の各入力欄に次の設定を行い、Applyボタンを押します。
Tool: "AVRISP mkII"
Device: "Atmega128P"
interface: "ISP"
AVRISP mkIIのファームウェアにアップデートがある場合はアップデートが求められるので、これを行います。
[Read]ボタンを押してDevice SignatureとTarget Voltageを取得します。
[Memories]をクリックして、メモリ操作画面を表示します。
念のため、[Erase Chip]-[Erase now]ボタンを押して、メモリをクリアします。
Flashデータに先ほどダウンロードしたファームウェア内のブートローダープログラムファイルを指定します。
sanguino\bootloaders\atmega\ATmegaBOOT_1284P.hex
[Program]ボタンを押して、ブートローダーを書き込みます。
[Fuse]をクリックし、ヒューズ情報を表示します。
Fuse Registerに次の値を入力します。
EXTENDED: 0xFD
HIGH: 0xDC
LOW: 0xD6
この値は、ダウンロードしたファームウェアファイルのboards.txtで指定されている値です。
[Program]ボタンを押して書き込みます。
警告メッセージが出ますが[Continue]ボタンを押して継続します。
[Lock bits]をクリックしてロックビット画面を表示します。
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ケーブルで接続します。
Arduino IDEを起動します。
[ファイル]-[スケッチブック]メニューから"Marlin"を選択し、ファームウェアのスケッチブックを開きます。
ファームウェアファイルは書き込むハードに合わせてソースコードの変更が必要となります。
Configuration.hを編集します。
//#define REPRAPPRO_HUXLEY
行のコメントアウトを外します(先頭の//を削除)。
//#define REPRAPPRO_MELZI
行のコメントアウトを外します。
ホットエンドのサーミスタ直列抵抗(R5)の値により
//#define SERIAL_R 4700
または
//#define SERIAL_R 10000
行のコメントアウトを外します。
私のボードは472(4.7KΩ)なので前者の行のコメントアウトを外します
[スケッチ]-[検証・コンパイル]メニューでスケッチブックをコンパイルします。
今回ダウンロードしたファームウェアの場合、何故か関数重複定義エラーが発生しました。
Marlin:585: error: previous declaration 'bool code_seen(char*)....
調べてみると、引数が異なる同一名の関数:code_seenが2つ存在しています。
bool code_seen(char code_string[])
bool code_seen(char*)
コードを見ると、前者は使われていないので、削除しました。
書き込み先の設定を行います。
[ツール]-[ボード]メニューで"Melzi 1284p 16mhz"を選択します。
[ツール]-[シリアルポート]で制御ボードのUSBシリアルポート番号を選択します。
[スケッチ]-[マイコンボードに書き込む]メニューをクリックし、ファームウェアを書き込みます。
書込み後、制御ボードのリセットボタンを押下し再起動します。
後は、XYZ軸のキャリブレーション値などの後で設定した値について、組み立て時と同じ要領で設定して終了です。
以上の作業で無事、機能するようになりました。
ボードごと交換することに比べ、手間がかかってしまいましたが、古いボードが再利用できて良かったです。
実は、保険として安価なボードを購入していましたが、今回は出番がなかったので、将来の補修部品としてストックしておくことにしました。