今回は、I2C通信を行う温度センサとLCDモジュールの回路図を設計します。
I2C通信モジュールの端子
温度センサとLCDモジュールの通信方式はI2Cです。前回の温湿度・気圧センサは、SPIかI2Cを選択できましたが、温度センサとLCDモジュールの通信方式はI2C固定です。
I2C通信モジュールは以下のような端子を持っています。
端子名 | 内容 |
---|---|
VDDや+など | 電源プラス |
GNDや-など | 電源マイナス |
SDA | データを送受信する端子 |
SCL | データ通信のタイミングをとる端子 |
I2C通信の詳細を説明していませんので、端子の意味はまださっぱりわかりませんよね。今のところは端子の意味や働きは全くわからなくて大丈夫です。
I2C通信モジュールもPICマイコンにただ接続するだけですが、SPI通信に比べてちょっとだけ部品が必要です。その内容も含めて、接続方法を説明します。
I2C通信モジュールの接続方法
I2C通信モジュール一般的な接続方法を説明します。
I2C通信モジュールを接続する場合、PICマイコンのピンに接続するだけですが、以下のようにそれぞれの信号線を10kΩの抵抗でプルアップする必要があります。
I2C通信のモジュールは、種類によらずこのような接続方法を取ります。
実践編のシステムでは、温度センサとLCDモジュールがI2C通信を行いますので、2つのI2Cモジュールを接続する必要があります。複数のI2Cモジュールを接続する場合は、以下のように同じ信号線を接続していけばOKです。
注意点としては、10kΩのプルアップ抵抗は1ヶ所でOKです。I2Cモジュールが複数ある場合でもプルアップ抵抗は1組にします。
ところで、SPI通信モジュールも複数接続することができますが、接続方法については通信方法を説明するときに接続方法も説明します。
I2C通信モジュールはこのように同じ信号線を接続して、1ヶ所抵抗でプルアップするだけ、となります。
回路図
ということで、結局今回も接続しておしまいです。回路図は以下のようになります。
PICマイコンのピンはSPIモジュールの時と同様、端のピンの方がブレッドボードで接続しやすいという理由だけです。PICマイコンのプログラムで制御することになります。
なんだか解説が足りないような気もしますが、データ通信を行うモジュールは基本的に信号線を接続しておしまい、あとでプログラムするときに大変な目にあう、というのが基本です。ご不明点がありましたらコメント欄かお問い合わせフォームからご質問いただければと思います。
更新履歴
日付 | 内容 |
---|---|
2018.3.25 | 新規投稿 |
2018.12.7 | 回路図のPICkitコネクタピン数を6ピンから5ピンに変更 |
ツール・ラボでは大変勉強になる所が有り拝見させて頂いております。
現在LDCと温度センサーのi2cタイミングで悩んでおりましてご連絡致しました。
症状としてし、数日間動かしてまれにi2cが止まってしまう(止まっている位置は、スタート,ack待ちなど定まっていません)のですが、オシロで見るとスタートパルスの時はデーター基準でクロックが変化する時間が5.4u程度のずれは有るのですが、それ以降のパルスタイミングがクロックが立ち下がりするタイミングに対してデーターが変化する時間が360ns : クロック立ち上がりに対してデーターが変化する時間が520ns
しか有りません。(クロックとデーターの切換がほぼ同じ状態)
上記時間に対して、信号をずらすタイミングもしくは調整方法等は有るのでしょうか?
動かしているICは、PIC16f18857です。
以上よろしくお願い申し上げます。
ご質問いただきどうもありがとうございました。
クロックとデータのタイミングですが、データシートのタイミングチャートを確認したところ、データの時間幅の中央付近でクロックが立ち上がるようになっています。
スタートのタイミングでは、データがLOWになった後、一定時間経過後にクロックがLOWになりますが、この時間間隔と、データ送信時のタイミング(データが変化してからクロックが立ち上がるまでの時間)も同じ仕様になっています(スタート、データ送信ともにSSP1ADDの値により計算された値を使用しています)。
スタートのタイミングが5.4u程度であれば、データ送信のデータ信号とクロック信号のずれも同程度になるはずなのですが、その1/10程度になる原因はデータシートからは読み取れませんでした。
オシロスコープで信号が確認できる環境をお持ちですので、SSP1ADDを変更した場合に、その変更による影響を確認いただけると幸いです。
具体的には、現在のプログラムでは、SSP1ADDの値は0x09になっていると思います。0x09の場合、通信速度は100kbpsになります。この値を0x13にすると通信速度が半分の50kbpsになります。この時の信号が、スタートは10us程度のずれ、データ送信時は1us程度のずれであれば、回路上の影響ではなく動作上(設定上)の原因の可能性がありそうです。
もしこのずれが比例関係にないときは、回路上の原因の可能性もあります。ブレッドボードは寄生容量が大きいため、信号がなまっている可能性もありますので、その場合は抵抗を2k〜5k程度に小さくすると信号波形が改善されることがあります。
明確な回答ができずに申し訳ございません。
こちらでも何か設定がないかデータシートで確認してみます。
ご連絡大変ありがとうございました。
此方でもいろいろ探してみた結果、原因がわかりました。
当方の持っている仕様書(資料)が古いという事が判り、i2cのSDAHTを使えば動かせる事が判りました。
ご調査・等で、ご苦労をおかけ致しました事に対して、大変感謝している次第です。
お返事いただきどうもありがとうございました。
現象の観点ではセットアップタイム(データ確定後、クロックを変化させるまでの時間)が原因かと思っていましたが、ホールドタイムが原因だったんですね。失礼いたしました。
また、今回コメントいただいて勉強になりました。どうもありがとうございました。