atmega328にブートローダとスケッチを書き込む
1. はじめに
ArduinoUNOを使ってatmega328にブートローダとスケッチを書き込む方法について解説します。今回の方法ではatmega328を内蔵8MHzクロックで動作させます。手順を見るとArduinoUNO以外でも出来そうですが手元に無いので保証はできません。
2. 書き込みシールド
一応公式でブレッドボードを使ってブートローダとスケッチを書き込む方法は紹介されています。
しかしこの方法では、毎回ブレッドボードに配線しなければならず、そもそもatmega328が挿抜可能なArduinoUNOでないと不可能です。
そこでバニラシールドを使って書き込み用シールドを作りました。先ほどの公式サイトを参考にすると、ピンは以下のように配線すればよい事がわかります。
その他クロックとGND、電源は必要ですね。以上を踏まえて以下のような書き込みシールドを作りました。
分かりにくくてすみません。左の28pinソケットがatemga328を挿す所です。右の8pinソケットは、小規模の時はATtiny13というマイコンも使うのでそれ用です。省いても全然問題ありません。緑のLEDはデバッグ用で、黄色のやつが16MHzセラロックです。
3. ブートローダの書き込み
3.1 ボードデータのダウンロード
先ほどの公式サイトの中段から自分の使っているArduinoIDEのバージョンに合ったzipファイルをダウンロードします(私のver1.8.5でも「breadboard-1-6-x.zip」は通常動作しました。)。
ダウンロードしたら展開して、Arduinoのアプリケーションが置いてあるフォルダ<XXXX\Arduino\hardware>に「breadbord」フォルダを置きます(フォルダ「hardware」が無い場合は自分で作る)。
ArduinoIDEを起動して、「ツール」→「ボード」の中に「atmega328 on breadboard (8MHz internal clock)」がある事を確認。バージョンによっては名前がちょっと違う事もあるかもしれません。
3.2 ArduinoUNOを書き込み装置にする
まずシールドを挿さずにArduinoUNOをパソコンに接続します。「ファイル」→「スケッチ例」→「ArduinoISP」→「ArduinoISP」を選択します。出てきたソースはArduinoをSPI通信を使った書き込み装置として使うためのスケッチです。これを通常の方法でArduinoUNOに書き込みます。
3.3 ブートローダを書き込む
先ほどの書き込みシールドをArduinoUNOに挿し、ターゲットのAtmega328をソケットに載せます。「ツール」→「ボード」から「atmega328 on breadboard (8MHz internal clock)」を選択。
「ツール」→「書き込み装置」から「Arduino as ISP」を選択(紛らわしいものがあるので注意!)。
「ツール」→「ブートローダを書き込む」を選択。失敗したらもう一回。
3.4 スケッチを書き込む
その状態のまま、書き込みたいスケッチを開きます。ここでの書き込み方法が通常とちょっと違います。
「スケッチ」→「書き込み装置を使って書き込む」を選択するとコンパイルと書き込みが始まるはずです。
これで書き込み完了!
4 まとめ
ArduinoUNOを用いてAtmega328を単体で使う方法について解説しました。この記事をよく読むと大半は準備の過程で、ブートローダとスケッチの書き込み自体はすぐに終わります。書き込みシールドを作ってこの方法を覚えてしまえば、AVRマイコンを安く小さく扱えてかなり便利です。クロック精度が欲しい方は、3.1で外部クロックを使うブートローダを選択すれば同じようにできます。この手の記事は沢山ありますが、書き込みシールドを作れる人にはこの方法が最も楽なのではないかと思います。