ブートローダの書き込み (AVRマイコン)
Arduino UNO が起動しなくなり、
ブートローダ書き込み済みのAVRマイコンを交換し、
動作するようになったという経験がありますが、
ブートローダの異常であったかどうかは分かりません。
Arduino も故障することはありますね。
故障の原因もいろいろで、
ブートローダ異常だけでなく、ハードウェア的な故障、
故障だと思ったら配線ミスやスケッチミスなんてことも
私の場合はよくあります。
AVRマイコンの予備があると安心です。
”ブートローダ書込済み”の AVRマイコン を購入しておくか、
ブランクの AVRマイコン を購入して
ブートローダを自分で書き込んで保管しておきます。
しかし、私の Arduino UNO の AVRマイコン は、
ATmega328P-PU で、ソケットで実装されていますので、
簡単に交換出来ますが、
ATmega328P-AU 等で表面実装タイプのものもあり、
この場合は簡単に交換はできませんし、
”ブートローダ書込済み”のものは販売されていないと思います。
秋月電子通商
・AVRマイコン ATMEGA328P-PU
https://akizukidenshi.com/catalog/g/gI-03142/
¥210-
・Arduino Bootloader 書込済(5V 16MHz仕様) ATmega328P
https://akizukidenshi.com/catalog/g/gI-12774/
¥320-
・AVRマイコン ATMEGA328-AU
https://akizukidenshi.com/catalog/g/gI-04386/
¥230-
ブランクの AVRマイコン や、動作不良のArduinoに
ブートローダを書き込む場合には、正常に動作する、
もう1台の Arduino と接続して書き込みを行うか、
AVRマイコン対応のライタ(書き込み機)で書き込むことになり、
1台しか持っていない場合、簡単に書き込むことができません。
※実際には、1台しか持っていない場合でも、
Arduino と PCでの書き込みソフトを設定すれば可能ですが、
設定や処理手順が複雑です。
また、
Arduino を追加購入する時も、
”ブートローダ書き込み無し” 製品を選択することで、
若干ですが安く購入出来ますし、
AVRマイコンを、独自設計回路で使用する場合にも、
AVRマイコンへのブートローダの書き込みが必要になります。
ブートローダの書き込み方法は知っておく方がよいですね。
しかし、この書き込みを行う場合もそれなりの準備が必要で、
次の3つのいずれかの方法になるでしょう。
・その1:2台の Arduino を 接続して書き込みを行う。
・その2:ブレットボードに、AVRマイコンの書き込み回路を作り、
Arduino と接続して書き込みを行う。
安定的な書き込みを行うためには、水晶発振、
セラミックコンデンサ、抵抗などを設置した回路が必要です。
※この回路見本は、Arduino 公式ページ で公開されています。
https://www.arduino.cc/en/Tutorial/BuiltInExamples/ArduinoToBreadboard
・その3:書き込み機を用意して AVRマイコン に書き込みを行う。
※この書き込み器とは、Arduino を必要としないもので、
パソコン等と接続して書き込みできるものを指しています。
私には、その2 のような回路を作成するのは面倒な(技量もない)ので、
この回路をプリント基板にした、ブートローダ書き込み用の、
安価な書き込み機を購入しました。
※この書き込み器は、正常に動作する Arduino が必要で、
その2 のブレッドボードの回路の代わりをするものです。
aitendo
極貧ブートローダ書き込み機 [K-GHWRT]
https://www.aitendo.com/product/12789
¥195-
※キットなので組み立て(はんだ付け)が必要です。
※興味のある方はこのキットの付属部品を使用して、
その2のブレットボードを使用して書き込む回路の自作も可能です。
その1の、Arduino が2台ある場合には、
正常な1台を書き込み機として使用し書き込むことができます。
この場合の回路(配線)は図の通りです。
この回路図の作図には fritzing を利用させて頂いております。
https://fritzing.org/home/
方法、その1、その2 の配線ですが、
Arduino ( master ) 側 | Arduino ( Target ) 側 〔 書き込む側の Arduino 〕 |
5V | 5V (VCC) |
GND | GND (GND) |
D13 | D13 (SCK) |
D12 | D12 (MISO) |
D11 | D11 (MOSI) |
D10 | RESET (RESET) |
のとおりです。
また、ICSP端子を使用して配線することもできます。
aitendoさんの
極貧ブートローダ書き込み機の使用する場合は、
Arduino UNO 本体のピンソケットに、
極貧ブートローダ書き込み機のピンヘッダーの
D10、D11、D12、D13、5V、GNDを合わせて装着するだけです。
では、ブートローダの書き込みをしてみます。
書き込み方法は2種類あります。
・Arduino ISP
・Optifix スケッチの利用
※Optifixスケッチで書き込む場合は、公開されているOptifix スケッチが
現在のArduino IDE バージョンに対応していないため、
スケッチの修正が必要となります。
では、
Arduino ISP での書き込み手順です。
1.Arduino ISP 用のスケッチを開きます。
メニュー「ファイル」→「スケッチ例」→「ArduinoISP」 を選択します。
2.Arduino のボードの種類を選択します。
メニュー「ツール」→「ボード : 」→「Arduino AVR Boards」
→「Arduino UNO」 を選択します。
※利用している Arduino の種類を選択します。
3.ポートを選択します。
メニュー「ツール」→「シリアルポート : 」→「COM3 (Arduino Uno)」 を選択します。
※Arduino を PC に接続して、
Windowsのデバイスマネージャーの画面で確認します。
4.マイコンボードへ書き込みます。
アイコンメニュー「マイコンボードに書き込む」をクリックします。
または、メニュー「ツール」→「マイコンボードに書き込む」をクリックします。
5.書き込み装置を選択します。
メニュー「ツール」→「書込装置」→「Arduino as ISP」 を選択します。
6.ブートローダーを書き込みます。
メニュー「ツール」→「ブートローダを書き込む」 を選択します。
Arduino IDE のメッセージ画面に、
”ブートローダの書き込みが完了しました。”と表示され、
これで、書き込みは完了です。
書き込みに失敗した場合は、その旨の表示がされます。
Optifix を使用する書き込みは、
aitendoさんの
極貧ブートローダ書き込み機の紹介ページ などでは、
Optifix スケッチを公式サイトからダウンロードしてとありますが、
現在ではこのページは掲載されていないようです?
※検索すればダウンロードできるサイトはあります。
ダウンロードした
Optifix スケッチの optiloader.h の 1行目を、
#include <WProgram.h>
↓
#include <Arduino.h>
に修正してコンパイルするとありますが、
Optifix スケッチが現在の Arduino IDE バージョンに
対応していないため、スケッチの他の行で、
コンパイルエラーとなります。
これを修正するには、数行の修正が必要になります。
この修正については、
私には修正できる技量もありませんし、
Arduino の公式ページには記載がされていないようです。
そのため、修正内容の記載は止めておきます。
もし、興味のある方は、
”Optifix ブートローダ 書き込み”
などで検索されると、修正内容や書き込み方法を解説されておられる
ページがありますので、参考にされるとよいです。