テキスト ボックス:  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.0V~3.6V (5Vでは使えません)

0X5A、0X5B、0X5C、0X5D(ADDRのPin4で選択可能)

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

400Kbps

8CH

説明

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

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

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

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

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

 

一定電流を流しチャージ時間で10pF~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

ELE0のOut Of Range 状態を取得します。

E1OOR

ELE1のOut Of Range 状態を取得します。

E2OOR

ELE2のOut Of Range 状態を取得します。

E3OOR

ELE3のOut Of Range 状態を取得します。

E4OOR

ELE4のOut Of Range 状態を取得します。

E5OOR

ELE5のOut Of Range 状態を取得します。

E6OOR

ELE6のOut Of Range 状態を取得します。

E7OOR

ELE7のOut Of Range 状態を取得します。

E8OOR

ELE8のOut Of Range 状態を取得します。

E9OOR

ELE9のOut Of Range 状態を取得します。

E10OOR

ELE10のOut Of Range 状態を取得します。

E11OOR

ELE11のOut Of Range 状態を取得します。

E12OOR

ELEPROXのOut Of Range 状態を取得します。

ACFF

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

ARFF

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

 

機能名

機能説明

E0FD

ELE0のElectrode Filtered Dataを取得します。

E1FD

ELE1のElectrode Filtered Dataを取得します。

E2FD

ELE2のElectrode Filtered Dataを取得します。

E3FD

ELE3のElectrode Filtered Dataを取得します。

E4FD

ELE4のElectrode Filtered Dataを取得します。

E5FD

ELE5のElectrode Filtered Dataを取得します。

E6FD

ELE6のElectrode Filtered Dataを取得します。

E7FD

ELE7のElectrode Filtered Dataを取得します。

E8FD

ELE8のElectrode Filtered Dataを取得します。

E9FD

ELE9のElectrode Filtered Dataを取得します。

E10FD

ELE10のElectrode Filtered Dataを取得します。

E11FD

ELE11のElectrode Filtered Dataを取得します。

E12FD

ELEPROXのElectrode Filtered Dataを取得します。

E0BV

ELE0のBaseline Valueを取得します。

E1BV

ELE1のBaseline Valueを取得します。

E2BV

ELE2のBaseline Valueを取得します。

E3BV

ELE3のBaseline Valueを取得します。

 

機能名

機能説明

E4BV

ELE4のBaseline Valueを取得します。

E5BV

ELE5のBaseline Valueを取得します。

E6BV

ELE6のBaseline Valueを取得します。

E7BV

ELE7のBaseline Valueを取得します。

E8BV

ELE8のBaseline Valueを取得します。

E9BV

ELE9のBaseline Valueを取得します。

E10BV

ELE10のBaseline Valueを取得します。

E11BV

ELE11のBaseline Valueを取得します。

E12BV

ELEPROXのBaseline 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

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

NHDPROXR

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

NCLPROXR

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

FDLPROXR

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

MHDPROXF

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

NHDPROXF

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

NCLPROXF

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

FDLPROXF

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

NHDPROXT

ELEPROXのNoise Half Delta
Touched
を取得または設定します。

NCLPROXT

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

FDLPROXT

ELEPROXのFilter 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

ELE0のElectrode
Current
を取得または設定します。

CDC1

ELE1のElectrode
Current
を取得または設定します。

CDC2

ELE2のElectrode
Current
を取得または設定します。

CDC3

ELE3のElectrode
Current
を取得または設定します。

CDC4

ELE4のElectrode
Current
を取得または設定します。

 

機能名

機能説明

CDC5

ELE5のElectrode
Current
を取得または設定します。

CDC6

ELE6のElectrode
Current
を取得または設定します。

CDC7

ELE7のElectrode
Current
を取得または設定します。

CDC8

ELE8のElectrode
Current
を取得または設定します。

CDC9

ELE9のElectrode
Current
を取得または設定します。

CDC10

ELE10のElectrode
Current
を取得または設定します。

CDC11

ELE11のElectrode
Current
を取得または設定します。

CDC12

ELEPROXのElectrode
Current
を取得または設定します。

CDT0

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

CDT1

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

CDT2

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

CDT3

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

CDT4

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

CDT5

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

CDT6

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

CDT7

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

CDT8

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

CDT9

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

 

機能名

機能説明

CDT10

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

CDT11

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

CDT12

ELEPROXのCharge 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