打印

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

[复制链接]
2528|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的管脚控制硬件地址!

使用特权

评论回复
5
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

谢谢!!!是个不错的方法!

使用特权

评论回复
6
ahgao| | 2011-9-18 22:38 | 只看该作者
不客气,如果MCU引脚有限,也可以用4051的模拟开关或者74138之类的解码器扩展。

使用特权

评论回复
7
szshawn2010| | 2011-9-18 23:04 | 只看该作者
本帖最后由 szshawn2010 于 2011-9-18 23:08 编辑

使用特权

评论回复
8
oldda| | 2011-9-19 09:03 | 只看该作者
不同的IC的地址不一样,应该公用一个SC\SD就可以了吧。

使用特权

评论回复
9
weizheng07| | 2011-9-19 12:48 | 只看该作者
I2C读写的过程中操作clk = 1或0的时候写成一个 OperateCLkIO(Num,Flag) ,这个函里如果是8个clk,直接设定一个个端口啥的不就行了
跟行列键盘扫面差不多,你能要求键盘稍描的几个输出都是p1的么?不能的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

43

帖子

1

粉丝