打印
[技术问答]

N76E003 io 口模拟I2C问题,有些疑问想请教一下

[复制链接]
2073|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hsxs|  楼主 | 2018-8-27 19:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用IO口模拟I2C的时候,将IO口设置双向模式,一切都很好用;
但是现在想传感器距离加长到5M,
发现单单从IO口出来到传感器线端(未接I2C器件)的电平用示波器检测发现电平不对
后来觉得可能是IO口驱动力不足???
所以想问一下,将IO口设置位推挽输出,要读数据的时候再将IO口设置为输入模式;
就有一个问题,就是将IO口设置为输入模式时,IO口的电平是怎么样的(假设从机还没发送数据)。
沙发
hsxs|  楼主 | 2018-8-27 19:39 | 只看该作者
我看过手册了,IO口设置成输入模式的时候电平由外部器件或者上下拉电阻提供一个确定的电平,我的I2C传感器上已经有上拉电阻,
按理来讲是不是已经是高电平了;但是我的程序还是跑不起来器件

使用特权

评论回复
板凳
hsxs|  楼主 | 2018-8-27 19:40 | 只看该作者
//读1个字节
unsigned char I2C_Receive_Byte()
{
  unsigned char BitCnt=8,IIC_RX_Data=0;
  unsigned char temp=0;
  I2C_SDA_HIGH;           //读入数据 设置SDA 口为输入
  P11_Quasi_Mode;
  do
  {
                        I2C_SCL_lOW;
                        delay_10us();  
                        IIC_RX_Data=_crol_(IIC_RX_Data,1);   //数据左移一位
                        BitCnt--;          
                        I2C_SCL_HIGH;
                        delay_10us();
     if(I2C_SDA==1)
       IIC_RX_Data = IIC_RX_Data|0x01;  //低位置1
     else
       IIC_RX_Data = IIC_RX_Data&0x0fe; //低位清0            
   }
   while(BitCnt);
   I2C_SCL_lOW;
   P11_PushPull_Mode;
   return IIC_RX_Data;
}



以上P11_Quasi_Mode 改成P11_Input_Mode ,通信就不成功?

使用特权

评论回复
地板
734774645| | 2018-8-27 19:46 | 只看该作者
准双向模式驱动能力不够,所以距离近。

使用特权

评论回复
5
hsxs|  楼主 | 2018-8-27 19:50 | 只看该作者
734774645 发表于 2018-8-27 19:46
准双向模式驱动能力不够,所以距离近。

应该是这样子的

使用特权

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

本版积分规则

12

主题

96

帖子

0

粉丝