動き方 - 操作説明

最後に簡単な操作説明を。今回の場合、P1[1]を押すと、液晶に何も表示しなくなる。UARTへの結果送出も停止。LED1はP[1]を押している間のみ点灯。

P1[2]を押すと、液晶に現在の温度を表示。LED2は温度表示中ずっと点灯。 P1[3]を押すと、液晶に現在の電圧/電流/電力を表示。LED3は電圧/電流/電力表示中ずっと点灯。

P1[4]を押すと、現在液晶表示中の結果をUARTに送出する。LED4はUART送出中、ずっと点灯。

といった動きをする。この動きを管理するのが、Mode(1:温度表示、2:電圧/電流/電力表示、0:なにもしない)とUARTMode(0:UARTに送出しない、1:UARTに送出する)の2つの変数である。main()の中で初期設定が終わると、for(;;)の無限ループに入るが、まずMode値を見て現在の取得すべき値を判断してそれぞれの処理ロジックを呼び出し、ついでにUARTModeを見て同時に送り出すかどうかを判断、必要なら送出する。これが終わったらCapSenseを使ってユーザー操作を検出、最後にその操作にあわせてLEDの表示を制御して終わるという、きわめてシンプルな動きである。意外というか何というか、PSoC 4のCoretex-M0+コアは48MHz動作ということもあり、このループがかなり高速に動作するので、今はループ最後で

    CyDelay(50);

を入れて50msほどの待機をさせている。これ以上ディレイを増やすとちょっとタッチセンサの反応が悪い(これでも、ちょっと長めにタッチしないとうまく切り替わらない)が、処理そのものはもう少しディレイが多いほうが好ましい。なので、Timerモジュールを使って定期的に割り込みを発生させ、そのタイミングで処理を行なう一方、CapSenseの方はタッチを検出したら即割り込み処理ルーチンで処理を行なうといった形にプログラムを書き換えればより操作感は向上しそうだが、そこまでやるとプログラムの説明が難しくなり過ぎそうなので今回は見送った。あくまで今回は簡単にマルチファンクションデバイスを作るというサンプルなので、このあたりは参考にして適当にいじっていただければ幸いである。

ちなみにここまで盛り込んでも、Flash Memoryは18808バイト(57.4%)、SRAMは428バイト(10.4%)ほどの占有率で済むし、Release Buildにするともう少し減って、それぞれ11960バイト(36.5%)と428バイト(10.4%)ということで、まだまだゆとりがある。

また、今回は非常に原始的というか、PSoC 4のAnalog/Digital Blockをフル活用したというには程遠く、ほとんどの処理をCPUコアでやっている感じであるが、その代わりここまでをほぼ3日で構築できた(PSoC 4の触り始めからで言っても5日ほど)というのは非常に便利である(一番時間が掛かったのがLCDの配線だったのは、ここだけの秘密だ)。

ドキュメント類は英語だけだが、PSoC Creatorから即該当するデータシートをPDFで開けるし、サンプルコードも豊富だ。助かるのはPSoC Creatorが複数同時起動可能な事で、なので開発中のプロジェクトを片方で開きつつ、別のPSoC Creatorでサンプルプロジェクトを開いて確認したり、コードをCopy & Pasteで持ってこれるのは、開発期間短縮に確実に効果があったと思う。APIの一覧や具体的なコードが確認しやすいのも、プログラムを組むのに非常にメリットがあった。またPioneer Kitも、これがArduinoだとしたらArduino Megaでも絶対1枚では収まらないであろう接続を全部カバーし、まだゆとりがあるのはなかなか頼もしい。

ある程度MCUに慣れた人なら、PSoC 4をとりあえず使うにあたり、ほとんど悩むことはないだろう。PSoC 4をフルに使おうとすると、かなり奥深いものがある。とはいうもののオペアンプやADコンバータでの回路設計(バイアスの取り方、リファレンス電源、差動入力、チャンネル切り替えなどの構成)が得意でない方や、基板スペースに制限がありこれ以上のパスコンや保護系部品を入れられないような場合、PSoC 4は重宝するのでは? という感想を抱いた事を記して今回のレポートを終わりにしたい。