遅ればせながらPSoC
- 2009/02/20 15:06
- カテゴリー:make:
MicrochipのPICマイコンが成功を収めたことで,国内外の小型マイコンは新しい方向性を模索するようになりました。かつて,Z80や8086,68000あたりの汎用CPUはなんとかアマチュアにも使えるだけの環境を整えることができたのですが,組み込み用のマイクロコントローラについては,数は膨大なものがあるにもかかわらず,開発環境はおろか技術資料さえもアマチュアには手に入りにくい関係で,長く「知られざる存在」でした。
90年代前半まで,マイクロコントローラの開発環境はICEとコンパイラで100万円,技術資料は分厚いデータブックしかなくメーカーに頼んで購入するしかありませんでした。
アーキテクチャは特殊で文献は皆無,仮に苦労の末開発が出来てもそれを実機で動かすために,プログラムをマイコンのROMに書き込むライターが何十万円,さらにマスクROMに書き込むには数千個の注文が必要と,全くアマチュアの利用を想定していません。
そもそも,20年ほど前の電子部品というのは,プロもアマチュアも共通でした。2SC1815はアマチュアでは長く定番ですが,当時のプロの設計者でも定番でした。そんな中で,プロ用とアマチュア用で完全に分かれていた数少ない部品がマイクロコントローラだったといっていいでしょう。つまり,半導体メーカーにとっても売り上げが大きい主力商品であったマイクロコントローラは,秋葉原の部品屋さんでは買うことの出来なかった部品だったわけです。(たとえ手に入っても全く使い物にならないので買う人もいないのですが)
余談ですが,プロの設計者の部品が面実装品になり,アマチュアが使う部品との差が大きく広がった今日,アマチュアが使える定番部品は使用量が減り,どんどん生産中止になっています。在庫もかなりありますし,中国などではまだ大量に使われているので現地のメーカーが生産を続けていますから,プロのおこぼれをもらうアマチュアにとってそんなに慌てるような話ではないにせよ,アマチュアが真空管などのプロが絶対に使わない部品で工作を好んでするようになったこともあり,いつまで電子工作というホビーが生き残れるのか,不安になります。
前置きが長くなりましたが,そんなマイクロコントローラの世界を大きく変えたのが,PICです。PICそのものは意外にマイクロコントローラ黎明期から存在する古典的プロセッサを源流に持つものなのですが,当時の米国系マイクロコントローラでメジャーだった8048や6801,8051や68HC11に比べて,
・パッケージが小さく8ピンから20ピンくらい
・機能を絞り込み低価格
・低消費電力で電池で動く,その割に結構高速
・アセンブラなど開発ツールが無償
・技術資料やデータシートも無償
・ICEもライターも安い,ライターは自作も可能
・そして参考書や使用例が豊富にある
と,アマチュアにとっての障害が,ことごとく取り払われていることが画期的でした。アメリカでプロアマを問わず広く使われるようになり,日本でも90年代中頃に,アマチュアからブームとなりました。今ではプロも製品に組み込むことが普通になった,草の根からメジャーに上り詰めたマイコンです。
こうしたなか,アマチュアをバカに出来ないと思いを新たにしたかつてのマイクロコントローラ先進国,日本のメーカーも,PICと同じ方法でアマチュアへの売り込みを図っていますが,なかなか浸透しないのもまたマイクロコントローラの世界で,思うようにアマチュアに使ってもらえていないような感じです。(私に言わせれば,全然日本のメーカーは分かってないです)
しかし,アメリカではその後も実に面白いマイクロコントローラがいくつも生まれています。AVR,MSP430,dsPIC,そして今回のPSoCもそうです。どれも先に挙げた特徴を最低限のものとして備え,さらにそこから特徴のある個性を主張しています。
私はPIC以外ではAVR,MSP430を触ったことがある程度なのですが,以前から気になっていたのがPSoCです。果たしてPSoCがマイクロコントローラなのか,と問われれば,必ずしもそういう「狭い」言い方が正しいとは思いません。PSoCにとってマイクロコントローラは機能の1つである以上,PSoCの本質はさらに深いところにあります。
PSoCはアメリカのCypressが作るマイクロコントローラで,Programmable System on Chipの略とされています。簡単に言うと,PICに見られるマイクロコントローラの特徴に加えて,
・アナログ回路をチップ内に作ることが出来る
・デジタル回路もチップ内に作ることが出来る
・もちろん普通のマイコンも入っている
・それぞれ自由に繋いで使う事が出来る
・実に多くのライブラリが完備されていて,下位レベルをほとんど自分で書く必要がない
・開発ツールにGUIが多用されており,気が付いたら使えるようになっている
という点が際立っています。
アナログ回路をチップ内で作ることが出来る,というのはPSoCの最大の特徴で,オペアンプ,コンパレータ,PGA,ADコンバータ,スイッチトキャパシタを内蔵しており,ユーザーはそれらを組み合わせ,またパラメータを設定して純粋なアナログ回路をチップ内部に作ることが出来ます。
デジタル回路についても同様ですが,PLDとは違って論理回路を合成できるわけではありません。ただ,基本的な論理演算回路が複数入っており,これを組み合わせてタイマやカウンタ,CRC演算器,乱数発生器やUART,I2Cなどを作ることが出来るようになっています。マイコンのペリフェラルもこれで作られます。
マイコンは大した性能は持っていませんが,最大24MHzで動作,4MIPS程度の能力を持つ8bitのプロセッサです。ただ,PSoCはアナログデジタル混載のプログラマブルシステムLSIを標榜しているので,マイコンも「システムの1つ」に過ぎない扱いです。事実,そのアーキテクチャについて詳しく知る必要性はほとんどありません。
そしてこれが最大の特徴なのですが,ライブラリがあまりに豊富なのです。
Cypressでは,先程のアナログ,デジタルの回路のうち,よく使われるものを雛形として提供しています。これをユーザーモジュールと呼んでいるのですが,開発ツールであるPSoC Designerで使いたいユーザーモジュールをGUIで配置し,パラメータを設定すれば,後は基本的な回路ブロックを組み合わせて構築し,初期化のプログラム,そしてアプリケーションからアクセスするためのライブラリまで自動的に生成してくれるのです。
例えば,先程のスイッチトキャパシタを使ってバンドパスフィルタを作る場合,ユーザーモジュールとして既に用意されているバンドパスフィルタを使えば,フィルタの仕様だけで所望のバンドパスフィルタをPSoC内部に実装し,しかも初期化プログラムに加えてマイコンからパラメータをいじるためのAPIまで完備してくれるというわけです。
アナログでもここまでやるのですから,デジタルでは当たり前の話で,なんとSDカードのインターフェースのようなものまでユーザーモジュールになっています。
こいつはすごくて,ハードウェアはSPIを使ってSDカードに接続,ソフトウェアはそのSPIの初期化やドライブはもちろん,低レベルのアクセス関数はおろか,FATファイルシステムまで完備されており,ユーザーはファイルを開いて閉じてするだけです。いっときますが,これがワンチップのマイクロコントローラで出来るのです。汎用OSも搭載されていなければ,SDカードインターフェースをペリフェラルで持っているわけでもないのです。
さらに面白い例があります。秋月電子などで16桁x2行のLCDキャラクタ表示モジュールが売られており,内蔵されているHD44780互換のLCDコントローラはすでに業界標準になっていますが,これを前提にしたLCD表示も,ユーザーモジュールで出来てしまうのです。
従来,この手のLCDモジュールは,4bitもしくは8bitのデータバスとE信号やRS信号,R/W信号のコントロールバスをマイコンのGPIOにつなぎ,ソフトでそれぞれのポートをタイミング良くソフトで上げ下げして使っていました。慣れた人だと簡単なのですが,それでも自前で用意することは変わりません。
GPIOの初期化に始まり,LCDの初期化,データの送受信,1文字の表示,そして文字列の表示と,階層を1つずつ上げてソフトを自前で用意しないといけないのですが,PSoCではユーザーモジュールをぽんとGUIで置けば必要なGPIOがLCD用に確保され,それらを初期化して動かすAPIが用意されます。
例えば,LCDの左上から3文字目の所に「TEST」と表示するプログラムは,
LCD_1_Start(); // LCDの初期化
LCD_1_Position(0,3); // 書く場所を指定
LCD_1_PrCString("TEST"); // 書く
と,わずか3行です。本当にこれだけです。他の部分になにかおまじないを書かないといけないとか,一切ありません。mainの中にこの3行を書きさえすれば,LCDにTESTと表示されます。
こんな具合にまさにProgrammableなSystem on Chipをアマチュアが作る事の出来るPSoCですが,アナログ回路とデジタル回路,そしてマイコンの3つが同時並行で動くことを十二分に活用しマイコンに頼らないリアルタイムシステムを実現するのもよいでしょうし,ライブラリが充実して手軽に動かせるという利便性でPICの代わりに使うことだってよい使い道です。例えばUARTで受けたデータをSDカードに保存するというシステムを,PICで作るとかなり大変ですが,PSoCならあっという間です。
それにデジタルのブロックがUARTやI2C,SPIに化けてくれるので,そもそも製品の品種が非常に少なく整理されており,手元に2種類程度のPSoCを置いておけばどんな用途に使えてしまうフレキシビリティも,アマチュアにはうれしい話です。
アマチュアが手軽に使えるマイクロコントローラはPICによって開花し,内蔵メモリの増大や処理能力の向上,あるいは低消費電力という観点で進化してきましたが,結局それらはマイクロコントローラを越えたものではありません。
はっきりいって,多少のアーキテクチャの差はあっても,結局出来る事はどれも同じ,マイクロコントローラの差はメモリの大きさと内蔵ペリフェラルの種類と数,そして価格と消費電力だという話の裏返しであり,もう大した興味も沸かないという方は多いと思います。
それなら使い慣れたPICやAVRで十分となるのですが,PSoCの面白さは自由度の高さを高機能に振ることも,扱いの簡便さに振ることも可能であるということと,ユーザーは最終的にやりたいと思うことの実現に専念出来るということにあります。
これが,System on Chipたるゆえんなのだと思います。アナログの回路をマイコンからサクサク叩いたり,デジタルのユーザーモジュールと連携させたり,果てはダイナミックコンフィギュレーションを行ってみたりと,従来なら様々な回路を組み合わせ大規模にせざるを得なかった回路をワンチップで(しかも自前で)作る事が,低レベルの関数の整備やレジスタの初期化など面倒で非創造的な作業で手を汚すことなく出来てしまうことに,ただただ感服するばかりです。いやー,アメリカはすごいなあ。
欧米では,プロアマを問わず,プロトタイピングという「でっち上げ」をつくることがとても重要視されています。マイコンを応用したでっち上げは,電気回路の専門家とソフトウェアを書く人がいないとダメなのですが,これでは工業デザイナーや企画担当者が思いついたことをすぐに実現出来ません。
そこで,そんな非専門家でもマイコン応用機器が作れるような環境がメジャーになっています。よく知られているArduinoはAVRベースで,習熟の容易なプログラム言語が通るシステムプログラムが書き込み済みです。
PSoCは,チップ単体でこのプロトタイピングが可能なくらいに簡便化されています。同じ事をやるのに簡単な方がいいに決まっています。
頭で「ほーすごいなあ」と思って半年,実際に触ってみないといけないと考えて半日触ってみましたが,まさにこの面白さは新次元です。
さてさて,そんなPSoCですから,何を作るか,がとても重要です。
アナログのユーザーモジュールを使い倒さないとPSoCの真の姿は見えてきませんし,だけどPICよりも簡単に使える簡便性でPIC16F84の置き換えとしても捨てがたいです。
なにを作りましょうかねえ。