色々な使い道が考えらえる5つのセンサ端子
PSoC 4はCypressのCapSenseという容量式タッチセンサI/Fを搭載しており、最大5つのセンサ端子を使ってボタンやスライダー、タッチパッド、必要なら近接センサとしても利用できる。ただ今回はこのうち4つだけをボタンとして使う事にした。このタッチセンサは、基板上に電極が設けてあり、それがそのままP0(1)~P0(5)の端子にも繋がっているので、ここからジャンパを引っ張って金属端子に繋げると、その金属端子を触るだけで認識されることになり、物理的なボタンを接続するより楽にパッケージが構成できる。今回は基板上のタッチセンサをそのまま流用した。
プログラム的には、まず最初に
CapSense_Start(); // CapSense初期化
CapSense_InitializeAllBaselines(); // Baseline初期化
の2つを呼び出すだけだが、注意はこれに先立って
CyGlobalIntEnable;
を呼び出しておくこと。これはPSoC Creatorが自動生成した際にはコメントアウトされているが、CapSenseが動作に割り込みを使う関係で、これを有効にしておかないと初期化から失敗する。
状態の取り込みについては
// Baseline update
CapSense_UpdateEnabledBaselines();
// CapSenseのWidgetをEnable
CapSense_ScanEnabledWidgets();
// CapSenseのスキャン待ち
while(CapSense_IsBusy() != 0);
という形で各CapSenseのWidgetを確認できるようにした後で、
// Buttonチェック
if (CapSense_CheckIsWidgetActive(CapSense_SENSOR_BUTTON0__BTN))
といった形で押されているかどうかを判断することができる。今回はボタンが4つということでいちいち配列に入れたりはしないで個別にボタンのIDをベタで記述しているが、もう少し最適化したいのであれば、ボタン番号を配列に入れておいてループで廻したほうがいいかもしれない。
手軽にできるUART接続
これはGuideの"6. Advanced Section"の中の"6.1 Using PSoC 5LP as USB-UART Bridge"に説明がある方法である。PSoC4は普通にUARTの形で送受信をするが、このUARTをPSoC 5 LPのヘッダに繋ぎ、PSoC 5はそれをUSBを経由してPC側のKitProg USB-UARTにブリッジする(Photo33)。
今回はGuideから少しピン配置を変え、P4[0]をUART:TX、P4[1]をUART:RXに割り当てた関係で、Guide P61の写真(Figure 6-8)と少し配線が異なっている。
プログラムは簡単であり、まず最初に初期化コードとして
UART_Start(); // UART初期化
を呼んだ後は
UART_UartPutString(CharBuf);
UART_UartPutCRLF(0); // CR+LF
といった形で文字列の送出が可能だ。ちなみにLCDと同じく文字列しか扱えないし、また改行/行戻は標準では行なわれないので、改行したければUART_UartPutCRLF()を呼び出す必要がある。
PC側ではこれを適当なターミナルソフトで受けてやる必要がある。GuideではHyperTerminalとかPuTTYでの事例が出ているが、Tera Termを使ってもまったく問題はなかった(Photo34)。
ちなみに今回はPCからの送信は特に行なっていないが、やろうと思えばこちらも簡単に実現できる(GuideではPCとの送受信のサンプルが出ているので、こちらを参考にされたい)。