※本記事には広告・アフィリエイトリンクが含まれます。
同じ部品の資料なのに、アドレスが0x38とも0x70とも書いてある。どちらを使うの?
I2C(アイスクエアシー)は、半導体チップどうしの通信に使う方式です。今回のADE7953というチップでは、7ビットの機器アドレスが0x38、その末尾に書き込みを示す0を付けた8ビットの送信データが0x70。表している範囲が違うんだね。
ビットは、0か1で表す一桁の情報です。0xは、その後ろの数が16進数だという印。16進数は0~9とA~Fを使って数を表す書き方です。
宛先の後ろに、読み書きの向きを一桁足す
アナログ・デバイセズの公式資料AN-1367では、ADE7953の機器アドレスを0x38と説明しています。
同じ資料が示すのは、宛先の7ビットに、書き込みなら0、読み出しなら1を付ける仕組み。0と1の並びにすると、違いが見えてきます。
| 何を表すか | 0と1の並び | 16進数表記 |
|---|---|---|
| 7ビットの機器アドレス | 0111000 | 0x38 |
| 末尾に書き込みの0を加えた8ビット | 01110000 | 0x70 |
| 末尾に読み出しの1を加えた8ビット | 01110001 | 0x71 |
後ろへ一桁加えるので、元の0x38へ単純に1を足す計算ではありません。表の読み出しの値は、資料の規則に沿って計算したものです。
0x38のチップとは別に、0x70のチップがいるわけではない。 ここが分かると、同じ資料に二つの数が出てきても、すぐに誤植だと考えずに読めます。
プログラムへ入れる値は、使う命令の説明まで見る
では、必ず0x70を指定するのかというと、そこは別の確認です。使うプログラムの命令が、7ビットの機器アドレスを受け取り、読み書きの一桁を内部で加える作りかもしれません。
先に宛先だけを渡すのか、読み書きの一桁を加えた値まで渡すのか。命令の引数、つまり渡す値の説明で確かめてね。今回の資料でも、実装する機器の方式を理解するよう注意されています。
手元の説明が「7-bit address」と書いているなら、まず宛先の7ビットを求めている、という読み方の入口です。
I2Cで液晶や温度センサーをつなぐ例まで読みたい人には、工学社の『TWELITEではじめるカンタン電子工作』も関連本です。TWELITEは無線電子工作向けの機器シリーズ。確認した販売品は2018年版の中古で、出版社はI2Cの説明と接続例を含む第6章の目次を公開しています。
出版社には2021年の改訂版もあるため、購入時には版と掲載環境を見て選んでね。2018年版の機器やソフトの手順が、そのまま今の環境へ使えるという紹介ではありません。
楽天で2018年版『TWELITEではじめるカンタン電子工作』を探す
書誌・目次:工学社・2018年版、2021年改訂版
二つの数を見つけたら、どちらが正しいかで止まらず、「宛先だけ? 向きの一桁も入っている?」へ。まず表している範囲をそろえると、入力する値を調べる次の一歩が見えてきます。