Community Translation – XENSIV™ TLI493D-W2BW: I2C interface example - KBA237409

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
1 Solution
YuMa_1534086
Level 7
Level 7
Distributor - Macnica (Japan)
500 replies posted 250 sign-ins 10 likes received

Hi Bindu-san.

 

I translated KBA(KBA237409).

Please check whether this translation is correct?

 

 

==================================================

XENSIV™ TLI493D-W2BW: I2Cインターフェイスの例 - KBA237409

 

バージョン: **

 

このKBAではシリコンA0アドレスを持つTLI493D-W2BW 3D磁気センサー用のArduino Unoボードを使用した最小限のコード例を提供します。

I2Cアドレスは書き込みで0x6A、読み取りで0x6Bになります。7ビットフォーマットではI2Cアドレスは0x35に変換されます。次の手順で磁場の値を読み取る下記のコード例が使用できます。

 

YuMa_1534086_0-1687172359406.png

 

図1 TLI493D-W2BW shield 2Go

 

 1.3V3GNDSCL、およびSDAピンをそれぞれのArduino Unoボードピンに接続します。

   3V3GNDが正しく接続されていればLEDが点灯します。

   RSTピンはオンボードのプルダウン抵抗によってLOW に引っ張られているため、センサーはデフォルトで電源オンになります。

   割り込みを使用しないため、/INTピンは使用しません。したがって、RST/INTピンはオープンのままにすることができます。

 

 2.次のようにCONFIGレジスタ(0x10)に0x11の値を書き込み、センサーを構成します。表1を参照してください。

     a. DTビットをデフォルト値(0b0)のままにし、温度測定を有効にします。

     b. AMビットをデフォルト値(0b0)のままにし、Bz測定を有効にします。

     c. ファーストMSBより前の読み出し時にADCをトリガする為にTRIGビットを0b01に設定します。

     d. X2TL_magビットはデフォルト値のままにしておきます。

     e. WAビットと予約ビットを含まないレジスタ0x07から0x100x10を含む)までの奇数パリティ計算に従ってCPビットを0b1に設定します。

 

表1 CONFIGレジスタのアドレス、ビットマップ、および値

 

レジスタ
アドレス

レジスタ名

 

ビット
マップ

0x10

CONFIG

DT

AM

TRIG

X2

TL_mag

CP

0x10

CONFIG

0

0

0

1

0

0

0

1

 

 3.次のようにMOD1レジスタ(0x11)に0x91の値を書き込みます。表2を参照してください。

     a. 製品タイプがA0であるため、IICAdrビットはデフォルト値(0b00)のままにしておきます。
     b. センサーを1バイト読み取りモードに設定するにはPRビットを0b1に設定します。
     c. /INTと衝突回避を有効にしクロックストレッチを無効にするためにCAINTビットをデフォルト値のままにしておきます。
     d. マスター制御モードを設定するにはMODEビットを0b01に設定します。
     e. MOD1レジスタとMOD2レジスタのPRDビットの奇数パリティに従ってFPビットの値を0b1に設定します。

 

表2 MOD1レジスタのアドレス、ビットマップ、および値

 

レジスタ
アドレス

レジスタ名

 

ビット
マップ

0x11

MOD1

FP

IICadr

PR

CA

INT

MODE

0x11

MOD1

1

0

0

1

0

0

0

1

 

 4.次のコード例を使用してセンサーデータのレジスタとデータの整合性の分析に使用できるDIAGバイトを含む最初の7バイトを読み取ります。

 

 5.磁場の値はArduino IDEのシリアルモニターで確認できます。

 

コードリスト1 TLI493D-W2BWArduinoを使用したコード例

/*****************************************************************************

 *
 * Copyright (C) 2023 Infineon Technologies AG (INFINEON). All rights reserved.
 *
 * THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED
 * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
 * INFINEON SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.

 *
 ******************************************************************************/
/* ---------------------------------------------------------------- */

/* Very basic sketch to read out data from the TLI493D-W2BW sensor  */
/* with the master controlled 1-byte-read mode triggering ADC on    */
/* read before first MSB                                            */
/* ---------------------------------------------------------------- */

#include <Wire.h>       // default I²C library
#define ADDRESS 0x35
#define DELAY 500       // value in ms, change to modify update rate
void setup() {
  // Init I2C peripheral
  Wire.begin();
  Wire.setClock(400000);
  // Configure sensor
  Wire.beginTransmission(ADDRESS); // Sensor address
  Wire.write(0x10);             // Register address

  Wire.write(0b00010001);       // Config register: measure temperature, measure Bz, trigger ADC on read before MSB(2bits), full range, no temperature compensation(2bits), odd CP parity

  Wire.write(0b10010001);       // MOD1 register: odd Fuse parity, I2C address A0, 1-byte-read mode, no collision avoidance, enabled interrupt, master controlled mode

  Wire.endTransmission();

  // Init serial port for communication to the PC

  Serial.begin(9600);

  while (!Serial);
  Serial.println("Bx, By, Bz, T");

}

void loop() {

  // Readout the first 7 data bytes

  uint8_t buf[7];
  Wire.requestFrom(ADDRESS, 7);
  for (uint8_t i = 0; i < 7; i++) {
    buf[i] = Wire.read();
  }

  // Built 12 bit data

  int16_t X = (int16_t)((buf[0] << 8 )| (buf[4] & 0xF0)) >> 4;
  int16_t Y = (int16_t)((buf[1] << 8 ) | ((buf[4] & 0x0F) << 4)) >> 4;
  int16_t Z = (int16_t)((buf[2] << 8 ) | ((buf[5] & 0x0F) << 4)) >> 4;
  uint16_t T = (buf[3] << 4) | (buf[5] >> 4);

  /* --------------------------------------------------------- */

  /* Enter your application code here*/

  /* --------------------------------------------------------- */

  // Send via serial port to be displayed on a terminal

  Serial.print(X);
  Serial.print(", ");
  Serial.print(Y);
  Serial.print(", ");
  Serial.print(Z);
  Serial.print(", ");
  Serial.print(T);
  Serial.println();
  delay(DELAY);

}

 

 

参考資料

  1. 製品ウェブページ: TLI493D-W2BW-A0
  2. データシート V 1.2 2019-04-09: TLI493D-W2BW-Datasheet-v01_00
  3. ユーザーガイド V 1.11 2019-05-28: TLI493D-W2BW-UM-v01_10

==================================================

 

 

Best Regards.

YuMa

View solution in original post

0 Likes
3 Replies
IFX_Publisher2
Community Manager
Community Manager
Community Manager
25 likes received 1000 replies posted First like given

Hi YuMa san,

Confirm to work on this KBA.

Thanks,
Bindu

0 Likes
YuMa_1534086
Level 7
Level 7
Distributor - Macnica (Japan)
500 replies posted 250 sign-ins 10 likes received

Hi Bindu-san.

 

I translated KBA(KBA237409).

Please check whether this translation is correct?

 

 

==================================================

XENSIV™ TLI493D-W2BW: I2Cインターフェイスの例 - KBA237409

 

バージョン: **

 

このKBAではシリコンA0アドレスを持つTLI493D-W2BW 3D磁気センサー用のArduino Unoボードを使用した最小限のコード例を提供します。

I2Cアドレスは書き込みで0x6A、読み取りで0x6Bになります。7ビットフォーマットではI2Cアドレスは0x35に変換されます。次の手順で磁場の値を読み取る下記のコード例が使用できます。

 

YuMa_1534086_0-1687172359406.png

 

図1 TLI493D-W2BW shield 2Go

 

 1.3V3GNDSCL、およびSDAピンをそれぞれのArduino Unoボードピンに接続します。

   3V3GNDが正しく接続されていればLEDが点灯します。

   RSTピンはオンボードのプルダウン抵抗によってLOW に引っ張られているため、センサーはデフォルトで電源オンになります。

   割り込みを使用しないため、/INTピンは使用しません。したがって、RST/INTピンはオープンのままにすることができます。

 

 2.次のようにCONFIGレジスタ(0x10)に0x11の値を書き込み、センサーを構成します。表1を参照してください。

     a. DTビットをデフォルト値(0b0)のままにし、温度測定を有効にします。

     b. AMビットをデフォルト値(0b0)のままにし、Bz測定を有効にします。

     c. ファーストMSBより前の読み出し時にADCをトリガする為にTRIGビットを0b01に設定します。

     d. X2TL_magビットはデフォルト値のままにしておきます。

     e. WAビットと予約ビットを含まないレジスタ0x07から0x100x10を含む)までの奇数パリティ計算に従ってCPビットを0b1に設定します。

 

表1 CONFIGレジスタのアドレス、ビットマップ、および値

 

レジスタ
アドレス

レジスタ名

 

ビット
マップ

0x10

CONFIG

DT

AM

TRIG

X2

TL_mag

CP

0x10

CONFIG

0

0

0

1

0

0

0

1

 

 3.次のようにMOD1レジスタ(0x11)に0x91の値を書き込みます。表2を参照してください。

     a. 製品タイプがA0であるため、IICAdrビットはデフォルト値(0b00)のままにしておきます。
     b. センサーを1バイト読み取りモードに設定するにはPRビットを0b1に設定します。
     c. /INTと衝突回避を有効にしクロックストレッチを無効にするためにCAINTビットをデフォルト値のままにしておきます。
     d. マスター制御モードを設定するにはMODEビットを0b01に設定します。
     e. MOD1レジスタとMOD2レジスタのPRDビットの奇数パリティに従ってFPビットの値を0b1に設定します。

 

表2 MOD1レジスタのアドレス、ビットマップ、および値

 

レジスタ
アドレス

レジスタ名

 

ビット
マップ

0x11

MOD1

FP

IICadr

PR

CA

INT

MODE

0x11

MOD1

1

0

0

1

0

0

0

1

 

 4.次のコード例を使用してセンサーデータのレジスタとデータの整合性の分析に使用できるDIAGバイトを含む最初の7バイトを読み取ります。

 

 5.磁場の値はArduino IDEのシリアルモニターで確認できます。

 

コードリスト1 TLI493D-W2BWArduinoを使用したコード例

/*****************************************************************************

 *
 * Copyright (C) 2023 Infineon Technologies AG (INFINEON). All rights reserved.
 *
 * THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED
 * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
 * INFINEON SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.

 *
 ******************************************************************************/
/* ---------------------------------------------------------------- */

/* Very basic sketch to read out data from the TLI493D-W2BW sensor  */
/* with the master controlled 1-byte-read mode triggering ADC on    */
/* read before first MSB                                            */
/* ---------------------------------------------------------------- */

#include <Wire.h>       // default I²C library
#define ADDRESS 0x35
#define DELAY 500       // value in ms, change to modify update rate
void setup() {
  // Init I2C peripheral
  Wire.begin();
  Wire.setClock(400000);
  // Configure sensor
  Wire.beginTransmission(ADDRESS); // Sensor address
  Wire.write(0x10);             // Register address

  Wire.write(0b00010001);       // Config register: measure temperature, measure Bz, trigger ADC on read before MSB(2bits), full range, no temperature compensation(2bits), odd CP parity

  Wire.write(0b10010001);       // MOD1 register: odd Fuse parity, I2C address A0, 1-byte-read mode, no collision avoidance, enabled interrupt, master controlled mode

  Wire.endTransmission();

  // Init serial port for communication to the PC

  Serial.begin(9600);

  while (!Serial);
  Serial.println("Bx, By, Bz, T");

}

void loop() {

  // Readout the first 7 data bytes

  uint8_t buf[7];
  Wire.requestFrom(ADDRESS, 7);
  for (uint8_t i = 0; i < 7; i++) {
    buf[i] = Wire.read();
  }

  // Built 12 bit data

  int16_t X = (int16_t)((buf[0] << 8 )| (buf[4] & 0xF0)) >> 4;
  int16_t Y = (int16_t)((buf[1] << 8 ) | ((buf[4] & 0x0F) << 4)) >> 4;
  int16_t Z = (int16_t)((buf[2] << 8 ) | ((buf[5] & 0x0F) << 4)) >> 4;
  uint16_t T = (buf[3] << 4) | (buf[5] >> 4);

  /* --------------------------------------------------------- */

  /* Enter your application code here*/

  /* --------------------------------------------------------- */

  // Send via serial port to be displayed on a terminal

  Serial.print(X);
  Serial.print(", ");
  Serial.print(Y);
  Serial.print(", ");
  Serial.print(Z);
  Serial.print(", ");
  Serial.print(T);
  Serial.println();
  delay(DELAY);

}

 

 

参考資料

  1. 製品ウェブページ: TLI493D-W2BW-A0
  2. データシート V 1.2 2019-04-09: TLI493D-W2BW-Datasheet-v01_00
  3. ユーザーガイド V 1.11 2019-05-28: TLI493D-W2BW-UM-v01_10

==================================================

 

 

Best Regards.

YuMa

0 Likes
IFX_Publisher2
Community Manager
Community Manager
Community Manager
25 likes received 1000 replies posted First like given

Hi YuMa san,

Confirmed to receive this KBA.

Thank you for your contribution.

Thanks,
Bindu

0 Likes