1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

TWELITE 簡単アプリで I2C の動作確認

Last updated at Posted at 2020-09-20

TWELITE の「超簡単!標準アプリ」には I2C を使ってセンサーなどの情報を取得する機能があります。

今回は、その機能を使って I2C の基本的なアクセスが可能なことを確認してみます。

環境

  • TWELITE DIP
  • Microchip MTCH6102

MTCH6202 タッチセンサICです。I2Cでタッチセンサの情報を取得できます。
http://ww1.microchip.com/downloads/jp/DeviceDoc/40001750A_JP.pdf
image.png

今回は、これを搭載した nüno モジュールの試作品が手元にあったのでそれでテストしました。
image.png
これは GROVE 端子がついていて使いやすいです。

nüno とは、導電布タッチセンサーモジュールとして以下に公開されています。
https://github.com/tendots/nuno

配線

TWELITE DIP 基板ピン番号 TWELITE DIP 基板上のシルク表記 TWELITE CHIP パッド番号 TWELITE IO名 I2C機能 GROVE 配線色
1 GND GND GND GND
2 14 14 DIO14 SCL
19 15 17 DIO15 SDA
28 VCC VCC VCC VCC
IMG_20200920_165222548.jpg
GROVE 配線色は、SeeedStudio の色割り当てです。M5STACK 用の配線だと黄と白が入れ替わっていますので注意。

MTCH6102

MTCH6102 の動作モードはいくつかあり、使用にあたってどの動作モードにするかを書き込みます。

image.png

今回は、動作モードを2に設定し、その後設定値を読み出せることができるか試してみます。

TWELITE 簡単アプリでのI2Cのアクセス方法

https://mono-wireless.com/jp/products/TWE-APPS/App_Twelite/step3-I2C.html
では、


:DB88010123230055

という電文を送ることにより、自分自身に接続している I2C デバイスに書き込みする例が示されています。

: DB 88 01 01 23 23 00 55
セパレーター 自分自身に接続したI2Cデバイス 簡単アプリI2Cコマンド 任意の数値 I2Cデバイスへ書込 I2Cアドレス I2Cレジスタ 書き込みデータ長 チェックサム

この例をそのまま実行してみたら、以下のように返ってきました。


:DB89010100009A
: DB 89 01 01 00 00 9A
セパレーター 自分自身に接続したI2Cデバイス 簡単アプリI2Cコマンド (リピート) (リピート) 実行結果(0:FAIL,1:SUCCESS) データ長 チェックサム

実行失敗となっています。
そもそもサンプルとはI2Cアドレスが異なっているので、以下のように直して送ります。

読み出し


:DB880102250500X
: DB 88 01 02 25 05 00 X
セパレーター 自分自身に接続したI2Cデバイス 簡単アプリI2Cコマンド 任意の数値 I2Cデバイスから読出 I2Cアドレス I2Cレジスタ 書き込みデータ長 チェックサム省略

アドレス 0x25 に対し、レジスタ 0x05 を読み込みしてみます。

結果


:DB890102000099
: DB 89 01 02 00 00 99
セパレーター 自分自身に接続したI2Cデバイス 簡単アプリI2Cコマンド (リピート) (リピート) 実行結果(0:FAIL,1:SUCCESS) データ長 チェックサム

となりました。

失敗してますね・・・データシートを見てみるとI2C によるデータ送受信は以下のように定義されています。

image.png

読み込みについてはただ単に読み込むだけではなくて、一旦書き込んでから読み込みなのだそうです。

コマンド電文のフィールド5は、0x01が書き込み、0x02が書き込みですが、0x04が書き込み&読み出しとなっています。これを使うといいのかな?


:DB880104250501X
: DB 88 01 04 25 05 01 X
セパレーター 自分自身に接続したI2Cデバイス 簡単アプリI2Cコマンド 任意の数値 I2Cデバイスから書込&読出 I2Cアドレス I2Cレジスタ 読み込みデータ長 チェックサム省略

結果


:DB89010401010392
: DB 89 01 04 01 01 03 99
セパレーター 自分自身に接続したI2Cデバイス 簡単アプリI2Cコマンド (リピート) (リピート) 実行結果(0:FAIL,1:SUCCESS) データ長 データ チェックサム

成功し、データ値 0x03 が取得できました。

実際に、デバイスを外すと


:DB890104000097

と変化しているので I2C デバイスから応答があったらしいことがわかります。

書き込み

動作モード指定レジスタ 0x05 に タッチモード 0x02 を設定します。


:DB88010225050102X

と出すと


:DB8901020101CCCB

となりましたが、これはコマンドを間違えていました。やり直し。


:DB88010125050102X
: DB 88 01 01 25 05 01 02 X
セパレーター 自分自身に接続したI2Cデバイス 簡単アプリI2Cコマンド 任意の数値 I2Cデバイスから書込 I2Cアドレス I2Cレジスタ 書込データ長 データ列 チェックサム省略

と出すと


:DB890101010099

|:|DB|89|01|01|01|00|99|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|セパレーター|自分自身に接続したI2Cデバイス|簡単アプリI2Cコマンド|(リピート)|(リピート)|実行結果(0:FAIL,1:SUCCESS)|データ長|チェックサム|

書けたかな?

デバイスを外していると


:DB89010100009A

と応答が変化するのでデバイスは反応しているようです。

ベリファイ

先程書き込み動作する以前はモード設定レジスタ0x05の内容は0x03でした。
その後0x02を書き込んだので、正常に書き込まれたかどうか確認してみます。

先程の「読み出し」実験で使用した電文をそのまま使ってみます。


:DB880104250501X
: DB 88 01 04 25 05 01 X
セパレーター 自分自身に接続したI2Cデバイス 簡単アプリI2Cコマンド 任意の数値 I2Cデバイスから書込&読出 I2Cアドレス I2Cレジスタ 読み込みデータ長 チェックサム省略

結果

:DB89010401010293
: DB 89 01 04 01 01 02 93
セパレーター 自分自身に接続したI2Cデバイス 簡単アプリI2Cコマンド (リピート) (リピート) 実行結果(0:FAIL,1:SUCCESS) データ長 データ チェックサム

0x05 レジスタの値が 0x02 になっていることが確認できました。

nüno2

上の結果を元に、nüno モジュールの次バージョンとして、TWELITE と MTCH6102 を一体化した基板を作ってみました。

IMG_20200920_165059783.jpg

次バージョンの nüno はこちらで作っています。
https://github.com/tendots/nuno2

nüno2 を使って無線で MTCH6102 と通信する

先の例では :DB..... というコマンドを使って自分自身のI2Cデバイスを操作しました。

:78... というコマンドに替えると無線での接続先のI2Cデバイスを操作できます。

image.png

通常の TWELITE を親機モードにして、nüno2 と無線でやり取りしてみます。

まず、先の

:DB880104250501X

を無線で接続した子機へのリクエストに直してみます。

:78880104250501X

と打ち込んでアドレス 0x25 に対し、レジスタ 0x05 を読み込みしてみます

:78890104010103F5

と出れば、レジスタ 0x05 の中身 0x03 の読み出しができています。

なお、このコマンドを連打してみましたが、1秒ごとしか返事は返ってこないみたいです。

アドレス0x05に 0x02を書いて、タッチモードにします。
アドレス0x20に 0x07を書いて、NUMBEROFXCHANNELSを設定します
アドレス0x21に 0x06を書いて、NUMBEROFYCHANNELSを設定します
アドレス0x80-0x87 を読み込んで、チャンネルごとのRAW値を読み込みます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?