実験の目的:温湿度センサーの値を収集する
1. IICの概念
1.同期シリアル半二重バスは、主に回路全体をリンクするために使用され、ハードウェア構造が単純で、インターフェイス接続が便利で、コストが低いです
2. 2 線式、双方向信号線は 2 本のみ、データ線 SDA、クロック線 SCL
3. IIC 伝送速度: 1) 低速: 100k、2) 400k、フルスピード: 3.4M
4. バスの外部には 2 つのプルアップ抵抗があります。バスがアイドル状態の場合、デフォルトではハイ レベル状態になります。
2. ハードウェア接続
1. マルチマスターおよびマルチスレーブモードをサポートしますが、同時に通信できるのは 1 つのマスターと 1 つのスレーブのみであり、ほとんどの場合はシングルマスターおよびマルチスレーブモードを使用します。
2. IIC バスに接続された各スレーブ デバイスは、独自の 7 ビット スレーブ アドレスを持ちます。
3. データ送信 ---- 送信者、データ受信 ---- 受信者
データをアクティブに開始 ----マスター、データを受動的に受信 ----スレーブ
4. クロック信号はマスターによって生成され、スレーブに作用してデータの送受信の同期を完了します。
3. 内部ブロック図
4、タイミング
1. バスタイミング、タイミングスプライシングはプロトコルです
2. SCL ハイレベル、開始信号と停止信号を送信できます
SCL ローレベル、データ送信信号を送信可能
3. 8 データビットを送信した後、応答ビットを送信する必要があり、終了信号は応答後にのみ送信できます。
4. スレーブアドレスはスタート信号の後に書き込む必要があるため、
1. スタート信号
1. 開始信号と停止信号は両方ともホストによって生成されます。
2. 開始信号が生成された後、バスがデータの送信を開始することを意味します
3. スタート信号: SCL が High レベルの間、データラインが High から Low (立ち下がりエッジ) に変化します。
4. スタート信号発生後、バスは占有状態になります。
2. 停止信号
1. ストップ信号発生後、バス送信データの終了を意味します
2. 停止信号: SCL が High レベルの間、データ ラインが Low から High (立ち上がりエッジ) に変化します。
3. ストップ信号発生後、バスはアイドル状態になります。
3. データ送信信号
SCL が Low の場合、データ ライン上のデータの変更が許可され、トランスミッタはデータ ラインにデータを書き込みます。
SCL がハイ レベルの間、データ ライン上のデータは安定した状態を維持する必要があり、変更は許可されず、レシーバーはデータ ラインからデータを読み取ります。
4. 応答信号
1. 送信データごとに 8 ビットの長さを保証する必要があります ==> 最初に上位ビットを送信し、次に下位ビットを送信します
2. 8 データ ビットが送信されるごとに、応答ビットが存在する必要があります。データの 1 フレーム = 8 データ ビット + 1 応答ビット = 9 ビット
3. 送信側は 8 ビットのデータをデータ線に書き込み、受信側は 9 クロックサイクルで応答信号/非応答信号をデータ線に書き込みます。
トランスミッタは、9 番目のクロック サイクルでデータ ラインからデータを読み取ります。
読み取り 0: 受信機は確認信号を返します。
読み取り 1: 受信機が非確認信号を返しました。
5. 信号のアドレス指定
1. IIC バスは広義のデータ伝送であり、8 ビットのデータまたは 7 ビットのスレーブアドレス + リード/ライトビットを伝送できます。
2. 書き込みビットは 0 で表され、読み取りビットは 1 で表されます。
3. バスからのデータの読み取り: 7 ビットのスレーブ アドレス + 読み取り (1)
4. バスへのデータの書き込み: 7 ビットのスレーブ アドレス + 書き込み (0)
5. これらの 8 ビットがアドレス指定プロセスを表すように、スレーブ アドレスは開始信号の後に書き込む必要があります。
五、IIC協定
1. マスターはスレーブにバイトを送信します
2. マスターは複数のバイトをスレーブに送信します
3. スレーブはマスターにバイトを送信します
4. スレーブはマスターにバイトを送信します
6、si7006チップを分析する
1. si7006 スレーブアドレス ===> 0x40
2. si7006の内部ブロック図
3. チップの初期化方法(アドレス/値) ===> 0xE6 0x3A
4. 温度と湿度のアドレスの収集方法
5. si7006 チップのマニュアルの取得プロトコルを検索します。
6. データをアナログに変換する方法 ===> 式
1. 内部ブロック図
2. スレーブアドレス
:0x40
スレーブアドレス + 読み取り: 0x40 << 1 | 1
スレーブアドレス + 書き込み: 0x40 << 1 | 0
3. 温湿度コマンドコードを読み取る
相対湿度を測定し、ホストモードを維持します: 0xE5
相対湿度を測定します。ホスト モードは維持しません: 0xF5
相対温度を測定し、ホストモードを維持します: 0xE3
相対温度を測定します。ホスト モードは維持しません: 0xF3
以前に測定した湿度から、温度値を読み取ります: 0xE0
ユーザーレジスタ1の書き込み: 0xE6
ユーザーレジスタ 1 の読み取り: 0xE7
七、スタートの合図
スタート信号===スレーブアドレス+ライト===ACK===コマンドコード===ACK===スタート信号===スレーブアドレス+リード===ACK===遅延機能== ===== ==== 上位 8 ビット === ACK === 8 ビット NACK === 停止信号
八、換算式
測定値はアナログ値であるため、ADCを使用してデジタル値に変換する必要があります
湿度換算式 H = %RH - 125*RH_Code / 65536 -6
温度換算式 T = 175.72*Temp_Code / 65536 - 46.85
9、初期化値
レジスタ初期化値: 0011 1010 ====== 0x3A
[7][0] == 00: 測定精度
[6] == 0: 電源ステータス: 0 = 高レベル、1 = 低レベル