こういった「実際に何かを繋ぎたい」というケースでは、圧倒的にMCUを使うと楽である。何がどう楽か? という事をまずハードウェアから見ると、

  • 簡単: もともとMCUは様々な回路を取り付けることを前提に、電気的に柔軟な構成を取れるようになっている。LEDの駆動程度だと、電流調整用の抵抗を1本取り付けるだけで実現可能。
  • 様々な用途のI/Fが搭載されている: 単にデジタル信号の入出力のみならず、アナログ信号の入出力(A/DコンバータやPWM)も可能であるのが普通である。
  • 多数のピンが利用できる: MCUには様々なパッケージ(小さいものは10pin未満、大きいものは数百pin)があるが、いずれの場合も殆どのピンは入出力に利用できる。なので、例えばデジタル入出力を100本欲しい、なんて場合もそれなりのパッケージのMCUを探してくれば良い。

といったメリットがある。一方ソフトウェアから見ると、

  • OSとかは無いので、立ち上がると即目的のプログラムが開始される。なので、面倒な自動起動とかの設定は要らない。
  • I/Oポートやメモリなどは直接参照、アクセスできる。だから、「あるI/Oポートからデータを読み出す」といった作業も、命令1行で済む事になり、OSがある時の様にドライバを作るだのそれを呼び出すAPIを整備するだのといった作業は不要。
  • 汎用OS上で動かしている時に比べ、一桁以上細かい時間の処理が出来る。CPUの性能そのもので比較すると、最近のx86プロセッサはMCUの数千倍の処理性能を持っており、実際にMCUと同じような環境で使えば、既存のMCUとは桁違いの処理性能になるだろうと思われる。ところが実際はOSが動き、その上で様々なドライバやサービスが動き、更に多数のプログラムが同時に動いている。この結果、例えばWindowsのプログラムで「確実に1ms以内に反応して処理する」プログラムを作るのは結構大変(「大体」1ms以内、というのは簡単だが「確実に」という文言が入った瞬間難易度が極端に跳ね上がる)なのに対し、MCUだと0.1ms以内に「確実に」反応して処理するプログラムも(MCUにもよるが)それほど難しくない。

といったメリットが挙げられる。また副次的な要因として、

  • 安価: チップ単体で買うと1000円しないものも多く、それでいて結構機能は揃っている。「でもハンダ付けはちょっと...」という人は、様々な開発キットとかワンボードのものもある。こちらの値段はピンきりだが、安いものはやっぱり1000円しない。
  • 部品数が少ない: これもMCUによって様々であるが、基本的にはMCUの中にCPU・Flash Memory・SRAM・EEPROM・周辺回路などが全て入っている。気が利いた製品だと電圧レギュレータとかクロックまで入っていたりするので、こうなると本当に電源だけ繋げば動作することになる。当然基板のサイズはかなり小さく収まる事になる。
  • 消費電力が少ない: もはや単一電源動作は当たり前で、USBのバスパワーだけで動作するものもかなり多い(というか、省電力向けのものの中にはコイン電池1~2個で10年近い運用を想定しているものすらある。流石にこれは間欠動作が前提なので、フルに使うともっと消費電力は多いが)。このためUSB接続だと別に電源を供給しなくても済んでしまう。
  • プログラムが簡単: 以前はメモリ容量の制限とかそもそも開発環境が間に合ってないなんてケースもあって、アセンブラでゴリゴリ書くというのが半ば当たり前であったが、最近はCないしC++が使えない製品を見つけるのが難しいほどに、このあたりは充実してきた。あるいは独自の簡易言語を搭載するものも若干ながらある。
  • ライブラリも揃っている: 以前は、例えばRS-232Cでの通信を行う場合にはシリアルポートの管理を行うUARTのコントローラのレジスタをプログラムから細かくアクセスするなんてところまで記述しなければいけなかったが、最近はこのあたりはメーカーから提供されるライブラリを使って簡単にプログラミングできるようになった。
  • メモリ制限が緩和された: これも勿論製品によって変わってくるが、以前はFlash MemoryにしてもSRAMにしてもかなりギリギリという事が多く、これがC/C++といった言語の使用を妨げていた(アセンブラでフルにゴリゴリ書かないとメモリに入りきらない、なんてことがザラで、Cコンパイラで最大限に最適化を掛けてもまだメモリに収まらないなんて事も多かった)が、最近は半導体全般の価格低下により、以前よりも潤沢にFlash MemoryやSRAMが搭載されるようになり、このあたりもプログラムの容易化の一助となった。

といったあたりだろうか。もっともメリットがあればデメリットも当然あるわけで、次回はデメリットのお話など。

ところで今回も最後にお知らせです。11月20、21日に東京工業大学 大岡山キャンパスで開催されるMake:Tokyo Meeting 06に筆者も「大原雄介」名義で個人出展させていただくことになっております。展示物は、筆者が某雑誌で連載していたArduino工作+αです。

前回予告した「このSecond Opinionでこれから御紹介しようと思っている工作のプロトタイプ」ですが、残念ながら間に合いませんでしたm(_ _)m。あと、某Webメディアで12月にやるつもりだった某工作も、全く間に合いませんでしたm(_ _)m。ということで、大原の顔を眺めてみたいという酔狂な方がいらっしゃいましたら、たいしたものはございませんが、おいでくださいませ(原則、ブースに常駐いたします)。

(続く)