Arduinoを使って色々作っていると、実装するときはAVR単体で良いのでは?という気がしてきまして。
試しにAVRのIC単体を買ってみたので、Arduinoのスケッチを書き込めるようにしました。
本来はAVRライターというものを使ってプログラムを書き込むようなのですが、Arduinoを書き込み装置として使ってプログラムを書き込めるようなので、今回はその方法を採用しました。
絵にするとこんな感じになります。
今回は、書き込み装置としてArduino Nano、AVRはATTiny44を使いました。
ざっくりとした手順は下記のようになります。
- Arduino Nano を書き込み装置として設定する【初回のみ】
- Arduino IDE に使いたいAVRのボードパッケージをインストールする【初回のみ】
- AVRの初期化(ブートローダー有無をここで決める)【初回のみ】
- スケッチの書き込み
参考にさせて頂いた記事はこちらになります。
1.Arduino Nano を書き込み装置として設定する【初回のみ】
ここでは、「スケッチ例」→「ArduinoISP」を開いて、Arduinoに書き込みます。
この段階では特別なことはなく、いつも通り書き込めばOKです。
2.Arduino IDE に使いたいAVRのボードパッケージをインストールする【初回のみ】
下記URLをコピーします。
http://drazzy.com/package_drazzy.com_index.json
これを「環境設定」→「追加ボードマネージャーのURL」に貼り付けます。
「ツール」→「ボード」→「ボードマネージャー」から、「ATTinyCore」をインストールします。
これで、書き込む際のボードが色々と追加されました。
他のボードを使いたい場合は、こちらから当てはまるものを探してみてください。
3.AVRの初期化(ブートローダー有無をここで決める)【初回のみ】
ここから、ようやくArduinoとAVRを接続していきます。
Arduino Nano と ATTiny44 の接続は、下記のようになります。
回路図に書くと、こんな感じ。
実際に接続したときの写真はこんな感じ。
私はこれで書き込めましたが、エラーが出る場合はArduinoのRESETとGND端子の間に10uFのコンデンサを入れると良いそうです。
接続したら、ようやくAVRの初期化です。
その前に、ブートローダーについて私なりの理解をまとめておきます。
ブートローダーは、プログラムを書き込む際に必要な小さなプログラムで、Arduinoボードに搭載されているマイコンには予めブートローダーが書き込まれています。
これから使おうとするAVRにも同様にブートローダーを書き込むことが可能で、これを行うと次からArduinoを経由しなくてもPCから直接AVRにプログラムを書き込むことができます。
ただし、ブートローダーもプログラムであるため、マイコンのプログラム容量を消費してしまいます(約0.5kB)。
容量の小さいマイコンでは無視できない容量であるため、AVRにブートローダーを書き込むか否かは状況に応じて判断すれば良いと思います。
AVRにブートローダーを書き込まない場合は、Arduino経由でAVRにプログラムを書き込めば、問題無く動作します。
あくまで、「ブートローダー=書き込むときのみ必要なプログラム」というイメージです。
Arduinoがブートローダーの役割を担ってくれているので、Arduino経由で書き込めばAVRにブートローダーは不要です。
絵にするとこんな感じ。
今回はプログラム容量が4kBしかないATTiny44を使うので、ブートローダー無しで進めます。
ブートローダーの有無は、ボードの設定で選ぶことができます。
AVRの型番の後ろに「No bootloader」と「optiboot」の2種類がありますが、「No bootloader」を選択すればブートローダー無しの設定になります。
ATTiny44でブートローダー無しの設定だと、下記のように変更します。
赤色で囲ったところのみ変更し、それ以外は触っていません。
この状態で、一番下の「ブートローダーを書き込む」を押します。
「え、ブートローダー無しじゃなかったの?」と思うかもしれませんが、あくまでこれはAVRの初期化。
0.5kBのブートローダーを書き込むわけでは無いのでご安心を。
ヒューズビットの設定(クロック周波数を8MHzにする為、など)が主な目的です。
書き込みが完了したことを見届けましょう。
4.スケッチの書き込み
適当にLチカのスケッチなどを開いて、AVRに書き込んでみます。
書き込み方は、「スケッチ」→「書き込み装置を使って書き込む」から行います。
無事、Lチカが出来ました!
とっても小型でシンプル。
基板に実装することを想定すると、やはりAVR単体を使いこなしたくなります。
AVRライター用のArduinoは、他のArduinoと混ざらないように管理したいですね。
私はこんな感じで保管することにしました。
頻繁に使うようになれば、書き込み装置としてちゃんと基板を作りたいですね。