I2C

Python

会社にはI2Cアナライズできるオシロがある(超便利)。
I2Cのタイミングとアナライズ結果(通信データの内容)が自分の家でも解析できたらラズパで便利だろうなと思う。そこで青島(チンタオ)製を購入。バッタものらしきは1,000円からでもある。あまり安いと苦労するのは中国製にありがちなので少し奮発して高めなものを。
結構は秀逸だった。ソフトのできもいい。今回の使用用途であれば十二分だ。解析されたコードもOKだ。これがないと意味ないけど。

I2Cの7bitアドレス

0xa0を設定とあたっが、アナライズでは0x50?
これが理解できなかったが、あれこれやってみて理解した。0x67の結果は(これは会社のファームの関係)は0xCEだった。納得。買ってよかったな一品。以下は会社のオシロと青島の波形。

ラズパイでの実験

以下で接続確認する。デバイスのアドレスが見れる。
$i2cdetect -y 1
—- pythonでの温度センサの接続例 —
●熱電対(MCP9600専用IC使用)

<pre class="lang:python decode:true">#!/usr/bin/python
# -*- coding: utf-8 -*-

import smbus
import time
i2c = smbus.SMBus(1)
address = 0x67
cnt = 1
while True:
    block = i2c.read_i2c_block_data( address, 0x00, 2 )
    temp = ( block[0] &lt;&lt;8 | block[1] )
    if( temp &gt;= 4096 ):
         temp -= 8192
    print(cnt,":","%2.2f" % (temp * 0.0625))
    cnt+=1 
    time.sleep(2)




 

switch sience LM75B
※13bitのデータはLSB側から3bitはデータではないので全体(int)として右に5ビット右シフト

#!/usr/bin/env python
import smbus
import time
i2c = smbus.SMBus(1)
addr=0x48

def getTemp():
    block = i2c.read_i2c_block_data( addr,0x00,2)
    val = block[0]<<8
    val = val | block[1]

    if(val >= 0x7fff):
        val = val - 0xffff
    result = ((val >>5) * 0.125)
    return result

while 1:
    raw = getTemp()
    rt = raw
    print("{0:.2f}".format(rt))
    time.sleep(1)
No tags for this post.
タイトルとURLをコピーしました