北東北 LabVIEWユーザー会

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

LINXにおけるI2Cの利用方法(TC74A0の利用)

こんばんは。

英語でも解説サイトが少ないことから、TC74A0を例にLINXでI2Cを利用する方法の解説を投稿させていただきました。読込だけですが参考になれば幸いです。

Wordをペーストしたため、画質が悪いなど見苦しい部分がありますが、大目に見ていただけますようお願いします。

 また、用語の間違えや改善点等がございましたら、コメントしていただければ幸いです。

 

///////////////////////////////////////////////////////////////////////////////////////////

(本文)

 I2Cの利用方法について、温度センサー「TC74A0-3.3VAT」を例に解説します。

 

データシート

https://www.alldatasheet.jp/datasheet-pdf/pdf/515525/MICROCHIP/TC74A0-3.3VAT.html

 

販売サイト

https://www.marutsu.co.jp/pc/i/988285/

https://jp.misumi-ec.com/vona2/detail/222005585728/?PNSearch=TC74A0-3.3VAT&HissuCode=TC74A0-3.3VAT&s...

 

①     回路作成

 RPi3.3Vで駆動することから、GPIOの入力は3.3Vである必要があります[1]。そのため、3.3Vで駆動するTC74A0-3.3VATを利用します。

回路図は図 68の通りであり、プルアップ抵抗として10kΩを採用していますが他の抵抗でも問題ありません。ただし、極端に小さい、大きい場合は問題が発生しますので注意が必要です[2]

 1.png

68  TC74A0-3.3VATの回路図

 

②     アドレスの確認

 I2Cを利用するためにはデバイスのアドレスが必要であるため、ラズベリーパイに接続されたI2Cデバイスを確認します。

 

  1. RPiのコンソール画面にログイン後、「sudo raspi-config」を実行し、I2Cが有効になっていることを確認します。

 

  1. I2Cのアドレスを確認するためのソフトをインストールします。

sudo apt-get updatge

sudo apt-get install i2c-tools

 

  • インストール完了後、次のコマンドを実行し接続されたデバイスのアドレスを確認します(図 69)。結果は16進数として表示され、今回はアドレスが0x482進数表記では1001000b)であることが分かります。

I2cdetect –y 1

 2.png

69 コマンド実行後の画面

 

なお、アドレスはデータシートにも記載されています(図 70)。

3.png

70 データシートのアドレス

 

③     Labviewプログラムの作成1

 デバイスと通信ができているかを、デバイスから得られるバイナリデータ(2進数の数値)確認するためのプログラム(図 72)を測定フォーマット(図 71)に従って作成します。この際、”I2C Read”に入力するアドレスを定数として指定する際、デフォルトでは浮動小数点数(floating point)が設定されているため16進数に変更します(図 73)。また、読込バイト数は図 70より、デバイスから8ビット(1バイト)送信されることから、1バイトと指定します。

 VIを実行し、受信されたバイナリデータが表示されれば問題なしです。

 4.png

71

 5.png

72 デバイスの確認プログラムのブロックダイアグラム

6.png

73 16進数表示への変更方法

 

④     Labviewプログラムの作成2

 通信ができたことから、得られた2の補数のバイナリデータを元に温度を算出します。

 TC74から得られたバイナリデータと温度の対応は図 74の通りであり、得られた2の補数を10進数に変換した値が測定データになります。

 7.png

74 データの対応する桁数

 

 以上を踏まえて作成したVIは図 75、76あり、2の補数の変換にはLINXに用意されている関数を利用しています(図 77)。

 8.png

75 ブロックダイアグラム

 

9.png

76 フロントパネル

10.png

77 変換に関する関数

 

 

[1] Raspberry Pi > 3.3V駆動なのだろうか? > GPIOは3.3Vで入れること

[2] プルアップ抵抗について解説

メッセージ1/6
3,728件の閲覧回数

fukumaka2さん、詳しい情報ありがとうございます。

まだ読んでいる途中ですが、ラズベリーパイのI2Cのプルアップ抵抗についての情報です。

 

一例として3B+の回路図へのリンクを紹介します。

https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/rpi_SCH_3bplus_1p0_reduced...

 

回路図によれば、I2CのSDA(3pin:GPIO2)とSCL(5pin:GPIO3)には内部で1.8kΩで3.3Vにプルアップされています。

0 件の賞賛
メッセージ2/6
3,715件の閲覧回数

TC74A0は使ったことがありませんでしたが、I2Cの使い方のサンプルに良いですね。

センサーからの出力値のテーブルをデータシートから抜粋して添付します。value.png

 

 

2の補数の変換関数が用意されていることを知りませんでした。便利ですね。

以下、補足情報です。

 

LabVIEWの符号つき整数も2の補数形式ですので、8ビットの2の補数の場合はU8からI8に変換するだけでもOKだと思います。2の補数.png

 12ビットの2の補数データをU16で受け取ってI16に変換するような場合は、この手は使えませんので変換関数を使う必要があります。

 

 

 

メッセージ3/6
3,703件の閲覧回数

おおはし様

 

RPiのプルアップ抵抗を含めご指摘、ご意見頂きありがとうございます。

補足で頂いた「符号つき整数の変換」について、テキスト(メモ)に追記させていただきます。

 

>TC74A0は使ったことがありませんでしたが、I2Cの使い方のサンプルに良いですね。

偶然利用しただけで特に意図していなかったのですが、宜しければ良いと思われた理由を教えて頂けませんでしょうか?

メモを良いものにする参考にさせて頂きたいと考えております。

お時間があるときで構いませんので、よろしくお願いいたします。

0 件の賞賛
メッセージ4/6
3,687件の閲覧回数

>良いと思われた理由を教えて頂けませんでしょうか?

TC74A0は今まで私が見たI2Cセンサーの中で一番単純なセンサーでした。

初めてのデバイス(ラズベリーパイやArduinoなど)でI2Cを使う時に配線やプルアップ抵抗など不安なことがありますが、TC74A0はとりあえずアドレスを指定してReadするだけで温度値が8ビットで受け取れるので、I2Cを使う準備が整ったという感触を得ることができるので便利だと思いました。また、初めてのセンサーやモジュールはすんなりと動かない場合があるので、問題があった時にTC74A0で温度を測ってみればマイコン側の配線には大きな間違いがないことが確認できるので1個もっていると良いかもしれないと思いました。

0 件の賞賛
メッセージ5/6
3,684件の閲覧回数

ありがとうございます。

資料作りの参考にさせていただきます。

またよろしくお願いいたします。

0 件の賞賛
メッセージ6/6
3,536件の閲覧回数