音遊び日記

ハードウェアとソフトウェアの両面から”音”で遊んだ事を備忘録として書いています。

atmega328にブートローダとスケッチを書き込む

 

1. はじめに

ArduinoUNOを使ってatmega328にブートローダとスケッチを書き込む方法について解説します。今回の方法ではatmega328を内蔵8MHzクロックで動作させます。手順を見るとArduinoUNO以外でも出来そうですが手元に無いので保証はできません。

 

2. 書き込みシールド

一応公式でブレッドボードを使ってブートローダとスケッチを書き込む方法は紹介されています。

Arduino - ArduinoToBreadboard

しかしこの方法では、毎回ブレッドボードに配線しなければならず、そもそもatmega328が挿抜可能なArduinoUNOでないと不可能です。

そこでバニラシールドを使って書き込み用シールドを作りました。先ほどの公式サイトを参考にすると、ピンは以下のように配線すればよい事がわかります。

f:id:hsy221:20181210213700p:plain

その他クロックとGND、電源は必要ですね。以上を踏まえて以下のような書き込みシールドを作りました。

f:id:hsy221:20181210214026j:plain

分かりにくくてすみません。左の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で外部クロックを使うブートローダを選択すれば同じようにできます。この手の記事は沢山ありますが、書き込みシールドを作れる人にはこの方法が最も楽なのではないかと思います。