昨日横浜であった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という開発環境のセミナーだったわけですが…

DSC01571

最終的にこんなややこしいシステムも、20分ぐらいで作れてしまうというかなりヤバげな開発環境でした。可変抵抗に繋いだADCの値を2台のマイコンでI2Cで共有して、片方はLCD、片方は7セグ4桁ダイナミック点灯。

プログラミングはMax/MSP風にinとoutの部品を線でつないで、プロパティ設定して、if(){}then{}などを挟んだりしてシミュレータで動かす。

DSC01567DSC01562

その後実際にinとoutの部品に対応させるピンを選ぶ

これがPSoC Expressでの開発で、ある程度PSoC Expressで作ってからPSoC Designer(普通のアセンブラやCで書くIDE)にプロジェクトを書き出す事もできる。

今回の開発ボード CY3121

4つのマイコンボードが1枚にくっついている

DSC01563

ちなみにPSoC Expressは無料で公開されています。

PSoCの開発環境はC言語コンパイラ16000円とライター4000円。アセンブラでやる分には今回もらったライターだけで十分らしい。

PSoC Express

PSoC Designer



■PSoC採用製品

まずPSoCはどんなモノに使われているか?というと、UIまわりや無線が多いみたい。静電容量タッチセンサのCapSenseや、無線内蔵PSoCがあるからだと思う。

あと、RTOSや組み込みLinuxを載せるようなパワーは無いが、内部のプログラムとピン配置を別々に対応させられるのがでかいんだと思う。完全に全ピンが汎用ピンではないと思うが。

iPod nanoのクリックホイール、任天堂のゲームボーイミクロ

DSC01550DSC01547

Samsungのデジカメのボタン13個(CapSense)

DSC01557DSC01558

こないだ山手線車の内広告で見た、SONYのiPod?と繋がる音楽サーバのUI(CapSense)

DSC01556

LGの携帯電話と、携帯電話開発キット?(またCapSense)

DSC01551DSC01555

VAIOの無線キーボード。FelicaとPS2をWireless(WirelessUSB?)で飛ばしているらしい

DSC01549

■PSoC Expressを動かしてみる

ライターと開発基盤もらって、インストールしてスタートですよ。

DSC01559

Input Driver(部品)から、通常時解放のタクトスイッチ選んで

PSoC Input Driver

チャタリング防止もプルアップもPSoC内の回路で勝手にやってくれます

2つドライバを置きました。タクトスイッチと、”LED with Decay”(PWMで徐々に消灯するLED)

PSoC LED-PWM

動作を設定します

PSoC LED Function

ボタンonの時LED on、ボタン離したらdecay開始

LEDの方の設定で、decay(PWMで徐々に消灯)にかかる時間を500msに設定

LED With Decay

できたのでbuildしてマイコンに書き込みます。

マイコン選んで、動作設定して

PSoC Build

LED(PWM)とタクトスイッチを接続するピンを選びます。どのピンに割り当ててもok

PSoC Build

(普通のマイコンだと、これが一番最初なんだよな…)

これで書き込むと、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分もかからない。

次。可変抵抗を接続したADコンバータの値をLCDに表示する

PSoC LCD = Volts

「LCD = Volts」 なんかこれだけで動いた…

こんな感じで、今回のセミナーではこの後、CapSenseとI2Cと7セグメントLEDのダイナミック点灯までをやりました。

基本的にパーツに合ったドライバさえ揃っていればPSoC Expressでやるのが楽そうだな。

でもMax/MSPと同じように、ロジックが複雑になると把握できなくなるので、ある程度まで組んだらPSoC Designerに書き出してC言語で書くのがいいのかな。そもそもパーツが無い時は自分で作るかなんとかしなければならないし。(とりあえずロータリーエンコーダは無い)

まあその辺のプラクティスは動かしながら勉強していきます。