[Arduino復旧術] サラのATmega328Pにブートローダーでプログラムを書き込む
※ 当ページには【広告/PR】を含む場合があります。
2021/02/26
そこで少し今更感のあるネタになりますが、新品未使用のATmega328Pマイコンを買って最初にやるべきことにブートローダーを準備することが挙げられます。
またArduinoも一枚あたりの単価はそれほど安価ではないので、誤ってマイコンをショートさせて焼いたときの復旧方法としてブートローダーの書き込み方は覚えておきたいものです。
ウェブ検索で
Arduino ブートローダー 書き込み
ブートローダー?
そもそもArduinoのブートローダーというのは、Arduino IDEのスケッチプログラムからターゲットのマイコンにプログラムを書き込んでくれるArduino開発では必須のユーティリティツールです。
デフォルトのArduino製品には既にブートローダーがプリインストールしてあるために、パソコンにUSBを繋ぐだけでシリアル通信からプログラムが書き込みできるのも、全てはブートローダーのおかげというわけです。
そして、新品未使用のディスクリートなマイコンを購入して使う場合には、当然ブートローダーは入っていないのですので、そのままUSB-シリアル変換でパソコンに繋いだとしても、Arduino IDEからプログラムを書き込みすることができません。
ではこのブートローダーをどうやって初期状態のマイコンに書き込むのか、というお話を以下で進めていきます。
なお、
ブートローダー書き込み専用機の準備
今回の話ではATmega328Pに限ったブートローダー書き込み手順を説明しますが、市場に出回っているArduinoに搭載されてるマイコンも色々と種類が異なりますので、本記事でArduinoというともっともベーシックなArduino Uno Rev3ということにさせて頂いております。
Uno以外でもブートローダーの書き込みが行いたい方は
さて、まっさらなマイコンにブートローダーを初期書き込みするためには、ブートローダー専用の書込用デバイスを準備することになります。
これは市販されて製品化されている物もありますが、Arduino1台あればこの書込用デバイスは自作することが可能なのです😍。
ということで、ひとまず手持ちのArduino1台をブートローダー書き込み専用機として利用してみたいと思います。
'Arduino ISP'を書き込む
ブートローダー書き込み専用機を作るためには、
Arduino ISP
パソコンとArduinoを接続し、Arduino IDEを起動します。 以下の図のように
[スケッチ例] > [Arduino ISP]

これでブートローダー書き込み専用機になりましたので、一旦パソコンとの接続を切っておきます。
サラのATmega328Pをブートローダーで初期化
ここから主題のお話です。
外部の水晶振動子を使って書き込む方式でやってみますので、最低限以下の部品が必要になるようです。
+ 16MHz水晶振動子...1石
+ 10kΩ抵抗...1石
+ 18~22pFセラミック積層コンデンサ...2石
ブートローダー書き込み用に配線
まず
ブートローダー - ATmega328P
ここでは以下のように

なお公式のチュートリアル内では触れられていなかったようですが、書き込みに失敗することもあるらしいので念の為に
RESET-GND間

ちなみに16MHzの振動素子は手元に
念押しで

余談 ~ ICSP
Arduinoシリーズには、ボードのに6ピンのオスヘッダの島があるものがあります。
これは
ICSP(In-Circuit Serial Programming)
より一般には
ISP(In-System Programming)
Arduino ISP
AVRマイコンのICSPヘッダアサインメントは以下のように取り決められるのが通例です。

図中の5ピンのRESET端子だけは取扱注意で、Lowレベルの際にICSPモードがアクティブになります。 Highの場合にICSPモードをアクティブにしたい場合にはこことは別のポートを使うことになります。
よってArduino Uno R3では、以下の2つのパターンで配線をした場合はICSPとしては等価になります。

図の参照先:
https://ht-deko.com/arduino/bootloader.html
今回は正攻法の公式チュートリアルでの接続方法を試しましたが、ICSPヘッダをボード上に持っているモデルの場合ICSPを使った方がピンの指し間違いが少なくなるので、ICSPヘッダがあるのならこちらを積極的に使うことを推奨します。
なお、今回の書き込み装置からターゲットのマイコンへの供給電圧は5Vです。
場合によっては書込装置側が5Vだけれど、ターゲット側マイコンの公称電圧が3.3Vだった、どうしよう...というケースもあるかもしれませんが、この時に何も考えずに書き込んでしまうと、マイコンの内部トレラント電流以上が流れてこんがり焼けて壊れる恐れがあり危険です。
ブートローダーを書き込む前には必ず書き込み装置とターゲット電圧が合っているかを確認してください。
ATmega328Pにブートローダーを書き込む
上記まででブートローダー書き込み装置側(Arduino)とブレッドボード側(ATmega328P)の接続の準備が整いましたので、いよいよブートローダーの書き込みです。
ここでArduinoとPCをUSB接続します。 なお書き込みターゲットのATmega328PにもArduino側から5V電源が供給されます。
まずは
[ツール] > [ボード]

次に
[ツール] > [シリアルポート]

[ツール] > [書込装置]
Arduino as ISP

見ての通りで市販の書き込み装置の種類が色々とあるようですので、適切な項目を選択できるようになっています。
最後に
[ブートローダーを書き込む]

書き込みが終わったら、Arduino側のUSBを抜いて、電源供給を止めて一丁上がりです。
では本題だったなんだか壊れたっぽい挙動のArduinoUnoからマイコンを剥ぎ取ります。

なんだか固着して固く動かないときがありますが、ピンセットを使ってマイコンの底を押し上げる感じで慎重にソケットから引き抜きます。

ブートローダーを書き込んだマイコンを向きに注意してソケットに入れ替えます。
あとは、ArduinoIDEの
[スケッチ例] > [1. Basic] > [Blink]
まとめ
今回はArduinoIDEを用いたスタンダードなやり方でサラのATmega328P(-PU)にブートローダーを書き込むまでの手順をおさらいしました。