ブートローダの書き込み (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のブレットボードを使用して書き込む回路の自作も可能です。

極貧ブートローダ書き込み機 [K-GHWRT]
極貧ブートローダ書き込み機 [K-GHWRT]

その1の、Arduino が2台ある場合には、
正常な1台を書き込み機として使用し書き込むことができます。
この場合の回路(配線)は図の通りです。
   この回路図の作図には fritzing を利用させて頂いております。
   https://fritzing.org/home/

回路図

方法、その1、その2 の配線ですが、

Arduino ( master ) 側Arduino ( Target )  側 〔 書き込む側の Arduino 〕
5V5V (VCC)
GNDGND (GND)
D13D13 (SCK)
D12D12 (MISO)
D11D11 (MOSI)
D10RESET (RESET)
Arduino(master) - Arduino(Target)の接続ピン

のとおりです。
また、ICSP端子を使用して配線することもできます。

ICSP端子の利用
ICSP端子の利用
ICSP端子配列
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.マイコンボードへ書き込みます。
  アイコンメニュー「マイコンボードに書き込む」をクリックします。
  または、メニュー「ツール」→「マイコンボードに書き込む」をクリックします。

マイコンボードに書き込み処理1
マイコンボードに書き込み処理1
マイコンボードに書き込み処理2
マイコンボードに書き込み処理2

 5.書き込み装置を選択します。
  メニュー「ツール」→「書込装置」→「Arduino as ISP」 を選択します。

書き込み装置の選択
.書き込み装置の選択

 6.ブートローダーを書き込みます。
  メニュー「ツール」→「ブートローダを書き込む」 を選択します。

ブートローダの書き込み
ブートローダの書き込み

Arduino IDE のメッセージ画面に、
”ブートローダの書き込みが完了しました。”と表示され、
これで、書き込みは完了です。

 ブートローダの書き込み 完了(成功)
ブートローダの書き込み 完了(成功)

書き込みに失敗した場合は、その旨の表示がされます。

ブートローダの書き込み 完了(失敗)
ブートローダの書き込み 完了(失敗)

Optifix を使用する書き込みは、
aitendoさんの
極貧ブートローダ書き込み機の紹介ページ などでは、

Optifix スケッチを公式サイトからダウンロードしてとありますが、
現在ではこのページは掲載されていないようです?
※検索すればダウンロードできるサイトはあります。

Optifix スケッチのダウンロード
Optifix スケッチのダウンロード

ダウンロードした
Optifix スケッチの optiloader.h の 1行目を、
 #include <WProgram.h>
  ↓
 #include <Arduino.h>
に修正してコンパイルするとありますが、
Optifix スケッチが現在の Arduino IDE バージョンに
対応していないため、スケッチの他の行で、
コンパイルエラーとなります。
これを修正するには、数行の修正が必要になります。

コンパイルエラー画面
コンパイルエラー画面

この修正については、
私には修正できる技量もありませんし、
Arduino の公式ページには記載がされていないようです。
そのため、修正内容の記載は止めておきます。

もし、興味のある方は、
”Optifix ブートローダ 書き込み”
などで検索されると、修正内容や書き込み方法を解説されておられる
ページがありますので、参考にされるとよいです。