色々な使い道が考えらえる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)。

Photo33:PCからは、このCOM16がPSoC 4に直結しているように見える事になる

今回は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)。

Photo34:コレは温度表示中のもの。例えばTera Termのログ機能を使えば、温度変化をファイルにロギングすることが出来る

ちなみに今回はPCからの送信は特に行なっていないが、やろうと思えばこちらも簡単に実現できる(GuideではPCとの送受信のサンプルが出ているので、こちらを参考にされたい)。