打印
[STM32]

PCF853的问题

[复制链接]
1189|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
NE5532|  楼主 | 2015-1-15 10:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ayb_ice| | 2015-1-15 10:23 | 只看该作者
这不奇葩,正确的结果只有一个,错误的现象千千万

使用特权

评论回复
板凳
NE5532|  楼主 | 2015-1-15 10:26 | 只看该作者
这问题卡了两天了,首先PCF8563的I2C器件地址是A3,A2。这个大家知道。

然后I2C协议是每一个地址与数据传输会产生应答,在发送完PCF8563的写地址后我接着发寄存器地址,但是没有应答,相当于说我的数据写不进去。

那么第一点是有应答排除硬件故障,那么是软件问题,但是这个不能理解的是,发寄存器地址就无法产生应答了(用示波器可以看到高电平非应答),程序接下来运行又到了一个器件地址有应答,接着发寄存器地址还是没有应答。总之我的寄存器地址与数据写不进去,很奇葩

使用特权

评论回复
地板
NE5532|  楼主 | 2015-1-15 10:29 | 只看该作者

u8 tx_iic_byte( u8 f_data)
{
    u8 i;
    for(i=0;i<8;i++)                              //发送一个字节数据
    {
      if((f_data&0x80)==0x80)
       i2c_sda_outphi;
      else
       i2c_sda_outplo;
      
       i2c_scl_outphi;
       __no_operation();
       __no_operation();
       f_data<<=1;
       i2c_scl_outplo;
      
    }
    i2c_sda_mode_in;                              //PCF8563发来ACK
    i2c_scl_outphi;
    i2c_delay2us();
    if(i2c_sda_inpu==1)
    i=PCF8563_NACK;
    else
    i=PCF8563_ACK;
    i2c_delay2us();
    i2c_scl_outplo;
    i2c_sda_mode_out;
    return i;

}
程序在这儿。这是我的发送数据用的,IO口模拟I2C

使用特权

评论回复
5
ayb_ice| | 2015-1-15 10:56 | 只看该作者
先把时钟延时搞长点

使用特权

评论回复
6
ayb_ice| | 2015-1-15 11:01 | 只看该作者
NE5532 发表于 2015-1-15 10:29
u8 tx_iic_byte( u8 f_data)
{
    u8 i;

上完整点的程序

使用特权

评论回复
7
mohanwei| | 2015-1-15 11:26 | 只看该作者
毫无疑问是软件问题,示波器做这个不合适,淘宝买个二三十块的Saleae,串口/I2C/SPI/CAN/OneWire等低速总线一网打尽

使用特权

评论回复
8
mohanwei| | 2015-1-15 11:35 | 只看该作者
建议参考我发过的一个I2C底层驱动:https://bbs.21ic.com/icview-809308-5-1.html
重新移植一下……

这是当年手册+逻辑分析仪每个bit波形都核对过的,这么多种类的IC都没发现过有问题。

使用特权

评论回复
9
cainiao_123| | 2015-1-15 14:37 | 只看该作者
i2c_scl_outphi;
    i2c_delay2us();

读取ACK信号,试试改在5US后...

使用特权

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

本版积分规则

个人签名:††††看NE5532教学视频,炼就工程技术研发功力†††††††††† 《跟我学DC-DC电源管理技术》【从只会写软件成长为软硬兼施】 《印刷电路板设计进阶》【12年一线设计经验大放送】 《印刷电路板设计基础》【新手别怕,老工程师带你入门!】

159

主题

13769

帖子

584

粉丝