I2Cセンサーの種類 |
静電容量式8cHタッチセンサー |
|
主な機能 |
人間が触れる事での静電容量容量変化を検出するタッチセンサー 8個のタッチパッドを装着できます。 |
|
I2Cデバイス名 |
MPR121 |
|
写真
|
||
開発したデバイスの入手先 製品名 品番・型番 |
スイッチサイエンス 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
|
|
|
|
|
開発・テスト風景
レジスタの数の割りに画面はシンプルです。 |
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 |
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 |
ARFF |
AUTO-RECONFIG |
機能名 |
機能説明 |
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 |
NHDR |
Noise |
NCLR |
Noise |
FDLR |
Filter |
MHDF |
Maximum |
NHDF |
Noise |
NCLF |
Noise |
FDLF |
Filter |
NHDT |
Maximum |
機能名 |
機能説明 |
NCLT |
Noise Count Limit Touchedを取得または設定します。 |
FDLT |
Filter Delay Count Limit Touchedを取得または設定します。 |
MHDPROXR |
ELEPROXのMaximum Half |
NHDPROXR |
ELEPROXのNoise Half Delta |
NCLPROXR |
ELEPROXのNoise Count |
FDLPROXR |
ELEPROXのFilter Delay |
MHDPROXF |
ELEPROXのMaximum Half |
NHDPROXF |
ELEPROXのNoise Half Delta |
NCLPROXF |
ELEPROXのNoise Count |
FDLPROXF |
ELEPROXのFilter Delay |
NHDPROXT |
ELEPROXのNoise Half Delta |
NCLPROXT |
ELEPROXのNoise Count |
FDLPROXT |
ELEPROXのFilter Delay |
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 |
CDC1 |
ELE1のElectrode |
CDC2 |
ELE2のElectrode |
CDC3 |
ELE3のElectrode |
CDC4 |
ELE4のElectrode |
機能名 |
機能説明 |
CDC5 |
ELE5のElectrode |
CDC6 |
ELE6のElectrode |
CDC7 |
ELE7のElectrode |
CDC8 |
ELE8のElectrode |
CDC9 |
ELE9のElectrode |
CDC10 |
ELE10のElectrode |
CDC11 |
ELE11のElectrode |
CDC12 |
ELEPROXのElectrode |
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 |
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 |
0x36 |
|
REG_ADDR.ELEPROX_Falling |
レジスタELEPROX MHD |
0x3A |
|
REG_ADDR.ELEPROX_Touched |
レジスタELEPROX NHD |
0x3E |
|
REG_ADDR.Threshold |
レジスタELE0 Touch |
0x41 |
|
REG_ADDR.Debounce |
レジスタDebounce Touch |
0x5B |
|
REG_ADDR.AF_Configuration_1 |
レジスタAFE |
0x5C |
|
REG_ADDR.AF_Configuration_2 |
レジスタAFE |
0x5D |
|
REG_ADDR.Electrode_Configuration |
レジスタElectrode |
0x5E |
|
REG_ADDR.Electrode_Current |
レジスタELE0 Electrode |
0x5F |
|
REG_ADDR.Charge_Time |
レジスタELE0, ELE1 |
0x6C |
|
REG_ADDR.GPIO |
レジスタGPIO Control |
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
|