ネットにはArduino UNOとブレッドボードを使ったブートローダーを
書き込む方法がありますが、失敗したのでAVRISPmk2を秋月で買いました。

AVRISPmk2があれば外部水晶発振ではなく内部8MhzCR発振にして
水晶が無くても動作するATMEGA328Pを作る事が出来ます。

まずはArduinoブートローダーから

Arduinoのブートローダーについて

通常マイコンなどはISP端子にプログラマーを接続して書き込みます。

しかし、Arduinoの場合は電源、グランド以外にシリアルRX、シリアルTX、リセットの
3ピンだけでプログラムを書き込む事が出来ます。

それを可能にしているのがArduinoブートローダーです。

Arduinoブートローダーの仕組み

マイコンが電源投入、リセットされるとマイコンのROMの始めに記録されている
ブートローダーが起動します。

起動すると、一定時間シリアルから送られてくるデータが無いかチェック。
データが送られて無い場合は、制御をマイコンに記録されたプログラムに移行します。

データが送られて来た場合は、マイコンのROMの内容を書き換えます。

デメリット

このブートローダーの方法は一定時間待つ必要があるので
起動時間が遅くなります。

プログラムに制御が移った後は何ら変わりはありません。

【参考】Arduinoのブートローダって何?(1)

スポンサーリンク

AVRISPmk2でArduinoブートローダーを書き込む

スイッチサイエンスではブートローダー書き込み済なATMEGA328Pが360円、
秋月では書き込んでないATMEGA328Pが250円。

数が多ければ、秋月でまとめて買って使う前に書き込んだ方が
割安ですし、内部8Mhz・外部発振など好きに設定出来ます。

AVRISPmk2とArduino Unoの接続

AVRISPmk2とArduino Unoの接続

UNOにはACアダプタかUSBどちらかを接続します。
接続しないとマイコンに電源供給がされないので、書き込みが出来ません。

AVRISPmk2のリボンケーブルは上の写真の様に接続します。

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

書き込みにはAtmel Studio にある Device Programmingを使います。

ブートローダー本体はArduino IDEをインストールしていてばパソコンに入ってます。
私のWindows環境ではこのパスにありました。
c:\Program Files (x86)\Arduino\hardware\arduino\bootloaders\atmega

書き込むブートローダー

16Mhz外部水晶発振(デフォルト)
C:\Program Files (x86)\Arduino\hardware\arduino\bootloaders\optiboot\optiboot_atmega328.hex

8Mhz内部CR発振の場合は
ATmegaBOOT_168_atmega328_pro_8MHz

ヒューズとロックビット

ブートローダーだけを書き込んでも起動しません、
ヒューズとロックビットの設定が必要です。

8Mhz内部CR発振
EXT・HIGH・LOW・LOCK BIT
0xFD・0xDA・0xE2・0xCF

16Mhz外部水晶発振(デフォルト)
EXT・HIGH・LOW・LOCK BIT
0xFD・0xD6・0xFF・0xCF

【参考】Arduinoのヒューズ設定

まとめ

後は、Blinkなど適当なスケッチを書き込んで動作すれば
書き込み成功です。

動かない場合は、ヒューズ・ロックビットの設定、
ブートローダーが間違ってないか確認しましょう。