SSブログ

MBR3 をホストから使ってみた (1) [PSoC]このエントリーを含むはてなブックマーク#

EZ-Click 設定アプリケーション

静電容量ボタンを使いたい時、部品点数を少なくしたいと思ったら、 PSoC に制御プログラムまで組み込んでワンチップで実現するのが便利です。 しかしながら、従来のアプリケーションに静電容量ボタンを追加したいだけという用途では、アプリケーション側のコントローラをホストとして外付けの静電容量ボタンコントローラを追加した方が簡単になります。 本シリーズでは、 MBR3 を外付け静電容量ボタンコントローラとして使う方法について考えます。

静電容量センサ

静電容量センサ

静電容量センサには、 MBR3 で、静電容量センサの実験 (1) で使用した2ボタン基板を使用します。 使用した設定は、以下の通りです。


CapSense Sensor Configuration

ふたつのセンサ端子をボタンとして割り当てます。 他のパラメータは、デフォルトのままです。


Global Configuration

このデバイスは、アドレス 0x63 の I2C のデバイスとして動作させます。 端子に余裕がないので、 LED 出力もシールドも追加できません。 ボタンの情報は、 I2C を介して受信するしかありません。

ホスト側のコントローラ

実験環境

ホスト側は、 I2C のマスター側インターフェイスが付いていれば、何でも使えますが、ここでは mbed LPC1768 を使用しました。 オンラインでアプリケーション開発が出来るので、便利です。

mbed LPC1768 の P9, P10 端子を I2C インターフェイスの SDA, SCL として使っています。 これらの端子には、 4.7kΩ のプルアップ抵抗をそれぞれ接続しています。 MBR3 とは VOUT, GND を加えた全部で4本の配線で接続されました。

ホスト側のソフトウェア

ホスト側には、以下のようなファームウェアを書き込みました。

#include "mbed.h"

// Two LEDs are assigned as button status indicators
DigitalOut led1(LED1);
DigitalOut led2(LED2);

// One I2C port is used to connect to MBR3.
// DIP9 and DIP10 are used for I2C but ports.
I2C i2c(p9, p10);

// MBR3 device register map
const char MBR_BUTTON_STAT = 0xaa; // BUTTON_STAT

// Node "Kitten"
// Device: MBR3102
// Function: Two button CapSense
const uint8_t kittenAddr = 0x63 << 1; // 8bit I2C address
const char kittenYellowButton = 0x01;
const char kittenBlueButton = 0x02;

int main(void) {
    uint8_t cmd[8];
    uint16_t kittenStat[2];
    
    for (;;) {
        // Get status from Kitten
        cmd[0] = MBR_BUTTON_STAT;  // 
        i2c.write(kittenAddr, (char *)cmd, 1);
        i2c.write(kittenAddr, (char *)cmd, 1);
        i2c.write(kittenAddr, (char *)cmd, 1, true);
        i2c.read( kittenAddr, (char *)kittenStat, 2);
                
        // Show button indicator LEDs
        led1 = (kittenStat[0] & kittenYellowButton)?(1):(0);
        led2 = (kittenStat[0] & kittenBlueButton)?(1):(0);
        
        wait(0.05);
    }
}

アドレス MBR_BUTTON_STAT(0xAA) の2バイトレジスタから値を読み出して、ふたつのボタンの状態を検出しています。 ボタンの状態によって、 LED1, LED2 を点灯させます。

レジスタを読み出すとき、 "read" メソッドの前にレジスタのアドレスを示す "write" メソッドが三つも並んでいます。 本来、これらの "write" メソッドは、アドレスを指定するだけなら一回だけで十分なはずです。 それが三回も必要な理由は、スタンバイ状態に入ってしまった MBR3 を起こすためです。

MBR3 は、低消費電力アプリケーションでも使用する事を考慮して、ホストからの通信が無くなると、極力スタンバイ状態に入ろうとします。 スタンバイ状態から起こすためには、 I2C の通信を使用しますが、通信内容そのものは破棄されます。 このような事情から、スタンバイ状態から確実に MBR3 が起きるように、二回の通信を行います。 そして、三回目の通信で、レジスタのアドレスが確実に伝達されます。

関連商品

mbed NXP LPC1768

mbed NXP LPC1768

  • 出版社/メーカー: スイッチサイエンス
  • メディア: おもちゃ&ホビー

nice!(0)  コメント(0)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。