2017年06月07日 | 公開。 |
今まで、ATmega328Pなど、28ピンのAVRマイコンを使って、Arduino互換機を作ってきました。28ピンのAVRマイコンでArduino互換機を作ると、I/Oピンが20ピン(内蔵CR発振器を使う場合は22ピン)もあり、たくさんの周辺部品を付ける場合は便利です。
一方で、電子サイコロの場合は必要なI/Oピンが5ピンしかなく、28ピンのAVRマイコンを使うと、未使用ピンが多くなってしまいます。この様に必要なI/Oピンが少ない場合は、ピン数の少ないAVRマイコンでArduino互換機を作ると、配線も少なく、基板のサイズも小さくなるので有利です。
この章では、秋月電子で50円(2017年6月現在の価格)で購入できるATtiny13AというAVRマイコンの話を中心に、8ピンまたは14ピンのAVRマイコンでArduino互換機を作る方法について説明します。
Arduino IDEでスケッチを開発できる8ピンのAVRマイコンには、ATtiny13A、ATtiny44、ATtiny85などがあります。また、Arduino IDEでスケッチを開発できる14ピンのAVRマイコンには、ATtiny44、ATtiny84などがあります。これらのAVRマイコンと、ATmega328Pの性能を比較した表を、表7に示します。またATtiny13A、ATtiny85、ATmega328PのそれぞれのDIP品の写真を写真62に示します。
項目 | ATtiny13A | ATtiny45 | ATtiny85 | ATtiny44 | ATtiny84 | ATmega328P |
---|---|---|---|---|---|---|
ICのピン数 | 8ピン | 8ピン | 8ピン | 14ピン | 14ピン | 28ピン |
GPIOの本数 | 6本 (Arduinoとして使う場合は5本) |
←ATtiny13Aに同じ | ←ATtiny13Aに同じ | 12本 (Arduinoとして使う場合は11本) |
←ATtiny44に同じ | 23本 (Arduinoとして使う場合は20本) |
アナログ入力の本数 (アナログ入力ピンはGPIOピンと共用) |
4本 (Arduinoとして使う場合は3本) |
←ATtiny13Aに同じ | ←ATtiny13Aに同じ | 8本 | ←ATtiny44に同じ | 6本 |
PWM出力の本数(PWM出力ピンはGPIOピンと共有) | 2本 | 4本 (Arduinoとして使う場合は2本) |
←ATtiny45に同じ | 4本 (Arduinoとして使う場合は3本) |
←ATtiny44に同じ | 6本 |
フラッシュメモリの容量 | 1kB | 4kB | 8kB | 4kB | 8kB | 32kB |
RAMの容量 | 64B | 256B | 512B | 256B | 512B | 2kB |
EEPROMの容量 | 64B | 256B | 512B | 256B | 512B | 1kB |
UARTインターフェース | なし | なし | なし | なし | なし | 1チャンネル |
I2C(TWI)インターフェース | なし | なし | なし | なし | なし | 1チャンネル |
SPIインターフェース | なし | なし | なし | なし | なし | 1チャンネル (マスター/スレーブ両対応。ただしArduinoで使えるのはマースターモードのみ) |
表7から分かるように、8ピンや14ピンのAVRマイコンは、ATmega328Pと比較すると、GPIOのピンが減っているだけでなく、メモリ容量が少なくなり、UART、I2C、SPIの各インターフェースがなくなっています。これらの点が問題にならない用途になら、8ピンや14ピンのAVRマイコンが、Arduino互換機として使用できます。
特に、ATtiny13AとATtiny85は、秋月電子でそれぞれ50円、160円という低価格(いずれも2017年6月現在の価格)で入手できるため、利用価値が高いといえます。
表7に示したAVRマイコンは、すべてArduino用ブートローダ/スケッチライタという書き込み器を使うと、Arduinoのスケッチを書き込む事ができます。
商品名 | Arduino用ブートローダ/スケッチライタ(完成品) | |
税抜き小売価格 | 3600円 | |
販売店 | スイッチサイエンス マルツ | |
サポートページ | Arduino用ブートローダ/スケッチライタ(完成品)サポートページ |
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |
それでは、ATtiny13AでArduino互換機を作り、それにLEDやタクトスイッチを追加して、電子サイコロにしてみましょう。
ATtiny13AをArduino互換機として使う場合は、図92の様なピン割り当てになります。
Arduino互換機の基本回路は、図93の様に、8番ピンをVCC、4番ピンをGNDに接続して電源を供給し、1番ピンを10kΩ程度の抵抗でプルアップした回路となります。D0~D4の5本のI/Oピンを、周辺回路に接続して使用します。
D0~D4にLEDとタクトスイッチを接続し、電子サイコロにした回路図が図94です。ATtiny13Aを使うと、ATmega328Pなどを使う場合に比べて基板上のスペースに余裕があるので、コイン電池と電源スイッチも一緒に搭載しました。
実際にユニバーサル基板上に組んだ電子サイコロの写真を、写真63と写真64に示します。ATtiny13Aは、スケッチ書き換えの際に抜き差しする必要があるので、ICソケットを使って実装しています。
ATtiny13Aにリスト4のスケッチを書き込めば、電子サイコロが動作します。このスケッチは、1ページのリスト1のスケッチを、ピン割り当てのみ書き換えたものです。
void display(int n)
{
switch(n) {
case 0:
digitalWrite(0,LOW );
digitalWrite(1,LOW );
digitalWrite(2,LOW );
digitalWrite(4,HIGH);
break;
case 1:
digitalWrite(0,HIGH);
digitalWrite(1,LOW );
digitalWrite(2,LOW );
digitalWrite(4,LOW );
break;
case 2:
digitalWrite(0,HIGH);
digitalWrite(1,LOW );
digitalWrite(2,LOW );
digitalWrite(4,HIGH);
break;
case 3:
digitalWrite(0,HIGH);
digitalWrite(1,LOW );
digitalWrite(2,HIGH);
digitalWrite(4,LOW );
break;
case 4:
digitalWrite(0,HIGH);
digitalWrite(1,LOW );
digitalWrite(2,HIGH);
digitalWrite(4,HIGH);
break;
case 5:
default:
digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(4,LOW );
break;
} // switch
} // display
void setup()
{
// used pins
pinMode( 0,OUTPUT ); // LED A
pinMode( 1,OUTPUT ); // LED B
pinMode( 2,OUTPUT ); // LED C
pinMode( 4,OUTPUT ); // LED D
pinMode( 3,INPUT_PULLUP); // switch
display(0);
} // setup
void loop()
{
static int pip=0;
delay(8);
if(digitalRead(3)==LOW) {
pip++;
if(pip>=6) pip=0;
display(pip);
} // if
} // loop
スケッチをATtiny13Aに書き込むには、Arduino IDE 1.6.Xまたは1.8.Xが必要です。そして、kosakalabが配布しているATtiny13用定義ファイルをArduino IDEにインストールする必要があります。
注:ATtiny13とATtiny13Aは異なるマイコンですが、ソフトウェア的には互換性があるため、ATtiny13用の開発環境でATtiny13Aのスケッチの開発ができます。
ATtiny13用定義ファイルを入手するには、kosakalabのArduino IDE に ATtiny10/13 の開発環境を組み込むという記事のページにアクセスし、bitDuino_2017.zipというファイルをダウンロードしてください。(図95参照)
ダウンロードしたbitDuino_2017.zipを展開すると、bitDuino_2017というフォルダができますが、その中に、さらにbitDuino10とbitDuino13という2つのフォルダがあります。必要なのは、bitDuino13のフォルダのみです。(図96参照)
参考:bitDuino10は、ATtiny10という6ピンの非常に小型のAVRマイコンの定義ファイルです。ATtiny13Aのスケッチの開発には必要ありません。
スケッチを保存するフォルダ(Windows環境の場合は通常、ドキュメント\Arduino)の中のhardwareフォルダに、先ほどのbitDuino13フォルダをコピーすると、ATtiny13用定義ファイルのインストールは完了です。(図97参照) hardwareフォルダが元々ない場合は、作成してからbitDuino13フォルダをコピーしてください。
参考:Arduino IDE に ATtiny10/13 の開発環境を組み込むの記事では、avr-gccの差し替えの方法も説明されていますが、これはATtiny10を使う際に必要になる手順です。ATtiny13Aの開発のみを行う場合は、avr-gccを差し替える必要はありません。
ATtiny13の定義ファイルのインストールが終わった状態で、Arduino IDEを起動し、ツール→ボードメニューを選ぶと、選択肢にATtiny13(bitDuino13)が出てくるようになります。(図98参照)
ATtiny13にスケッチを書き込むには、Arduino用ブートローダ/スケッチライタとFTDI BASICなどのUSBシリアル変換器を用意し、以下の手順で作業をしてください。
USBシリアル変換器から電源が供給されている状態でジャンパピンの設定を変えると、電源がショートする事があり、故障の原因になります。過電流保護用のポリスイッチを付けているので、簡単には故障しない設計にはなっていますが、保護回路を過信する事は禁物です。
CN4(ENABLE BUZZER)にジャンパピンを付けると、スケッチの書き込み時に、書き込みの様子を音でモニターできます。音が出るとうるさい場合は、CN4にはジャンパピンを付けないでください。
使用するUSBシリアル変換器は、5V出力の物でも3.3V出力の物でも構いません。上の写真に写っているのは、5V出力と3.3V出力を切り替えられる物です。
電源の入ったパソコンにUSBケーブルを接続すると、LED1(POWER)が点灯します。また、LED6(HEARTBEAT)が周期的に明るくなっ たり暗くなったりします。
注:SW1(およびSW2、CN4)は電源が入っているときでも操作して構いません。ただし、ヒューズビットやスケッチの書き込みの最中には操作しないでください。
注:次の図では、リスト4の電子サイコロのスケッチを開いています。
注:Arduino IDEのバージョンによっては、ツール→ポートメニューになります。また、次の図ではCOM3を選んでいますが、実際には皆さんの環境に合わせて、COM番号を選んでください。
参考:クロック周波数が高いほど処理が高速で、消費電流が増えます。必要な処理速度と消費電流の兼ね合いでクロック周波数を決めてください。リスト4の電子サイコロのスケッチの場合は、4.8MHzを選択してください。
上の写真を参考にして、ZIFソケット左上のレバーを立てた状態で、ATtiny13Aを挿入してください。この際、ATtiny13Aの向きを反対にしないように注意してください。
ATtiny13AがZIFソケットに挿入できたら、ZIFソケットのレバーを倒して、ATtiny13Aを固定してください。
注:ATtiny13Aでは、ブートローダを使いません。この操作で書き込まれるのは、ヒューズビット(クロック周波数などの各種設定)です。一度ヒューズビットを書き込んだマイコンの場合、クロック周波数を変更しない限り、手順12は省略できます。
ヒューズビットの書き込みが終了すれば、図105の様なメッセージが出ます。
注:Arduino IDEのバージョンによっては、ファイル→書込装置を使って書き込むメニューになります。
書込装置を使って書き込むメニューを選択すると、コンパイル後にスケッチの書き込みが始まります。
スケッチの書き込みが終了すれば、図107の様なメッセージがでます。
以上で、スケッチの書き込みが終わりました。続けて別のATtiny13Aに同じスケッチを書き込む場合は、手順11以降を繰り返してください。
リスト4の電子サイコロのスケッチを書き込んだ場合は、図94の回路図の基板のICソケットに、スケッチを書き込んだATtiny13Aを挿入し、電源スイッチを入れれば、電子サイコロとして動作するはずです。
この章では主に、ATtiny13Aを使ったArduino互換機の作り方を説明しましたが、ATtiny13AはI/Oピンが5本と少なく、またスケッチを格納するフラッシュメモリも1kBしかありません。電子サイコロの場合は必要なI/Oピンがちょうど5本で、スケッチのサイズも558バイト(Arduino 1.8.0を使用してコンパイルした場合)と、1kBのフラッシュメモリに収まる大きさでしたが、もっと複雑な物を作る場合、ATtiny13Aでは対応できなくなります。
フラッシュメモリの容量が足らない場合は、ATtiny45やATtiny85を使えば、容量がそれぞれ4kB、8kBと増えますし、I/Oピンが足らない場合は、ATtiny44や84を使えば、I/Oピンが11本に増えます。
ATtiny44/84/45/85を使ってArduino互換機を作る方法については、Arduino用ブートローダ/スケッチライタの製作(8)の記事に方法が載っていますので、そちらを参照してください。
商品名 | Arduino Uno用ブートローダスケッチライタシールドキット | |
税抜き小売価格 | 1440円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino Uno用ブートローダライタシールドキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタ(完成品) | |
税抜き小売価格 | 3600円 | |
販売店 | スイッチサイエンス マルツ | |
サポートページ | Arduino用ブートローダ/スケッチライタ(完成品)サポートページ |