エンジニア風味 (Engineer-taste)

電子系エンジニアのメモ帳

MATLABのArduinoアドオンを用いてセンサ情報を取得する(6)

(5)の続きです。

データが取れたら、変換します。
tmp275によると、データはMSBから送られてきて、先頭から8ビットが温度の整数部になります。
例えば先頭8ビットが'0001 1001'だったら25℃で、以下のビットが温度の小数部です。
なので、MATLABでは、

temperature = (double(bitshift(int16(data(1)), 4)) +...
    double(bitshift(int16(data(2)), -4))) * 0.0625

で温度が求まります。

最後はデバイスをクリアして、

% Clean Up
clear tmp275 a;%デバイス消去

終わりです。

おまけですが、プルアップ抵抗について書きます。
I2Cは何もしていないときはデータ(SDA)もクロック(SCL)もHighになっている必要があります。
(何かしようとするときに引きおろされるイメージです)。
ですので、
f:id:engineer-paju:20181224112342p:plain
こんな感じにデータ線、クロック線を大きめの抵抗でHigh(この場合は5V)に釣る必要があります。
(tmp275のデータシートにも「プルアップせよ」とあります)。
ですが、この場合においてはプルアップ抵抗は必要ありません。

a=arduino('COM6','Uno','Libraries','I2C');
tmp275=i2cdev(a,'0x48');

で、「I2Cで使います」を宣言したところで、自動的にプルアップが入るようになっているのです。