ATmega48/88/168/328用のヒューズリセッターをArduinoで作る
Arduinoにも使われているAtmelのAVRマイコンは、6本線のISP接続で簡単にプログラム転送などが出来るのですが、クロックソースを設定するヒューズビットの値を間違って書込んだりすると、ISPでは中々回復するのが難しい事態に陥る事が有ります。そんな時の救世主としてヒューズリセッター(その名の通り、ヒューズ設定を出荷時状態に戻す)という装置が有ります。今回は、 「Arduino-based AVR High Voltage Programmer」をベースに必要な時に簡単に組めて、なおかつ動作の確認をしやすくしたものを作ってみました。
まずはArduinoに次のファイルをダウンロード・解凍し、スケッチをアップロードして下さい。
その後、一旦Arduinoをパソコンから外し、回路の組み立てをします。
■材料
- ヒューズリセットしたいAVRマイコン(ATmega48/88/168/328)チップ
- Arduino (テストはUnoで行っていますが、他でも大丈夫なはずです)
- 12V電源
- ブレッドボード
- NPNトランジスタ(テストでは2SC1815を使いました)
- 1kΩ抵抗 x 2本 (R1,R4)
- 10kΩ抵抗 x 2本 (R2,R3 ※トランジスタに合わせて1kΩ〜10kΩ程度で調整して下さい)
- ジャンパーワイヤ 適宜
■回路図
簡単に作れる様に保護抵抗は最小限にしました。D0,D1はシリアルモニタと通信する為に空けてあります。そのためピン数が足りないのでPAGELはプルダウン固定ですが、FlashやEEPROMのプログラミングをしない仕様なので問題有りません。
■実態配線図
こちらはECB配列のトランジスタ(2SC1815等)を使った場合
こちらはEBC配列のトランジスタ(2N3903等)を使った場合
もちろんブレッドボードは図の様な小型な物でなくてもかまいません。
回路の組み立てが終わったら間違いないかチェックし、パソコンと12V電源を接続します。
それからArduino IDEを立ち上げ、シリアルモニタを出します。シリアルモニタの下の設定は「CRのみ」(「改行なし」以外なら他でもOK)「9600bps」を選択します。
出て来たメッセージに「D」をタイプしてEnterキーで送信するとチップの型番を自動判定してくれます。ここで対象のチップが見つからないとメッセージが出た場合はただちにArduinoから12V電源とUSBケーブルを抜いて回路のチェックをして下さい。
正しくチップが認識されたら、ヒューズの規定値書込みコマンド「W」を送信→確認の為の「Y」を送信します。するとチップに出荷時のヒューズが書込まれます。
最後に「R」を送信して、ヒューズが正しく書込まれているか確認して下さい。
もし、Lock bitsがFF以外になっていて、ヒューズ設定が書込まれない場合、「C」コマンドでチップ全体のクリアが出来ます。ただしLock bitsだけでなくFlashやEEPROMの内容もクリアされます。これでヒューズビットの書き換えが出来る様になるので、再度「W」コマンドを実行します。
その他、「L」「H」「E」「K」コマンドで、ヒューズビットやLock Bitsの値を指定して書込む事も出来ます。
正しくチップが認識されたら、ヒューズの規定値書込みコマンド「W」を送信→確認の為の「Y」を送信します。するとチップに出荷時のヒューズが書込まれます。
最後に「R」を送信して、ヒューズが正しく書込まれているか確認して下さい。
もし、Lock bitsがFF以外になっていて、ヒューズ設定が書込まれない場合、「C」コマンドでチップ全体のクリアが出来ます。ただしLock bitsだけでなくFlashやEEPROMの内容もクリアされます。これでヒューズビットの書き換えが出来る様になるので、再度「W」コマンドを実行します。
その他、「L」「H」「E」「K」コマンドで、ヒューズビットやLock Bitsの値を指定して書込む事も出来ます。
普段はほとんど使う必要の無いヒューズリセッターですが、いざと言う時に欲しくなりますよね。なのでArduinoを使ってなおかつ正しく動作しているかをモニタしながら作業出来る様に構成してみました。
最近のコメント