求助:完全相同的芯片,用不同SCL线实现IIC通信

[复制链接]
3517|8
 楼主| ericyang001 发表于 2011-9-18 14:50 | 显示全部楼层 |阅读模式
背景:(新手做项目)若干个相同的芯片,共用SDA线,用不同的SCL线连接到pic单片机.
问题:
我的程序里定义:#define    SCL1   TRISAbits.TRISA0
                     #define    SCL2   TRISAbits.TRISA2

然后IIC部分程序直接用IO模拟IIC操作SCL,SDA.
                   操作之前SCL = SCL1或SCL2或其他,后来想想这个语句只是把SCL1的方向寄存器值赋给SCL,操作SCL并没有改变TRISAbits.TRISA0的值,不知道要怎么办了!!:@
因为芯片有8个,不可能写8个一样的IIC程序,那太傻了,求助高人
airwill 发表于 2011-9-18 19:42 | 显示全部楼层
从理论上讲, 这个方法可行的. 应该不会有太大的问题.
但是你这个什么芯片, I2C 是可以多个从芯片直接放在同一个总线里的.
ahgao 发表于 2011-9-18 21:27 | 显示全部楼层
这个需求本身说明系统设计不合理。但是实在没办法也只好将就处理了。
假设你用P2口作为8路SCL,可以如下处理。

char sclmask;

sclmask = 0xfe; //不使用的SCL为1.
P2 = sclmask; //设置相应的SCL为0
P2 = 0xff; //设置相应的SCL为1(其实所有的都是1)

操作不同的端口,设置不同的sclmask值就好了。

评分

参与人数 1威望 +1 收起 理由
ericyang001 + 1 我很赞同

查看全部评分

 楼主| ericyang001 发表于 2011-9-18 21:39 | 显示全部楼层
[quote]从理论上讲, 这个方法可行的. 应该不会有太大的问题.
但是你这个什么芯片, I2C 是可以多个从芯片直接放在同一个总线里的.
airwill 发表于 2011-9-18 19:42 [/quote
谢谢!不过这个芯片无法用硬件更换地址的,不像有些芯片有A0,A1,A2的管脚控制硬件地址!
 楼主| ericyang001 发表于 2011-9-18 21:50 | 显示全部楼层
这个需求本身说明系统设计不合理。但是实在没办法也只好将就处理了。
假设你用P2口作为8路SCL,可以如下处理。

char sclmask;

sclmask = 0xfe; //不使用的SCL为1.
P2 = sclmask; //设置相应的SCL为0
P2 = 0xff; // ...
ahgao 发表于 2011-9-18 21:27

谢谢!!!是个不错的方法!
ahgao 发表于 2011-9-18 22:38 | 显示全部楼层
不客气,如果MCU引脚有限,也可以用4051的模拟开关或者74138之类的解码器扩展。
szshawn2010 发表于 2011-9-18 23:04 | 显示全部楼层
本帖最后由 szshawn2010 于 2011-9-18 23:08 编辑

oldda 发表于 2011-9-19 09:03 | 显示全部楼层
不同的IC的地址不一样,应该公用一个SC\SD就可以了吧。
weizheng07 发表于 2011-9-19 12:48 | 显示全部楼层
I2C读写的过程中操作clk = 1或0的时候写成一个 OperateCLkIO(Num,Flag) ,这个函里如果是8个clk,直接设定一个个端口啥的不就行了
跟行列键盘扫面差不多,你能要求键盘稍描的几个输出都是p1的么?不能的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

43

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部