OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2724|回复: 10

IIC分时复用

[复制链接]

10

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2019-2-21
在线时间
16 小时
发表于 2019-3-3 16:08:49 | 显示全部楼层 |阅读模式
想在单片机同一个IIC接口连接多个相同的传感器,由于传感器地址相同,所以无法用设备地址来进行区分,请问有什么办法或者是说加什么芯片,可以使得IIC分时复用,分别传输这些传感器的数据呢?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-3-3 16:32:03 | 显示全部楼层
再用俩io 模拟个不就可以了
回复 支持 反对

使用道具 举报

7

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2017-9-14
在线时间
50 小时
发表于 2019-3-3 17:11:01 | 显示全部楼层
如果传感器有使能引脚,那么就把所以I2C总线上传感器的使能引脚都引出来接到主机上面,主机想要读取哪个传感器的数据就使能该传感器,其余的传感器就关掉,但是这样主机就要使用很多的引脚来控制传感器的使能和失能,所以需要用到GPIO扩展器。
回复 支持 反对

使用道具 举报

10

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2019-2-21
在线时间
16 小时
 楼主| 发表于 2019-3-3 21:30:31 | 显示全部楼层
112chang222 发表于 2019-3-3 17:11
如果传感器有使能引脚,那么就把所以I2C总线上传感器的使能引脚都引出来接到主机上面,主机想要读取哪个传 ...

gpio扩展器是什么,有人告诉我可以将SCL线都连上,将SDA线分时复用,这样可以吗?
回复 支持 反对

使用道具 举报

10

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2019-2-21
在线时间
16 小时
 楼主| 发表于 2019-3-3 21:31:19 | 显示全部楼层
nashui_sx 发表于 2019-3-3 16:32
再用俩io 模拟个不就可以了

我的传感器很多,有8个,用模拟IO口也很麻烦
回复 支持 反对

使用道具 举报

10

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2019-2-21
在线时间
16 小时
 楼主| 发表于 2019-3-3 21:33:06 | 显示全部楼层
112chang222 发表于 2019-3-3 17:11
如果传感器有使能引脚,那么就把所以I2C总线上传感器的使能引脚都引出来接到主机上面,主机想要读取哪个传 ...

可以用模拟多路开关吗?
回复 支持 反对

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-3-3 21:58:18 | 显示全部楼层
一般IIC设备都有备用地址可供选择, 你确定没有吗?
回复 支持 反对

使用道具 举报

7

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2017-9-14
在线时间
50 小时
发表于 2019-3-3 22:22:05 | 显示全部楼层
haimianying 发表于 2019-3-3 21:30
gpio扩展器是什么,有人告诉我可以将SCL线都连上,将SDA线分时复用,这样可以吗?

所有传感器都挂在同一个I2C总线上,主从机数据都往总线上面发,然后分时复用就行了,就是同一个时间只开启一个传感器,其余传感器都关掉。有专门的GPIO扩展芯片,对于你用的八个传感器,一个3、8线译码器就行了。
回复 支持 反对

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3448
金钱
3448
注册时间
2017-7-4
在线时间
869 小时
发表于 2019-3-4 00:03:18 | 显示全部楼层
haimianying 发表于 2019-3-3 21:31
我的传感器很多,有8个,用模拟IO口也很麻烦

楼主这个担心多余了,80个传感器都不是问题,只要IO够用,把模拟时序抽象出来,通过函数指针的方式调用,再多的模拟总线都不担心。楼主这个情况最好的办法就是用8组IO模拟i2c,用一根复用不是不可以,但比用8根复杂得多了,加多路复用开关,通过开关切换,稳定性差、速度慢不说,还增加成本。本人最多试过模拟21根i2c总线操作AT24C16(24C16地址线不能用的)。
参考模拟i2c总线:https://blog.csdn.net/qq_20553613/article/details/78878211
回复 支持 反对

使用道具 举报

0

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
286
金钱
286
注册时间
2018-12-31
在线时间
12 小时
发表于 2019-3-4 08:46:33 | 显示全部楼层
其余传感器都关掉。有专门的GPIO扩展芯片,对于你用的八个传感器,一个3、8线译码器就行了。
回复 支持 反对

使用道具 举报

10

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2019-2-21
在线时间
16 小时
 楼主| 发表于 2019-3-4 09:35:16 | 显示全部楼层
112chang222 发表于 2019-3-3 22:22
所有传感器都挂在同一个I2C总线上,主从机数据都往总线上面发,然后分时复用就行了,就是同一个时间只开 ...

嗯嗯,谢谢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 21:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表