見出し画像

I2Cとは?

ザクっとしか知らなかったけど
しっかりと学びたいと思う。

今まで知ってたイメージだと
I2C(アイスクエアシーと読む)は


実際のフライトコントローラー表記

VCC
GND
DA
CL

と4カ所接続して使うもので、
特徴としては
ここから延長ケーブル引っ張って先っぽに
タコ足配線して複数の機器を扱えるという便利なもの
といったイメージ

SDA(データ信号)と、
SCL(クロック信号)
で動作している。

ではなぜ複数タコ足配線しても
機器を見分けて認識できるのだろう?
以下

USBと同じようにホスト側とデバイス側に分かれているという原理。
I2Cインタフェースでは、親機となるマスターノードがクロックを出力し、子機となるスレーブノードはマスターのクロックに合わせてデータを送受信します。このようにマスターが主管となって通信を行うことで、一つの親機マスタノードのSCL、SDA信号線に、複数台のスレーブノードを接続することが容易に出来るようになります。

ボクにもわかる I2C インタフェース方式

なるほどわかりやすい。

I2Cの機器の特徴

・I2C機器にはあらかじめI2Cアドレスが設定されている
(8番から119番まで)
(または書き換えることもできる)

機器側はそのアドレスを入力してやらないと認識しない
(同じアドレスのもを重複して使うことはできない)

アドレスとは?

これがまた
表記方法がわかりにくい。

表記してあるのは16進数(例:0x??)(0xが頭についているのが特徴)
(他にもI2Cアドレスの表記方法には、10進数表記、16進数表記、2進数表記、7ビット表記、8ビット表記などがあるらしい)

例えば今回使用するパーツには16進数で表記してあり、
機器に認識させるには10進数で入力しなければいけない

変換方法

例題
① 0x10
② 0x20
③ 0x30

この表記を10進数へ変換せよ
というミッションだった場合。

この自動計算機に打ち込め
https://hogehoge.tk/tool/number.html

これが一番早い。

暗算の考え方としては
16進数は10は16だから16
20だと16が2回分だから32
30だと16x3で48
といった感じ

中途半端な数字だと計算できないから
そのときは計算機を使えばいい。

回答
① 16
② 32
③ 48

Ardupilot内でどう使ったかと言うと
Lider距離センサー搭載時

RNGFND1_ADDR

のところで10進数で打ち込み
無事に認識しました。

16進数もっと知りたい方はこちら記事も書きました。

たいへん勉強になりました。

この記事が気に入ったらサポートをしてみませんか?