[技术问答] N76E003 io 口模拟I2C问题,有些疑问想请教一下

[复制链接]
2184|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. //读1个字节
  2. unsigned char I2C_Receive_Byte()
  3. {
  4.   unsigned char BitCnt=8,IIC_RX_Data=0;
  5.   unsigned char temp=0;
  6.   I2C_SDA_HIGH;           //读入数据 设置SDA 口为输入
  7.   P11_Quasi_Mode;
  8.   do
  9.   {
  10.                         I2C_SCL_lOW;
  11.                         delay_10us();  
  12.                         IIC_RX_Data=_crol_(IIC_RX_Data,1);   //数据左移一位
  13.                         BitCnt--;          
  14.                         I2C_SCL_HIGH;
  15.                         delay_10us();
  16.      if(I2C_SDA==1)
  17.        IIC_RX_Data = IIC_RX_Data|0x01;  //低位置1
  18.      else
  19.        IIC_RX_Data = IIC_RX_Data&0x0fe; //低位清0            
  20.    }
  21.    while(BitCnt);
  22.    I2C_SCL_lOW;
  23.    P11_PushPull_Mode;
  24.    return IIC_RX_Data;
  25. }



以上P11_Quasi_Mode 改成P11_Input_Mode ,通信就不成功?
734774645 发表于 2018-8-27 19:46 | 显示全部楼层
准双向模式驱动能力不够,所以距离近。
 楼主| hsxs 发表于 2018-8-27 19:50 | 显示全部楼层
734774645 发表于 2018-8-27 19:46
准双向模式驱动能力不够,所以距离近。

应该是这样子的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

96

帖子

0

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