昨日横浜であったCypressの無料PSoCセミナーに初めて行ってきました。PSoCはじめて触ってきた。
他にセミナーというものに行ったことがない(就活したこともないし)ので比較しようがないけど、かなり良いかんじだった。Tシャツと開発ボードキットと4000円相当のライターもらったし、昼の軽食のサンドイッチも美味かったし。
PSoCが使われている製品の展示にiPod nanoやゲームボーイミクロや、VAIOのFelicaリーダ付き無線キーボードがあった。静電容量タッチセンサをCapSenseという名前でパッケージングして簡単に扱える様にしてるらしくて結構採用されているみたい。
今回の写真:PSoC Express Seminar – a photoset on Flickr
■PSoCとは?
PSoCは”Programmable System on Chip”の略で、1チップの中に回路と普通のマイコンが入っている感じです。
どういう事かというと、
普通のPICやAVR等のマイコンは、各ピンにそれぞれ専用の機能や特徴があり、それを回路に結びつけ、その後ソフトウェアを書いて各ピンやレジスタの動作を定義するという手順でシステムを作っていました。これは変更が難しくて、最初からかなりきっちり設計する必要がありました。
しかしPSoCでは、
1.チップ内にアンプや論理回路を組める
2.それを汎用のピンに自由に結線する
3.それの動作を定義するプログラムを書く
4. 1~3を1つにまとめた「API」を作って、再利用できる
という風に変わります。もしかしたら電子工作が「回路図とプログラム」という分断された形ではなくて、「スクリプト言語のモジュール」の様に流通する様になるかもしれない。
そうなると、人の書いたプログラムを参考にして自分のプロジェクトに書き写すのではなく、
「今日は~~さんのタッチパネル制御ドライバと~~さんの加速度センサジェスチャードライバを使って3行で書けました、ホラ簡単でしょ?」という風になる可能性がある。
(PSoCのCPAN作って欲しい)
■PSoC Expressセミナ
んで今回は、PSoC Expressという開発環境のセミナーだったわけですが…
最終的にこんなややこしいシステムも、20分ぐらいで作れてしまうというかなりヤバげな開発環境でした。可変抵抗に繋いだADCの値を2台のマイコンでI2Cで共有して、片方はLCD、片方は7セグ4桁ダイナミック点灯。
プログラミングはMax/MSP風にinとoutの部品を線でつないで、プロパティ設定して、if(){}then{}などを挟んだりしてシミュレータで動かす。
その後実際にinとoutの部品に対応させるピンを選ぶ
これがPSoC Expressでの開発で、ある程度PSoC Expressで作ってからPSoC Designer(普通のアセンブラやCで書くIDE)にプロジェクトを書き出す事もできる。
今回の開発ボード CY3121
4つのマイコンボードが1枚にくっついている
ちなみにPSoC Expressは無料で公開されています。
PSoCの開発環境はC言語コンパイラ16000円とライター4000円。アセンブラでやる分には今回もらったライターだけで十分らしい。
■PSoC採用製品
まずPSoCはどんなモノに使われているか?というと、UIまわりや無線が多いみたい。静電容量タッチセンサのCapSenseや、無線内蔵PSoCがあるからだと思う。
あと、RTOSや組み込みLinuxを載せるようなパワーは無いが、内部のプログラムとピン配置を別々に対応させられるのがでかいんだと思う。完全に全ピンが汎用ピンではないと思うが。
iPod nanoのクリックホイール、任天堂のゲームボーイミクロ
こないだ山手線車の内広告で見た、SONYのiPod?と繋がる音楽サーバのUI(CapSense)
LGの携帯電話と、携帯電話開発キット?(またCapSense)
VAIOの無線キーボード。FelicaとPS2をWireless(WirelessUSB?)で飛ばしているらしい
■PSoC Expressを動かしてみる
ライターと開発基盤もらって、インストールしてスタートですよ。
Input Driver(部品)から、通常時解放のタクトスイッチ選んで
チャタリング防止もプルアップもPSoC内の回路で勝手にやってくれます
2つドライバを置きました。タクトスイッチと、”LED with Decay”(PWMで徐々に消灯するLED)
動作を設定します
ボタンonの時LED on、ボタン離したらdecay開始
LEDの方の設定で、decay(PWMで徐々に消灯)にかかる時間を500msに設定
できたのでbuildしてマイコンに書き込みます。
マイコン選んで、動作設定して
LED(PWM)とタクトスイッチを接続するピンを選びます。どのピンに割り当ててもok
(普通のマイコンだと、これが一番最初なんだよな…)
これで書き込むと、USBライターから給電して動きます
LEDをDecayするには、LEDの明るさを制御するPWMと、そのしきい値を徐々に変えるTimerが1つずつ必要で、AVRでやるとこんな大変なわけですが
Evil Mad Scientist Laboratories – Quick and Dirty D to A on the AVR: A timer tutorial
PSoC Express使うと回路さえ出来てれば5分もかからない。
「LCD = Volts」 なんかこれだけで動いた…
こんな感じで、今回のセミナーではこの後、CapSenseとI2Cと7セグメントLEDのダイナミック点灯までをやりました。
基本的にパーツに合ったドライバさえ揃っていればPSoC Expressでやるのが楽そうだな。
でもMax/MSPと同じように、ロジックが複雑になると把握できなくなるので、ある程度まで組んだらPSoC Designerに書き出してC言語で書くのがいいのかな。そもそもパーツが無い時は自分で作るかなんとかしなければならないし。(とりあえずロータリーエンコーダは無い)
まあその辺のプラクティスは動かしながら勉強していきます。