今までの経緯と問題
同じデバイス(エンコーダ)を複数使用する際にアドレスが被ってしまうためマルチプレクサを使用しています。
試しにエンコーダ1つをカウンタを通してI2C接続できるかどうか試してみたのですが
マルチプレクサのチャンネル変更がうまくいっていないのかうまくつながりません。
プログラム
python
1#!/usr/bin/python 2# TCA9548A I2C multiplexer 3# I2C Address: 70 through 77 4# Channel: 0 - 7 5 6import smbus 7 8# class for the I2C switch---------------------------------------------------- 9class I2C_SW(object): 10# init________________________________________________________________________ 11 def __init__(self,name,address,bus_nr): 12 self.name=name 13 self.address=address 14 self.bus_nr=bus_nr 15 self.bus=smbus.SMBus(bus_nr) 16 17# Change to i2c channel 0..7__________________________________________________ 18# ここだけ使ってます 19 def chn(self,channel): 20 self.bus.write_byte(self.address,2**channel) 21 22# block all channels read only the main I2c ( on which is the address SW)_____ 23 def _rst(self): 24 self.bus.write_byte(self.address,0) 25 print self.name,' ','Switch reset' 26 27# read all 8 channels__________________________________________________________ 28 def _all(self): 29 self.bus.write_byte(self.address,0Xff) 30 print self.name,' ','Switch read all lines' 31 32# define the usual sensor 0X70 bus 1__________________________________________ 33 34SW=I2C_SW('I2C switch 0',0X70, 1) 35SW.chn(1) 36# to enable a channel : SW_chn(channel number - here 0 to 7) 37# 1チャンネルにエンコーダを接続しています 38# check with i2cdetect y -1 (if bus_nr=1) 39 40# ここまでがマルチプレクサプログラム 41# ここから下がエンコーダプログラム 42 43#!/usr/bin/env python3 44# coding: utf-8 45 46import struct 47import signal 48from time import sleep 49 50i2c = smbus.SMBus(1) 51addr = 0x70 52# マルチプレクサのアドレス 53 54VALUE_HI = 0x00 55VALUE_LO = 0x01 56RESET = 0x02 57 58 59def Get_encoder_value(): 60 temp = i2c.read_word_data(addr, VALUE_HI) 61 return struct.unpack(">H", struct.pack("<H", temp))[0] 62 63 64def Encoder_Reset(): 65 i2c.write_byte_data(addr, RESET, True) 66 print("clear value") 67 68 69if __name__ == "__main__": 70 signal.signal(signal.SIGINT, signal.SIG_DFL) 71 print(struct.unpack(">h", struct.pack(">H", Get_encoder_value()))[0]) 72# ここでエンコーダ値が表示されます
これを実行した結果 エンコーダを回しても0と表示されます
配線・回路について
動作確認・詳細
エンコーダのプログラムはリンク内容
マルチプレクサのプログラムはページ一番下
を参考にしました。
マルチプレクサを介さない場合カウンタプログラムは正常に機能します。
また、アドレス0×70は接続確認できたのでマルチプレクサも接続できていると思います。
どなたかわかる方いらっしゃればよろしくお願いいたします。
Raspberry pi 3 model B(搭載OS:ubuntu mate)
カウンタ:ADRSZRE ゼロワン ロータリーエンコーダ拡張基板
マルチプレクサ:I2C Multiplexer TCA9548A
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。