打印
[PIC®/AVR®/dsPIC®产品]

关于PIC单片机的I2C协议

[复制链接]
2302|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Rain_King|  楼主 | 2014-4-23 10:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Rain_King 于 2014-4-24 09:19 编辑

      用PIC单片机普通的IO口模拟I2C通信,怎么每次通信的时候,会使单片机整个电压都会有10mv变化的脉冲啊......这个是什么原因???还是需要特殊的端口才可以???
沙发
huangxz| | 2014-4-23 22:42 | 只看该作者
总线工作的时候,电源电压如果会有脉冲,说明电源的负载能力比较差

使用特权

评论回复
板凳
yewuyi| | 2014-4-24 08:21 | 只看该作者
1、IIC总线需要的电流很小,如果这都能明显影响你的电源,你必须要好好检查。
2、检查IIC总线的两个上拉电阻,不建议太小,一般在1K~10K之间,多数都是用4.7K即可。

使用特权

评论回复
地板
tozxq| | 2014-4-24 08:28 | 只看该作者
PIC单片机用普通脚模拟I2C总线时,请注意下IO口的输入输出切换,因PIC单片机输出是推挽方式,所以接受数据时需将引脚切换为输入方式,这里是与51单片机不同的地方,当未切换时,PIC单片机接收状态输出为高电平,相当于总线短接到VCC,这时,其它总线IC发送数据对地拉低脉冲,等于短路脉冲,所以可能会过流影响供电电压。

使用特权

评论回复
5
Rain_King|  楼主 | 2014-4-24 09:14 | 只看该作者
huangxz 发表于 2014-4-23 22:42
总线工作的时候,电源电压如果会有脉冲,说明电源的负载能力比较差

这或许是个原因......

使用特权

评论回复
6
Rain_King|  楼主 | 2014-4-24 09:15 | 只看该作者
yewuyi 发表于 2014-4-24 08:21
1、IIC总线需要的电流很小,如果这都能明显影响你的电源,你必须要好好检查。
2、检查IIC总线的两个上拉电 ...

或许真的是电源负载的问题,上拉电阻是必须有的.....

使用特权

评论回复
7
Rain_King|  楼主 | 2014-4-24 09:17 | 只看该作者
tozxq 发表于 2014-4-24 08:28
PIC单片机用普通脚模拟I2C总线时,请注意下IO口的输入输出切换,因PIC单片机输出是推挽方式,所以接受数据 ...

输入输出方向我肯定改了的,我就问下,如果设置方向后,需要延时多长时间就可以立马使用....比如我设置输出,赋值为高电平,这两个语句中间需要延时么.....

使用特权

评论回复
8
huangxz| | 2014-4-24 10:26 | 只看该作者
Rain_King 发表于 2014-4-24 09:17
输入输出方向我肯定改了的,我就问下,如果设置方向后,需要延时多长时间就可以立马使用....比如我设置输 ...

主要看是何种方式驱动,如果是推挽的,时间可以不计,如果是oc的,还是要点时间的,这个要实测比较好

使用特权

评论回复
9
ayb_ice| | 2014-4-24 11:32 | 只看该作者
总线中间串个电阻,如果还有变化,说明电源不行

使用特权

评论回复
10
Rain_King|  楼主 | 2014-4-24 11:48 | 只看该作者
huangxz 发表于 2014-4-24 10:26
主要看是何种方式驱动,如果是推挽的,时间可以不计,如果是oc的,还是要点时间的,这个要实测比较好 ...

PIC单片机有设置这种方式么.....我怎么没有见到,不是只有输入输出,B口是否上拉,模拟还是数字....就只有这个吧...

使用特权

评论回复
11
Rain_King|  楼主 | 2014-4-24 11:50 | 只看该作者
ayb_ice 发表于 2014-4-24 11:32
总线中间串个电阻,如果还有变化,说明电源不行

中间串了一个100欧姆的,还有我单片机是工作在5.0V,从机只能工作在3.8V,所以在I2C通信的时候,不知道这个是否也是个原因.....

使用特权

评论回复
12
ayb_ice| | 2014-4-24 11:58 | 只看该作者
Rain_King 发表于 2014-4-24 11:50
中间串了一个100欧姆的,还有我单片机是工作在5.0V,从机只能工作在3.8V,所以在I2C通信的时候,不知道这 ...

如果PIC输出只能是推挽模式,那确实有问题,会引起太电流

理论上电流表(5-3.8)/100R

使用特权

评论回复
13
Rain_King|  楼主 | 2014-4-25 08:37 | 只看该作者
ayb_ice 发表于 2014-4-24 11:58
如果PIC输出只能是推挽模式,那确实有问题,会引起太电流

理论上电流表(5-3.8)/100R

昨天我把PIC换成了硬件I2C通信,中间的那个电阻去掉,上拉换成5V,可是结果依然有脉冲.....总觉得某个地方有问题....

使用特权

评论回复
14
tozxq| | 2014-4-25 09:17 | 只看该作者
Rain_King 发表于 2014-4-24 09:17
输入输出方向我肯定改了的,我就问下,如果设置方向后,需要延时多长时间就可以立马使用....比如我设置输 ...

写两个子程序,一个IO口置高电平,将IO口设置为输入即可;一个IO口置低电平,将IO口设置为输出,在将IO口写低电平;I2C总线程序调用这两个子程序即可,至于停顿时间,一般加几个空指令即可

使用特权

评论回复
15
ayb_ice| | 2014-4-25 09:23 | 只看该作者
方法1:

上拉还是要的,然后在SCL,SDA中间串K级电阻,简单,但可能对通信速度有些影响

2:
去NXP官网,有官方的解决方法,专门解决电平不同的器件之间的连接

使用特权

评论回复
16
Rain_King|  楼主 | 2014-4-25 15:42 | 只看该作者
tozxq 发表于 2014-4-25 09:17
写两个子程序,一个IO口置高电平,将IO口设置为输入即可;一个IO口置低电平,将IO口设置为输出,在将IO口 ...

这个方法还真是犀利,换句话说,就是数据线用两个,一根输出,一根输入对吧.......哎,脚位不够啊,现在脚位刚好,一个不多,一个不少......

使用特权

评论回复
17
Rain_King|  楼主 | 2014-4-25 16:09 | 只看该作者
ayb_ice 发表于 2014-4-25 09:23
方法1:

上拉还是要的,然后在SCL,SDA中间串K级电阻,简单,但可能对通信速度有些影响

我去官网好好找找....貌似好东西很多

使用特权

评论回复
18
tozxq| | 2014-4-26 08:07 | 只看该作者
Rain_King 发表于 2014-4-25 15:42
这个方法还真是犀利,换句话说,就是数据线用两个,一根输出,一根输入对吧.......哎,脚位不够啊,现在 ...

误解我的意思了,我I2C总线自然使用两个IO口,指示总线置高电平时设置为输入即可,因外部有上拉。

使用特权

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

本版积分规则

个人签名:努力学习,积极回复,只为申请版主.......

29

主题

784

帖子

4

粉丝