AVR tinyマイコンのススメ

AVRマイコン マイコン/Arduino

2024年現在、電子工作向けマイコンとしてはArduinoがほぼ覇権をとっているといっても良い状態ですね。

ただ、純正Arduinoは高価です。さらに、入出力ピンがほぼすべて使いやすい形で実装されている代償としてモノ自体が大きいという問題もあります。お手軽な卓上での実験などには大変使いやすいのですが、実運用では用途が限られてしまうという面もあります。

そこで、今回は限られた用途で力を発揮するAVR Tinyシリーズのマイコンについて紹介します。

ArduinoとAVRマイコン

混同しやすい部分ですが、Arduinoというのはマイコンチップの名前ではありません。Atmel社(現在はMicrochip社に吸収)から発売されている、AVR ATmegaというマイコンチップを動作させる総合開発環境、開発プラットフォームのことです。
現在はArduinoの爆発的な普及によってATmegaマイコン以外でもArduinoと互換性をとり、ArduinoIDEで開発ができるようになっています。この辺りの事情やコトバが少しややこしいです。

Arduino登場前はマイコンといえばPICで、後発のAVRはマイナーでした。
PICがよいかAVRが良いかという論争がありましたが、Arduinoの登場によってPICが一気に駆逐されてAVRが工作界隈を席捲した感があります。ただ、Arduinoが前面に出すぎたせいでAVRマイコンという名前は表舞台にほとんど出ていない気がします。
ArduinoではないAVRマイコン関係の本は数えるほどしかありません。

AVR ATtinyシリーズ

AVRマイコンのラインナップは先に紹介したArduinoでも使われるATmegaシリーズと今回紹介するATtinyシリーズの2つです。ざっくりいえば、ATmegaシリーズはリッチな機能とGPIOを備えた高機能モデル、ATtinyは最低限の機能に絞り込んだ小型モデルです。

AVRマイコン

tinyシリーズの中にも数多くの製品がありますが、日本国内で手に入れやすい(≒秋月電子で買える)のは以下の4モデルです(*2)。

  • tiny13a
  • tiny85
  • tiny44a
  • tiny2313

細かな違いはありますが、主な違いをまとめてみました。比較としてArduinoで使われるATmega328も併記してあります。

tiny13atiny85tiny44atiny2313mega328p
ピン数*188142028
プログラムメモリ1kB8kB4kB2kB32kB
PWM出力224410
ADC4(10bit)4(10bit)8(10bit)無し(A比較機のみ有)8(10bit)
タイマ8bit×18bit×28bit×1,16bit×18bit×1,16bit×18bit×2,16bit×3

一般的なArduino環境で使われるmegaシリーズとの差が歴然ですよね。ただ、工作で使いやすいDIPパッケージ品ではピンの数が基板全体のサイズに大きく影響しますし、mega328の機能をフルで使わなければならない場面もさほど多くありません。


*1 制御可能なGPIO数ではなく代表的なDIPパッケージの”足”の本数

*2 このほか44aと容量違いの84aや20ピンタイプの861aなども販売されています。

tinyシリーズの注意点

プログラムメモリ容量

まず注意したいのはプログラムメモリの容量です。tinyシリーズは一桁kBしかありません。少しでも凝ったプログラムを書こうものならあっという間にプログラムメモリが足りなくなります。

後々紹介するつもりですが、tiny13aでArduinoIDE(bitDuino13)を使用してLチカプログラムを作ると、それだけでプログラムメモリ容量の1/4ほどを消費します。

足の数問題

マイコンを動作させるためには電源(+/GND)の2つは絶対に必要ですから、8ピンのtiny13aやtiny85では使用できるGPIOの数は最大でも6つです。さらに、リセットピンの使用は事故の元ですので開けておくのが無難です。すると残りは5つ。

GPIOが5つだけでは7segLEDの駆動も難しいですし、本当にLチカレベル+α程度のことしかできません。(LチカレベルとはいえFETをつなげば大電流のスイッチングを自動で行えますし、5つで足りるかは用途次第)

タイマ/PWM問題

同じくtiny13や85では8bitタイマーしか使用できません。プログラムの工夫で多少は何とかなる問題ではありますが、16bitタイマーが3つもあるATmegaや実質無限タイマ&PWMのESPシリーズとは使い勝手が違います。

書き込み機問題

Arduinoのブートローダーは、UART通信で自分自身にプログラムを書き込むためのプログラムです。UARTというのはいわゆる”シリアル通信”ですね。マイコンにブートローダーが書き込まれている場合、マイコン起動時にまずブートローダーが読み込まれます。そこでプログラムメモリへの書き込みの指示があるかどうかを判断、なければ書き込まれた本来のプログラムを走らせるという仕組みになっています。

本来、AVRマイコンはmegaシリーズを含めて汎用のシリアル通信でプログラムを書き込む機能は有しておらず専用の書き込み機が必要です(*3)。この専用の書き込み機が曲者で、結構高価なんですよね。
そこで登場したのがArduinoです。ArduinoはAVRマイコンと汎用的で安価なUSB-シリアル変換器を1ボード上に実装し、AVRマイコンにはブートローダーを書き込むことで上記のような動作を実現しているわけです。

tinyシリーズを使用する場合、書き込み機は必須だと思ってください。理由は以下の3点です。

  • プログラム容量的にブートローダーを入れる余地が少ない(ない)
  • USB-シリアル変換チップをボードに搭載するとせっかくの小ささがスポイルされる
  • USB-シリアル変換チップを外部に設けるなら書き込み機を外部に設けるのと大差ない

幸いなことに(*4)、最近は適当なArduinoボードがあれば書き込み機は簡単に作れます。この点については次の記事で書く予定です。


*3 最近のAVRマイコンではUSB機能を持ったモデルもあり、シリアル変換器が不要なものもあります。

*4 Arduino登場前はPICにしろAVRにしろ、高価な書き込み機を買うor自作するの2択でした。自作というのが問題でマイコンの書き込み機を作るためにはすでに書き込み機能が書き込まれたマイコンが必要という鶏卵前後論争のような状態になっていました。現在ではブートローダー書き込み済みのAVRmegaマイコンが販売されていますが、当時はこのようなものが大々的に売られていることはありませんでした。書き込み機を持っている友人に頼みましょうとかいうチョモランマ級のハードルを越えるか、ネットの小さなコミュニティで販売している人がいるのを探すなどといった方法が必要でした。

写真で見るtinyマイコン

tiny13a

ピンの数は8、プログラム容量は1kBで機能的にもほぼ最底辺クラスのモデル。ただ、ADコンバーターもPWMもあるので、用途によってはこれで十分かつ有用。2024年現在、秋月電子で1個160円。

attiny13a

表面実装タイプならAmazonでも購入できますね。

tiny85

tiny13aと同じく8ピン。tiny13aとの違いはプログラム容量が8kBに増量されている点と8bitタイマーが1つから2つに増やされている点。プログラム容量の違いは天と地ほどの違いがあるので、少々高価だがtiny13aより使いやすい。秋月電子でDIPタイプが1個240円、表面実装タイプが200円。ちなみにtiny25/45/85はそれぞれプログラムメモリ容量(2kB/4kB/8kB)が違うもの。

attiny85

tiny44a

14ピンタイプ。使えるGPIOに不便しにくく、かつ16bitタイマーが使えるのが利点。秋月電子で1個210円。こちらも容量違いの24a/44a/84aがある(2kB/4kB/8kB)。tiny84aも秋月電子で販売されているが1個400円もするので慎重に選びたい。

attiny44a

tiny2313

20ピンタイプのtinyシリーズ。GPIOが44aよりも多く、16bitタイマーも使えるので死角なしかと思いきや秋月電子で1個300円もする上にADコンバーターがなく、プログラム容量が2kBしかないので使いどころが難しい。20ピンというのも半端に多くて小型化の邪魔にもなる。これを選ぶなら290円でADコンバーター内蔵のtiny861aか400円でmega328を買った方がいい気がする。が、初めて使ったマイコンがtiny2313なので個人的な思い入れは一番大きい。

tinyシリーズより古いat90s2313のコンパチ品として残しているのかもしれない。私がマイコンをいじり始めた当時からat90sが廃盤か新規設計非推奨だった気がするが、いまだにそちらの在庫もあるので意味くじピーマン。

tiny2313

昔は秋月で1個100円だったんですけどね。

おまけ

個人的な話ですが、AVR ATtinyシリーズでマイコン入門をしました。arduinoが広がり始めてからはそちらばかり使う用になっていましたが、最近また使いたくなって環境を整えた復帰組です。
環境を整えたり使い方を思い出したりするうえで躓いたことがたくさんあります。自分のためのメモ書きも兼ねて、tinyマイコンを使う上で必要な内容などを簡単にまとめていこうと思います。

コメント