Arduinoで作った回路の小型化(Arduino互換機の製作)(10)

このページをスマホなどでご覧になる場合は、画面を横長にする方が読みやすくなります。
目次へ  前のページへ (2) (3) (4) (5) (6) (7) (8) (9) (10) 次のページへ
2017年06月07日 公開。

11. ピン数の少ないAVRマイコン(ATtiny13Aなど)でArduino互換機を作る

今まで、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互換機を作る方法について説明します。

11-1.Arduino互換機を作るのに使える主な8ピンまたは14ピンのAVRマイコン

Arduino IDEスケッチを開発できる8ピンのAVRマイコンには、ATtiny13A、ATtiny44、ATtiny85などがあります。また、Arduino IDEでスケッチを開発できる14ピンのAVRマイコンには、ATtiny44、ATtiny84などがあります。これらのAVRマイコンと、ATmega328Pの性能を比較した表を、表7に示します。またATtiny13A、ATtiny85、ATmega328PのそれぞれのDIP品の写真を写真62に示します。

表7、ATtiny13A/45/85/44/84とATmega328Pの比較
項目 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で使えるのはマースターモードのみ)
写真62、左から、ATtiny13A-PU、ATtiny84-20PU、ATmega328P-PU
↑ 画像をクリックすると拡大
写真62、左から、ATtiny13A-PU、ATtiny84-20PU、ATmega328P-PU

表7から分かるように、8ピンや14ピンのAVRマイコンは、ATmega328Pと比較すると、GPIOのピンが減っているだけでなく、メモリ容量が少なくなり、UART、I2C、SPIの各インターフェースがなくなっています。これらの点が問題にならない用途になら、8ピンや14ピンのAVRマイコンが、Arduino互換機として使用できます。

特に、ATtiny13AとATtiny85は、秋月電子でそれぞれ50円、160円という低価格(いずれも2017年6月現在の価格)で入手できるため、利用価値が高いといえます。

表7に示したAVRマイコンは、すべてArduino用ブートローダ/スケッチライタという書き込み器を使うと、Arduinoのスケッチを書き込む事ができます。

Arduino用ブートローダ/スケッチライタ(完成品) 商品名 Arduino用ブートローダ/スケッチライタ(完成品)
税抜き小売価格 3600円
販売店 スイッチサイエンス マルツ
サポートページ
Arduino用ブートローダ/スケッチライタキット 商品名 Arduino用ブートローダ/スケッチライタキット
税抜き小売価格 3000円
販売店 スイッチサイエンス
サポートページ

11-2.ATtiny13AでArduino互換機を作る(ハードウェア編)

それでは、ATtiny13AでArduino互換機を作り、それにLEDやタクトスイッチを追加して、電子サイコロにしてみましょう。

11-2-1.ATtiny13Aを使ったArduino互換機の基本回路

ATtiny13AをArduino互換機として使う場合は、図92の様なピン割り当てになります。

図92、ATtiny13Aのピン割り当て
図92、ATtiny13Aのピン割り当て

Arduino互換機の基本回路は、図93の様に、8番ピンをVCC、4番ピンをGNDに接続して電源を供給し、1番ピンを10kΩ程度の抵抗でプルアップした回路となります。D0~D4の5本のI/Oピンを、周辺回路に接続して使用します。

図93、ATtiny13AをArduino互換機として使う場合の基本回路
↑ 画像をクリックすると拡大
図93、ATtiny13AをArduino互換機として使う場合の基本回路
広告

11-2-2.ATtiny13Aを使った電子サイコロのハードウェア

D0~D4にLEDとタクトスイッチを接続し、電子サイコロにした回路図が図94です。ATtiny13Aを使うと、ATmega328Pなどを使う場合に比べて基板上のスペースに余裕があるので、コイン電池と電源スイッチも一緒に搭載しました。

図94、ATtiny13Aを使った電子サイコロの回路図
↑ 画像をクリックするとPDFファイルで表示
図94、ATtiny13Aを使った電子サイコロの回路図

実際にユニバーサル基板上に組んだ電子サイコロの写真を、写真63と写真64に示します。ATtiny13Aは、スケッチ書き換えの際に抜き差しする必要があるので、ICソケットを使って実装しています。

写真63、ATtinyを使った電子サイコロ基板(表)
↑ 画像をクリックすると拡大
写真63、ATtinyを使った電子サイコロ基板(表)

この写真は、ATtinyに電子サイコロのスケッチを書き込んだ後に撮影したため、LEDが点灯しています。

写真64、ATtinyを使った電子サイコロ基板(裏)
↑ 画像をクリックすると拡大
写真64、ATtinyを使った電子サイコロ基板(裏)

11-3.ATtiny13AでArduino互換機を作る(ソフトウェア編)

11-3-1.ATtiny13A用の電子サイコロのスケッチ

ATtiny13Aにリスト4のスケッチを書き込めば、電子サイコロが動作します。このスケッチは、1ページリスト1のスケッチを、ピン割り当てのみ書き換えたものです。

リスト4、ATtiny13A用の電子サイコロのスケッチCOPY
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

11-3-2.ATtiny13用定義ファイルのインストール法

スケッチを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参照)

図95、bitDuino_2017.zipのダウンロード
図95、bitDuino_2017.zipのダウンロード

ダウンロードしたbitDuino_2017.zipを展開すると、bitDuino_2017というフォルダができますが、その中に、さらにbitDuino10bitDuino13という2つのフォルダがあります。必要なのは、bitDuino13のフォルダのみです。(図96参照)

参考:bitDuino10は、ATtiny10という6ピンの非常に小型のAVRマイコンの定義ファイルです。ATtiny13Aのスケッチの開発には必要ありません。

図96、bitDuino_2017フォルダの中身
図96、bitDuino_2017フォルダの中身

スケッチを保存するフォルダ(Windows環境の場合は通常、ドキュメント\Arduino)の中のhardwareフォルダに、先ほどのbitDuino13フォルダをコピーすると、ATtiny13用定義ファイルのインストールは完了です。(図97参照) hardwareフォルダが元々ない場合は、作成してからbitDuino13フォルダをコピーしてください。

図97、bitDuino13フォルダのコピー
図97、bitDuino13フォルダのコピー

参考:Arduino IDE に ATtiny10/13 の開発環境を組み込むの記事では、avr-gccの差し替えの方法も説明されていますが、これはATtiny10を使う際に必要になる手順です。ATtiny13Aの開発のみを行う場合は、avr-gccを差し替える必要はありません。

ATtiny13の定義ファイルのインストールが終わった状態で、Arduino IDEを起動し、ツール→ボードメニューを選ぶと、選択肢にATtiny13(bitDuino13)が出てくるようになります。(図98参照)

図98、ツール→ボードメニューにATtiny13(bitDuino13)が出てくる
図98、ツール→ボードメニューにATtiny13(bitDuino13)が出てくる

11-3-3.ATtiny13へスケッチを書き込む方法

ATtiny13にスケッチを書き込むには、Arduino用ブートローダ/スケッチライタFTDI BASICなどのUSBシリアル変換器を用意し、以下の手順で作業をしてください。

【手順1】CN1にUSBシリアル変換器が接続されていない事と、CN2にジャンパピンが付いていない事を確認する
写真65、CN1とCN2に何もつながっていない事を確認
↑ 画像をクリックすると拡大
写真65、CN1とCN2に何もつながっていない事を確認

USBシリアル変換器から電源が供給されている状態でジャンパピンの設定を変えると、電源がショートする事があり、故障の原因になります。過電流保護用のポリスイッチを付けているので、簡単には故障しない設計にはなっていますが、保護回路を過信する事は禁物です。

【手順2】 必要ならCN4にジャンパピンを付ける
写真66、CN4へのジャンパピンの取り付け
↑ 画像をクリックすると拡大
写真66、CN4へのジャンパピンの取り付け

CN4(ENABLE BUZZER)にジャンパピンを付けると、スケッチの書き込み時に、書き込みの様子を音でモニターできます。音が出るとうるさい場合は、CN4にはジャンパピンを付けないでください。

【手順3】 CN7にジャンパピンを6個接続し、CN5・CN6にはジャンパピンが付いていないことを確認する
写真67、CN7にジャンパピンを6個付ける
↑ 画像をクリックすると拡大
写真67、CN7にジャンパピンを6個付ける
【手順4】 USBシリアル変換器をCN1に接続し、さらにUSBケーブルでパソコンに接続する。
写真68、USBシリアル変換器とUSBケーブルの接続
↑ 画像をクリックすると拡大
写真68、USBシリアル変換器とUSBケーブルの接続

使用するUSBシリアル変換器は、5V出力の物でも3.3V出力の物でも構いません。上の写真に写っているのは、5V出力と3.3V出力を切り替えられる物です。

電源の入ったパソコンにUSBケーブルを接続すると、LED1(POWER)が点灯します。また、LED6(HEARTBEAT)が周期的に明るくなっ たり暗くなったりします。

【手順5】 SW1をArduinoISP側に切り替える
写真69、SW1をArduinoISP側に切り替える
↑ 画像をクリックすると拡大
写真69、SW1をArduinoISP側に切り替える

注:SW1(およびSW2、CN4)は電源が入っているときでも操作して構いません。ただし、ヒューズビットやスケッチの書き込みの最中には操作しないでください。

【手順6】 Arduino IDEを起動し、マイコンに書き込みたいスケッチを開く

注:次の図では、リスト4の電子サイコロのスケッチを開いています。

図99、書き込みたいスケッチを開く
図99、書き込みたいスケッチを開く
【手順7】 ツール→シリアルポートメニューでUSBシリアル変換器のポート番号(COM番号)を指定する

注:Arduino IDEのバージョンによっては、ツール→ポートメニューになります。また、次の図ではCOM3を選んでいますが、実際には皆さんの環境に合わせて、COM番号を選んでください。

図100、シリアルポートを選択する
図100、シリアルポートを選択する
【手順8】ツール→ボードメニューでATtiny13(bitDuino13)を選ぶ
図101、ATtiny13(bitDuino13)を選択
図101、ATtiny13(bitDuino13)を選択
【手順9】ツール→Clockメニューでクロック周波数を選ぶ

参考:クロック周波数が高いほど処理が高速で、消費電流が増えます。必要な処理速度と消費電流の兼ね合いでクロック周波数を決めてください。リスト4の電子サイコロのスケッチの場合は、4.8MHzを選択してください。

図102、クロック周波数を選択
図102、クロック周波数を選択
【手順10】 ツール→書込装置メニューでArduino as ISPを選ぶ
図103、Arduino as ISPを選択
図103、Arduino as ISPを選択
【手順11】 CN3のZIFソケットにスケッチを書きこみたいATtiny13A挿入し、レバーで固定する
写真70、レバーを立てた状態でATtiny13Aを挿入
↑ 画像をクリックすると拡大
写真70、レバーを立てた状態でATtiny13Aを挿入

上の写真を参考にして、ZIFソケット左上のレバーを立てた状態で、ATtiny13Aを挿入してください。この際、ATtiny13Aの向きを反対にしないように注意してください。

ATtiny13AがZIFソケットに挿入できたら、ZIFソケットのレバーを倒して、ATtiny13Aを固定してください。

写真71、レバーを倒してATtiny13Aを固定
↑ 画像をクリックすると拡大
写真71、レバーを倒してATtiny13Aを固定
【手順12】 ツール→ブートローダを書き込むメニューを選んでヒューズビットを書き込む
図104、ブートローダを書き込むメニューを選択
図104、ブートローダを書き込むメニューを選択

注:ATtiny13Aでは、ブートローダを使いません。この操作で書き込まれるのは、ヒューズビット(クロック周波数などの各種設定)です。一度ヒューズビットを書き込んだマイコンの場合、クロック周波数を変更しない限り、手順12は省略できます

写真72、ヒューズビット書き込み時のLEDの状態
↑ 画像をクリックすると拡大
写真72、ヒューズビット書き込み時のLEDの状態

ヒューズビットの書き込みが終了すれば、図105の様なメッセージが出ます。

図105、ヒューズビット書き込み完了時のメッセージ
図105、ヒューズビット書き込み完了時のメッセージ
【手順13】 スケッチ→書込装置を使って書き込むメニューを選んで、スケッチを書き込む

注:Arduino IDEのバージョンによっては、ファイル→書込装置を使って書き込むメニューになります。

図106、書込装置を使って書き込むメニューを選択
図106、書込装置を使って書き込むメニューを選択

書込装置を使って書き込むメニューを選択すると、コンパイル後にスケッチの書き込みが始まります。

写真73、スケッチ書き込み中のLEDの状態
↑ 画像をクリックすると拡大
写真73、スケッチ書き込み中のLEDの状態

スケッチの書き込みが終了すれば、図107の様なメッセージがでます。

図107、スケッチ書き込み完了時のメッセージ
図107、スケッチ書き込み完了時のメッセージ
【手順14】ZIFソケットのレバーを起こして、ATtiny13Aを抜き取る

以上で、スケッチの書き込みが終わりました。続けて別のATtiny13Aに同じスケッチを書き込む場合は、手順11以降を繰り返してください。

リスト4の電子サイコロのスケッチを書き込んだ場合は、図94の回路図の基板のICソケットに、スケッチを書き込んだATtiny13Aを挿入し、電源スイッチを入れれば、電子サイコロとして動作するはずです。

11-4.ATtiny44/84/45/85を使ってArduino互換機を作る

この章では主に、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)の記事に方法が載っていますので、そちらを参照してください。

目次へ  前のページへ (2) (3) (4) (5) (6) (7) (8) (9) (10) 次のページへ

このページで使われている用語の解説

関連ページ

関連製品

Arduino Uno用ブートローダスケッチライタシールドキット 商品名 Arduino Uno用ブートローダスケッチライタシールドキット
税抜き小売価格 1440円
販売店 スイッチサイエンス
サポートページ
Arduino用ブートローダ/スケッチライタキット 商品名 Arduino用ブートローダ/スケッチライタキット
税抜き小売価格 3000円
販売店 スイッチサイエンス
サポートページ
Arduino用ブートローダ/スケッチライタ(完成品) 商品名 Arduino用ブートローダ/スケッチライタ(完成品)
税抜き小売価格 3600円
販売店 スイッチサイエンス マルツ
サポートページ
Arduino 電子工作
このサイトの記事が本になりました。
書名:Arduino 電子工作
ISBN:978-4-7775-1941-5
工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。