最小構成(発振子など一切なし)でArduinoを使いたかったので内部クロック(8MHz)ブートローダの書き込みをやってみました.ネット上には古い情報が出回っており,公式の方法は簡単にできるわりに情報が少なかった(2020/11/24現在)ので備忘録として記録します.
①hardware configurationのダウンロードと配置
スケッチブックフォルダ(デフォルトだと"ドキュメント"→"Arduino")に"hardware"という名前のフォルダを作り,解凍された"breadboard"フォルダを入れます.
ここで,もし
電源電圧を3.3Vないしもっと低い電圧でマイコンを動かしたいなら,ヒューズビッツの設定を書き換える必要があります.注意点として,
ビットを書き込んだ場合は論理レベルが"0"になるという点があります.つまり,0を書き込むと論理レベルは"1",1を書き込むと論理レベルは"0"になります.逆になっています.
AVRにはBrown-Out Detection (BOD)と呼ばれる機能がついており,一定の電源電圧を下回るとリセットがかかります.このBODを作動させる閾値電圧はヒューズビッツのExtended Fuse Byteによって設定されます.
具体的なビットの組み合わせは,以下のようになっています.なお,古いデータシートを参照すると110がReservedになっていません.また,BOD disabledにすると,電圧降下によるリセットが行われなくなり,つまり作動する最低電圧(2.7V(古いデータシートだと1.8V))までマイコンが動くようになります.
具体的な設定方法は,スケッチブックフォルダ→"hardware"→"breadboard"→"avr"→"boards.txt"を開き,
atmega328bb.bootloader.extended_fuses=0x05
の"0x05"部分を任意の値に変更すればOKです.例えば2.7V(Typ)でBODを作動させるには,表から"101"→(ビットを反転)→"010"→(16進数に変換)→"0x02"となります.ブートローダを書き込んだ後にヒューズビッツを変更したい場合は,ブートローダを再書き込みすれば大丈夫です.
③ブートローダ書き込み機になったArduino Uno R3からATmega328P-PUへ書き込み
"ツール"→"ボード"→"breadboard-avr(in sketchbook)"→
"ATmega328 on a breadboard (8 MHz internal clock)"を選択し,"ツール"→"書込装置"→
"Arduino as ISP"を選択します."ArduinoISP"ではないので注意です.また,ボードの選択を誤ると,別のブートローダが書き込まれるので注意しましょう.
図のように配線し(電源は上下に2ヶ所入れなくても(内部で通電しているので)片方だけでOK),
"ツール"→"ブートローダを書き込む"をクリックします.
"ブートローダの書き込みが完了しました。"のメッセージが出れば成功です.Warningが出ますが無視でOKです.