はじめに
マイコン開発基板であるArduinoにはAtmel社のAVRシリーズと呼ばれるマイクロコントローラーチップが乗っています。
Arduino基板はこのAVRマイコンの制御に必要な諸々が乗っているだけで、自作デバイスを作るときには自分で用意すればいちいちArduinoを購入しなくてもAVRマイコンをArduinoのように使用することができます。
Arduino化というと大げさかもしれませんが、今回はAVRシリーズのひとつATTinyをArduino IDEで編集できるようにします。
ATMegaとATTiny
Arduinoに乗っているAVRマイコンはATMegaシリーズと呼ばれるマイコンが乗っています。特にArduino Uno に使われているものはATMega328pです。ATMegaには機能の差や容量の差などで種類があります。
ATTinyはAVRマイコンのシリーズ違いのものでこちらも機能や容量などに差があります。ATTinyに関してはよくまとまっている記事があるのでそちらを参照してください。
Qiita ArduinoユーザーのためのATTiny入門 : https://qiita.com/tadfmac/items/3a42a641531f2c3679a1
ATTinyはAVRの中でも省電力というメリットはありますが高機能のものは正直ATMegaと同等機能を持っているのでATTInyを選ぶメリットはあまりありません。小型デバイスにしやすいようなATTiny85やATTiny13はよく使われているらしいです。
ATTinyの乗っているArduinoはありませんが、Arduino IDEの拡張機能を使えばこのATTinyをArduino言語で開発しコンパイル・書き込みができるようになります。
ATTinyとArduino IDE拡張
ATTinyのボード追加
ATTinyをArduino IDEで編集するためにはArduino IDEの拡張機能を使います。ATTinyを使えるようにする拡張機能は様々な人が作っており様々なものがありますが今回はSpenceKonde/ATTinyCoreを使います。
ATTiny Coreのインストールの仕方はこちらを参照。
Arduino IDEの上部タブ「Arduino」から「Preferences…」をクリックして環境設定画面を開きます。
環境設定画面にある「追加のボードマネージャーのURL」に「http://drazzy.com/package_drazzy.com_index.json」と入力し、右のボタンをクリックしてカスタムのボードを追加します。
次にArduino IDEの上部タブ「ツール」「ボード」から「ボードマネージャー」を開きます。上部検索から「ATTiny」で絞り込み検索をするなどして「ATTinyCore by Spence Konde」や「megaTinyCore by Spence Konde」などを見つけます。説明欄に対応しているATTinyの型番が書いているので必要なATTinyが載っているボードを追加します。マウスオーバーするとインストールするバージョンを選ぶことができるので、最新版を選んでインストールします。
正常にインストールが完了するとボードマネージャーにATTinyCoreが追加されていると思います。
Arduino Unoによるスケッチの書き込み
Arduinoのライター化
ATTiny(というよりもマイコンチップ自体)にはArduinoのようにUSBの接続端子がないので、USBを書き込みピン(ICSP)へと変換させる必要があります。
専用のAVRライターを使ったり自作したりすることができますが、手っ取り早いのはArduinoをライターとして使う方法があります。(ただしライターはArduino IDE を通して書き込む専用のライター)
Arduino as ISP : https://www.arduino.cc/en/tutorial/arduinoISP
Arduinoをライターとして使用する方法はArduinoISPを使う方法で、対応しているArduinoはArduino UnoやMega、LeonardoやDue、Zeroなどさまざまです。Leonardoが行けるということはおそらくPro microもいけると思います。
Arduinoを専用のAVRライター(Arduino as ISP)にするためのプログラムのスケッチをArduinoに書き込みます。スケッチ「Arduino ISP」は「ファイル」「スケッチ例」「内蔵のスケッチ例 11. ArduinoISP」にある「ArduinoISP」です。このファイルをArduinoに書き込めばArduino Unoが専用のAVRライターになります。
ArduinoISPを導入したArduinoはProgrammer、実際にスケッチを書き込みたいAVRチップやArduinoはTargetと呼ばれます。ProgrammerとTargetはSPI接続でやりとりするので、ProgrammerとTargetのMOSI、MISO、SCL、Vcc、GNDを接続するだけでOKです。このときProgrammerとTargetの動作電圧に注意してください。Arduino UnoにはICSPピンが備わっているので、MOSI(11)、MISO(12)、SCL(13番)を使う代わりにICSPピンを使っても大丈夫です。Programmerのデジタル10番ピンはTargetのResetを制御するピンなので、TargetのResetピンに接続します。
また、Programmer側のResetピンに数uFのコンデンサーをつないでいる場合もあります。
ArduinoISPにはスケッチの書き込み状態を知らせるLEDを接続することができます。必要に応じて使用すると良いかもしれません。
ATTinyとArduinoISPの接続
ArduinoISPで書き込みするためのピンとして Vcc(5V)、GND、MOSI、MISO、SCL、Resetピンが必要です。SpenceKonde/ATTinyCoreで使用できるATTinyの説明をみると、ATTinyで使われるピンの説明が図とともに載っています。
例えばATTiny85だと、下のようなもの。
このうち、ISP Interfaceは青色で書かれているのがわかります。Arduino Uno( Programmer)とATTiny(Target)を繋げばOKです。
例えば、ATTiny85の場合、
ピン | Arduino Uno | ATTiny85 |
Vcc (5V) | 5V | 8 |
GND | GND | 4 |
Reset | D10 | 1 |
MOSI | D11 | 5 |
MISO | D12 | 6 |
SCL | D13 | 7 |
で接続します。
ATTinyのArduinoISPによる書き込み
Arduino IDEを開きATTinyに書き込むスケッチを用意します。
上部タブ「ツール」「ボード」から書き込むATTinyの型番を選択します。ATTinyを選択したらいろいろと詳細を設定できるようになりますが基本的には初期設定のままで大丈夫です。外部水晶振動子をつけたりクロック数を変えたりする場合のみ適宜設定してください。
書き込み装置は「Arduino as ISP」に設定します。これでArduino Unoを仲介してATTinyに書き込めるようになりました。
ATTinyをArduinoとして開発するためには、ATTinyのBootloaderを書き換える(というよりもArduino IDEで書き込めるように設定する)必要があります。ATTinyを接続した状態で「ブートローダーを書き込む」をクリックしてATTinyのブート機能を書き換えます。これは一度設定したATTinyでは別ソフト等で設定を書き換えない限り(Arduino IDEで開発する限り)一度だけ行えば大丈夫です。(執筆時点の最新版Arduino IDE 1.8.9だとエラー吐きます 1.8.5だと問題なく動きます)
以上の設定をしてやれば、あとはArduinoにスケッチを書き込むのと同様にすればATTinyにArduino言語でプログラムを書き込むことができます。
ATTiny85にLチカプログラムを書き込む
さて、ATTinyにプログラムを書き込む準備ができたので、とりあえず動作するか確かめるためにATTiny85にLチカプログラムを書き込んでみましょう。(執筆時点の最新版Arduino IDE 1.8.9だとエラー吐きます 1.8.5だと問題なく動きます)
//ATTiny85 Lチカ
int const ledPin = 3;
void setup(){
pinMode(ledPin, OUTPUT);
}
void loop(){
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
}
ありきたりなLチカスケッチです。ここで、ピン番号ですが、ピン番号はDIP基板などのピン番号ではなく、ATTinyCoreで設定されているArduino Pin番号になります。たとえばATTiny85での Digital 3 ピンは基板の2番になります。
このようにATTinyCoreではATTinyに専用のピン番号が割り振られているので、DigitalピンだけでなくAnalogピンやI2C、SPIなどの通信ピンは確認しながら設定していく必要があります。
ATTinyCoreの書き込みに従ってLチカのスケッチを書き込んでしまえば、Arduino Uno(というかAVRライタ)を外してしまっても、VccとGNDを適切につないでやることでATTiny単体で動作させることができるようになります。
まとめ
今回はAVRマイコンATTinyをArduino言語で開発できるようにしました。
Avrチップ自体を使うことで、Arduinoから必要のない部品やセクションをそぎおとすことができるようになるので、実際に組み込みする際には小型化を測れるようになります。
ATTinyは適切にピン数などを選ぶことで、いちいちArduinoを使わなくてもこういった開発ができるようになるということですね。