テキスト ボックス:  MPR121 

 

 

 

I2Cセンサーの種類

静電容量式8cHタッチセンサー

主な機能

人間が触れる事での静電容量容量変化を検出するタッチセンサー

8個のタッチパッドを装着できます。

I2Cデバイス名

MPR121

写真

 

GROVE - I2C タッチセンサ

開発したデバイスの入手先 

製品名 品番・型番

スイッチサイエンス

GROVE – I2C タッチセンサ(SEEED-101020047

デバイスのData-Sheet

http://www.nxp.com/assets/documents/data/en/data-sheets/MPR121.pdf

http://cache.freescale.com/files/sensors/doc/app_note/AN3892.pdf

http://cache.freescale.com/files/sensors/doc/app_note/AN3893.pdf

http://cache.freescale.com/files/sensors/doc/app_note/AN3894.pdf

デバイスの主な仕様

 

電源電圧

I2Cアドレス

 

I2C通信速度

チャンネス数

2.0~3.6V (5Vでは使えません)

05A0X5B0X5C0X5DADDRPin4で選択可能)

GROVE – I2C タッチセンサ使用時はアドレスの設定範囲要確認

400Kbps

8CH

説明

8chの静電式のタッチセンサーです。

MPR121のデバイスには、タッチセンサーの機能以外に、タッチされた箇所のLED

を点灯・点滅させる為のGPIO機能が有り、12mAまでソース電流が流せるので、LED

ドライバー等を使用せず、直接ドライブ可能です。

しかし、GPIOの部分については、今回はテストを実施していません。

 

一定電流を流しチャージ時間で10p~2000Pfまで分解能0.01pFで計測可能です。

タッチセンサーの感度調整には、Autoconfigurationモードがあり、容易に設定が可能

と成っています。

内部レジスタ数は、130余りあります。それを個別に160個のプロパティとして

I2Cインターフェースドライバーは準備しています。

 

内部レジスタは、12Bit構成のもの8Bit構成のもの、6Bit構成の物があり、I2Cセンサードライバーレジスタ構成に対応し、各Bit構成毎にドライバー内部で処理し、プロパティへのセットを行います。

 

通常は、register
address
指定は、読み書きを行うレジスタを指定後に処理を行いますが、I2Cセンサー・ドライバーを使用する場合はドライバーが内部でポインター指定処理を実施する為、レジスタ指定は不要でプロパティへ値の代入、読み出しのみで可能です。

 

 

 

 

 

開発・テスト風景

IMG_2420

レジスタの数の割りに画面はシンプルです。

 

I2Cデバイス内部のレジスタ構成(レジスタに対する設定値、レジスタの内容等のご質問はお答えできません)

数が多すぎますので、Data-Sheetのレジスタマップを貼り付けます。詳しくはData-Sheetをご覧ください。

 

 

I2Cセンサー・ドライバーで準備済みのプロパティ・メソッド

      プロパティ

機能名

機能説明

E0TS

ELE0のタッチまたはリリース状態を取得します。

E1TS

ELE1のタッチまたはリリース状態を取得します。

E2TS

ELE2のタッチまたはリリース状態を取得します。

E3TS

ELE3のタッチまたはリリース状態を取得します。

E4TS

ELE4のタッチまたはリリース状態を取得します。

E5TS

ELE5のタッチまたはリリース状態を取得します。

E6TS

ELE6のタッチまたはリリース状態を取得します。

E7TS

ELE7のタッチまたはリリース状態を取得します。

E8TS

ELE8のタッチまたはリリース状態を取得します。

E9TS

ELE9のタッチまたはリリース状態を取得します。

E10TS

ELE10のタッチまたはリリース状態を取得します。

E11TS

ELE11のタッチまたはリリース状態を取得します。

 

機能名

機能説明

E12TS

ELEPROXのタッチまたはリリース状態を取得します。

OVCF

Over
Current Flag
を取得します。

E0OOR

ELE0Out Of Range 状態を取得します。

E1OOR

ELE1Out Of Range 状態を取得します。

E2OOR

ELE2Out Of Range 状態を取得します。

E3OOR

ELE3Out Of Range 状態を取得します。

E4OOR

ELE4Out Of Range 状態を取得します。

E5OOR

ELE5Out Of Range 状態を取得します。

E6OOR

ELE6Out Of Range 状態を取得します。

E7OOR

ELE7Out Of Range 状態を取得します。

E8OOR

ELE8Out Of Range 状態を取得します。

E9OOR

ELE9Out Of Range 状態を取得します。

E10OOR

ELE10Out Of Range 状態を取得します。

E11OOR

ELE11Out Of Range 状態を取得します。

E12OOR

ELEPROXOut Of Range 状態を取得します。

ACFF

AUTO-CONFIG
Fail Flag
を取得します。

ARFF

AUTO-RECONFIG
Fail Flag
を取得します。

 

機能名

機能説明

E0FD

ELE0Electrode Filtered Dataを取得します。

E1FD

ELE1Electrode Filtered Dataを取得します。

E2FD

ELE2Electrode Filtered Dataを取得します。

E3FD

ELE3Electrode Filtered Dataを取得します。

E4FD

ELE4Electrode Filtered Dataを取得します。

E5FD

ELE5Electrode Filtered Dataを取得します。

E6FD

ELE6Electrode Filtered Dataを取得します。

E7FD

ELE7Electrode Filtered Dataを取得します。

E8FD

ELE8Electrode Filtered Dataを取得します。

E9FD

ELE9Electrode Filtered Dataを取得します。

E10FD

ELE10Electrode Filtered Dataを取得します。

E11FD

ELE11Electrode Filtered Dataを取得します。

E12FD

ELEPROXElectrode Filtered Dataを取得します。

E0BV

ELE0Baseline Valueを取得します。

E1BV

ELE1Baseline Valueを取得します。

E2BV

ELE2Baseline Valueを取得します。

E3BV

ELE3Baseline Valueを取得します。

 

機能名

機能説明

E4BV

ELE4Baseline Valueを取得します。

E5BV

ELE5Baseline Valueを取得します。

E6BV

ELE6Baseline Valueを取得します。

E7BV

ELE7Baseline Valueを取得します。

E8BV

ELE8Baseline Valueを取得します。

E9BV

ELE9Baseline Valueを取得します。

E10BV

ELE10Baseline Valueを取得します。

E11BV

ELE11Baseline Valueを取得します。

E12BV

ELEPROXBaseline Valueを取得します。

MHDR

Maximum
Half Delta Rising
を取得または設定します。

NHDR

Noise
Half Delta Rising
を取得または設定します。

NCLR

Noise
Count Limit Rising
を取得または設定します。

FDLR

Filter
Delay Count Limit Rising
を取得または設定します。

MHDF

Maximum
Half Delta Falling
を取得または設定します。

NHDF

Noise
Half Delta Falling
を取得または設定します。

NCLF

Noise
Count Limit Falling
を取得または設定します。

FDLF

Filter
Delay Count Limit Falling
を取得または設定します。

NHDT

Maximum
Half Delta Touched
を取得または設定します。

 

機能名

機能説明

NCLT

Noise Count Limit Touchedを取得または設定します。

FDLT

Filter Delay Count Limit Touchedを取得または設定します。

MHDPROXR

ELEPROXMaximum Half
Delta Rising
を取得または設定します。

NHDPROXR

ELEPROXNoise Half Delta
Rising
を取得または設定します。

NCLPROXR

ELEPROXNoise Count
Limit Rising
を取得または設定します。

FDLPROXR

ELEPROXFilter Delay
Count Limit Rising
を取得または設定します。

MHDPROXF

ELEPROXMaximum Half
Delta Falling
を取得または設定します。

NHDPROXF

ELEPROXNoise Half Delta
Falling
を取得または設定します。

NCLPROXF

ELEPROXNoise Count
Limit Falling
を取得または設定します。

FDLPROXF

ELEPROXFilter Delay
Count Limit Falling
を取得または設定します。

NHDPROXT

ELEPROXNoise Half Delta
Touched
を取得または設定します。

NCLPROXT

ELEPROXNoise Count
Limit Touched
を取得または設定します。

FDLPROXT

ELEPROXFilter Delay
Count Limit Touched
を取得または設定します。

E0TTH

ELE0のタッチ閾値を取得または設定します。

E0RTH

ELE0のリリース閾値を取得または設定します。

E1TTH

ELE1のタッチ閾値を取得または設定します。

E1RTH

ELE1のリリース閾値を取得または設定します。

E2TTH

ELE2のタッチ閾値を取得または設定します。

 

機能名

機能説明

E2RTH

ELE2のリリース閾値を取得または設定します。

E3TTH

ELE3のタッチ閾値を取得または設定します。

E3RTH

ELE3のリリース閾値を取得または設定します。

E4TTH

ELE4のタッチ閾値を取得または設定します。

E4RTH

ELE4のリリース閾値を取得または設定します。

E5TTH

ELE5のタッチ閾値を取得または設定します。

E5RTH

ELE5のリリース閾値を取得または設定します。

E6TTH

ELE6のタッチ閾値を取得または設定します。

E6RTH

ELE6のリリース閾値を取得または設定します。

E7TTH

ELE7のタッチ閾値を取得または設定します。

E7RTH

ELE7のリリース閾値を取得または設定します。

E8TTH

ELE8のタッチ閾値を取得または設定します。

E8RTH

ELE8のリリース閾値を取得または設定します。

E9TTH

ELE9のタッチ閾値を取得または設定します。

E9RTH

ELE9のリリース閾値を取得または設定します。

E10TTH

ELE10のタッチ閾値を取得または設定します。

E10RTH

ELE10のリリース閾値を取得または設定します。

E11TTH

ELE11のタッチ閾値を取得または設定します。

 

機能名

機能説明

E11RTH

ELE11のリリース閾値を取得または設定します。

E12TTH

ELEPROXのタッチ閾値を取得または設定します。

E12RTH

ELEPROXのリリース閾値を取得または設定します。

DR

リリース用のデバウンス数を取得または設定します。

DT

タッチ用のデバウンス数を取得または設定します。

FFI

First Filter Iterationsを取得または設定します。

CDC

Charge Discharge Currentを取得または設定します。

CDT

Charge Discharge Timeを取得または設定します。

SFI

Second Filter Iterationsを取得または設定します。

ESI

Electrode Sample Intervalを取得または設定します。

CL

Calibration Lock bitを取得または設定します。

ELEPROX

ELEPROXピンの組み合わせを取得または設定します。

ELE

各ピンの電極タッチ検出の有効/無効を取得または設定します。

CDC0

ELE0Electrode
Current
を取得または設定します。

CDC1

ELE1Electrode
Current
を取得または設定します。

CDC2

ELE2Electrode
Current
を取得または設定します。

CDC3

ELE3Electrode
Current
を取得または設定します。

CDC4

ELE4Electrode
Current
を取得または設定します。

 

機能名

機能説明

CDC5

ELE5Electrode
Current
を取得または設定します。

CDC6

ELE6Electrode
Current
を取得または設定します。

CDC7

ELE7Electrode
Current
を取得または設定します。

CDC8

ELE8Electrode
Current
を取得または設定します。

CDC9

ELE9Electrode
Current
を取得または設定します。

CDC10

ELE10Electrode
Current
を取得または設定します。

CDC11

ELE11Electrode
Current
を取得または設定します。

CDC12

ELEPROXElectrode
Current
を取得または設定します。

CDT0

ELE0Charge Timeを取得または設定します。

CDT1

ELE1Charge Timeを取得または設定します。

CDT2

ELE2Charge Timeを取得または設定します。

CDT3

ELE3Charge Timeを取得または設定します。

CDT4

ELE4Charge Timeを取得または設定します。

CDT5

ELE5Charge Timeを取得または設定します。

CDT6

ELE6Charge Timeを取得または設定します。

CDT7

ELE7Charge Timeを取得または設定します。

CDT8

ELE8Charge Timeを取得または設定します。

CDT9

ELE9Charge Timeを取得または設定します。

 

機能名

機能説明

CDT10

ELE10Charge Timeを取得または設定します。

CDT11

ELE11Charge Timeを取得または設定します。

CDT12

ELEPROXCharge Timeを取得または設定します。

CTL0

GPIO Control Register 0 を取得または設定します。

CTL1

GPIO Control Register 1 を取得または設定します。

DAT

GPIO Data Registerを取得または設定します。

DIR

GPIO Direction Control Registerを取得または設定します。

EN

GPIO Enable Registerを取得または設定します。

SET

GPIO Data Set Registerを取得または設定します。

CLR

GPIO Data Clear Registerを取得または設定します。

TOG

GPIO Data Toggle Registerを取得または設定します。

AFES

AFE Samples during binary searchを取得または設定します。

RETRY

MPR121 may retry AUTO-CONFIG or AUTO-RECONFIG after failedを取得または設定します。

BVA

Baseline Value Adjust Controlを取得または設定します。

ARE

AUTO-RECONFIGの有効/無効を取得または設定します。

ACE

AUTO-CONFIGの有効/無効を取得または設定します。

SCTS

Skip Charge Time Searchを取得または設定します。

OORIE

Out of Range Interrupt Enableを取得または設定します。

 

機能名

機能説明

ARFIE

AUTO-RECONFIG Fail Interrupt Enableを取得または設定します。

ACFIE

AUTO-CONFIG Fail Interrupt Enableを取得または設定します。

USL

AUTO-CONFIG USL Registerを取得または設定します。

LSL

Upper Side Limit.を取得または設定します。

TL

Lower Side Limit.を取得または設定します。

SRST

電源オン後の状態にリセットします。

 

 

メソッド

機能名

機能説明

Init

I2Cバスコントローラに指定された接続設定を使って非同期的に接続します。

Read

指定レジスタ読込

Write

指定レジスタ書込

 

定数

機能名

機能説明

定数値

REG_ADDR.Touch_Status

レジスタTouch_Status

0x00

REG_ADDR.Out_Of_Range_Status

レジスタOOR Status

0x02

REG_ADDR.Electrode_Data

レジスタElectrode
Filtered Data

0x04

REG_ADDR.Baseline_Value

レジスタBaseline Value

0x1E

REG_ADDR. Rising

レジスタMHD Rising

0x2B

REG_ADDR.Falling

レジスタMHD Falling

0x2F

REG_ADDR.Touched

レジスタNHD Touched

0x33

REG_ADDR.ELEPROX_Rising

レジスタELEPROX MHD
Rising

0x36

REG_ADDR.ELEPROX_Falling

レジスタELEPROX MHD
Falling

0x3A

REG_ADDR.ELEPROX_Touched

レジスタELEPROX NHD
Touched

0x3E

REG_ADDR.Threshold

レジスタELE0 Touch
Threshold

0x41

REG_ADDR.Debounce

レジスタDebounce Touch
& Release

0x5B

REG_ADDR.AF_Configuration_1

レジスタAFE
Configuration 1

0x5C

REG_ADDR.AF_Configuration_2

レジスタAFE
Configuration 2

0x5D

REG_ADDR.Electrode_Configuration

レジスタElectrode
Configuration(ECR)

0x5E

REG_ADDR.Electrode_Current

レジスタELE0 Electrode
Current

0x5F

REG_ADDR.Charge_Time

レジスタELE0, ELE1
Charge Time

0x6C

REG_ADDR.GPIO

レジスタGPIO Control
Register 0

0x73

REG_ADDR.AUTO_CONFIG

AUTO-CONFIG Control Register 0

0x7B

REG_ADDR.Soft_Reset

Soft Reset Register

0x80

 

 

I2Cセンサードライバーを使ったVBでのサンプルソース

 

Imports I2CLibrary

Public NotInheritable Class MPR121Page

 Inherits Page

 

 Private Const MPR121_Address As Byte = &H5A

 Private MPR121 As MPR121 = New MPR121()

 Private WithEvents RefreshTimer As DispatcherTimer = New DispatcherTimer()

 

 Private Const TOU_THRESH As Byte = &H6

 Private Const REL_THRESH As Byte = &HA

 

 Public Sub New()

  InitializeComponent()

  Call Init()

 End Sub

 

 Private Async Sub Init()

  Await MPR121.Init(MPR121_Address)

 

  ’ Rising書込

  MPR121.MHDR = &H1

  MPR121.NHDR = &H1

  MPR121.NCLR = &H0

  MPR121.FDLR = &H0

  MPR121.Write(MPR121.REG_ADDR.Rising)

 

  ’ Falling書込

   MPR121.MHDF = &H1

  MPR121.NHDF = &H1

  MPR121.NCLF = &HFF

  MPR121.FDLF = &H2

  MPR121.Write(MPR121.REG_ADDR.Falling)

 

  MPR121.E0TTH = TOU_THRESH

  MPR121.E0RTH = REL_THRESH

  MPR121.E1TTH = TOU_THRESH

  MPR121.E1RTH = REL_THRESH

  MPR121.E2TTH = TOU_THRESH

  MPR121.E2RTH = REL_THRESH

  MPR121.E3TTH = TOU_THRESH

  MPR121.E3RTH = REL_THRESH

  MPR121.E4TTH = TOU_THRESH

  MPR121.E4RTH = REL_THRESH

  MPR121.E5TTH = TOU_THRESH

  MPR121.E5RTH = REL_THRESH

  MPR121.E6TTH = TOU_THRESH

  MPR121.E6RTH = REL_THRESH

  MPR121.E7TTH = TOU_THRESH

  MPR121.E7RTH = REL_THRESH

  MPR121.E8TTH = TOU_THRESH

  MPR121.E8RTH = REL_THRESH

  MPR121.E9TTH = TOU_THRESH

  MPR121.E9RTH = REL_THRESH

  MPR121.E10TTH = TOU_THRESH

  MPR121.E10RTH = REL_THRESH

  MPR121.E11TTH = TOU_THRESH

  MPR121.E11RTH = REL_THRESH

  MPR121.E12TTH = TOU_THRESH

  MPR121.E12RTH = REL_THRESH

  MPR121.Write(MPR121.REG_ADDR.Threshold)

 

  MPR121.CDT = 0

  MPR121.SFI = 0

  MPR121.ESI = &H4

  MPR121.Write(MPR121.REG_ADDR.AF_Configuration_2)

 

  MPR121.CL = 0

  MPR121.ELEPROX = 0

  MPR121.ELE = &HC

  MPR121.Write(MPR121.REG_ADDR.Electrode_Configuration)

 

 End Sub

 

 Private Sub btnStart_Click(sender As Object, e As RoutedEventArgs)

  RefreshTimer.Interval = TimeSpan.FromMilliseconds(100)

  RefreshTimer.Start()

 End Sub

 Private Sub Measurement(sender As Object, e As Object) Handles RefreshTimer.Tick

  RefreshTimer.Stop()

 

  MPR121.Read(MPR121.REG_ADDR.Touch_Status)

  If (MPR121.Status = 1) Then

   If (MPR121.E0TS) Then

    Debug.WriteLine(“E0TS : detected”)

   End If

   If (MPR121.E1TS) Then

    Debug.WriteLine(“E1TS : detected”)

   End If

   If (MPR121.E2TS) Then

    Debug.WriteLine(“E2TS : detected”)

   End If

   If (MPR121.E3TS) Then

    Debug.WriteLine(“E3TS : detected”)

   End If

  End If

 

  RefreshTimer.Start()

 End Sub

 

 Private Sub btnStop_Click(sender As Object, e As RoutedEventArgs)

  RefreshTimer.Stop()

 End Sub

 

 

 Private Sub btnBack_Click(sender As Object, e As RoutedEventArgs)

  RefreshTimer.Stop()

  MPR121.close()

  App.rootFrame.Navigate(GetType(MenuPage))

 End Sub

 

End Class