11-25-2018 09:22 AM
こんばんは。
英語でも解説サイトが少ないことから、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/
RPiは3.3Vで駆動することから、GPIOの入力は3.3Vである必要があります[1]。そのため、3.3Vで駆動するTC74A0-3.3VATを利用します。
回路図は図 68の通りであり、プルアップ抵抗として10kΩを採用していますが他の抵抗でも問題ありません。ただし、極端に小さい、大きい場合は問題が発生しますので注意が必要です[2]。
図 68 TC74A0-3.3VATの回路図
I2Cを利用するためにはデバイスのアドレスが必要であるため、ラズベリーパイに接続されたI2Cデバイスを確認します。
sudo apt-get updatge
sudo apt-get install i2c-tools
I2cdetect –y 1
図 69 コマンド実行後の画面
なお、アドレスはデータシートにも記載されています(図 70)。
図 70 データシートのアドレス
デバイスと通信ができているかを、デバイスから得られるバイナリデータ(2進数の数値)確認するためのプログラム(図 72)を測定フォーマット(図 71)に従って作成します。この際、”I2C Read”に入力するアドレスを定数として指定する際、デフォルトでは浮動小数点数(floating point)が設定されているため16進数に変更します(図 73)。また、読込バイト数は図 70より、デバイスから8ビット(1バイト)送信されることから、1バイトと指定します。
VIを実行し、受信されたバイナリデータが表示されれば問題なしです。
図 71
図 72 デバイスの確認プログラムのブロックダイアグラム
図 73 16進数表示への変更方法
通信ができたことから、得られた2の補数のバイナリデータを元に温度を算出します。
TC74から得られたバイナリデータと温度の対応は図 74の通りであり、得られた2の補数を10進数に変換した値が測定データになります。
図 74 データの対応する桁数
以上を踏まえて作成したVIは図 75、76あり、2の補数の変換にはLINXに用意されている関数を利用しています(図 77)。
図 75 ブロックダイアグラム
図 76 フロントパネル |
図 77 変換に関する関数 |
11-25-2018 06:17 PM
fukumaka2さん、詳しい情報ありがとうございます。
まだ読んでいる途中ですが、ラズベリーパイのI2Cのプルアップ抵抗についての情報です。
一例として3B+の回路図へのリンクを紹介します。
回路図によれば、I2CのSDA(3pin:GPIO2)とSCL(5pin:GPIO3)には内部で1.8kΩで3.3Vにプルアップされています。
11-25-2018 08:08 PM
TC74A0は使ったことがありませんでしたが、I2Cの使い方のサンプルに良いですね。
センサーからの出力値のテーブルをデータシートから抜粋して添付します。
2の補数の変換関数が用意されていることを知りませんでした。便利ですね。
以下、補足情報です。
LabVIEWの符号つき整数も2の補数形式ですので、8ビットの2の補数の場合はU8からI8に変換するだけでもOKだと思います。
12ビットの2の補数データをU16で受け取ってI16に変換するような場合は、この手は使えませんので変換関数を使う必要があります。
11-26-2018 07:59 AM
おおはし様
RPiのプルアップ抵抗を含めご指摘、ご意見頂きありがとうございます。
補足で頂いた「符号つき整数の変換」について、テキスト(メモ)に追記させていただきます。
>TC74A0は使ったことがありませんでしたが、I2Cの使い方のサンプルに良いですね。
偶然利用しただけで特に意図していなかったのですが、宜しければ良いと思われた理由を教えて頂けませんでしょうか?
メモを良いものにする参考にさせて頂きたいと考えております。
お時間があるときで構いませんので、よろしくお願いいたします。
11-26-2018 08:29 AM
>良いと思われた理由を教えて頂けませんでしょうか?
TC74A0は今まで私が見たI2Cセンサーの中で一番単純なセンサーでした。
初めてのデバイス(ラズベリーパイやArduinoなど)でI2Cを使う時に配線やプルアップ抵抗など不安なことがありますが、TC74A0はとりあえずアドレスを指定してReadするだけで温度値が8ビットで受け取れるので、I2Cを使う準備が整ったという感触を得ることができるので便利だと思いました。また、初めてのセンサーやモジュールはすんなりと動かない場合があるので、問題があった時にTC74A0で温度を測ってみればマイコン側の配線には大きな間違いがないことが確認できるので1個もっていると良いかもしれないと思いました。
12-03-2018 09:11 AM
ありがとうございます。
資料作りの参考にさせていただきます。
またよろしくお願いいたします。