找回密码
 立即注册
查看: 154|回复: 4

STC8H8K64U TSSOP20 软件IIC驱动mcp4725a0t不稳定

[复制链接]
  • TA的每日心情
    开心
    2024-3-29 16:24
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    2

    主题

    12

    回帖

    90

    积分

    注册会员

    积分
    90
    发表于 2024-3-24 05:28:41 | 显示全部楼层 |阅读模式
    本帖最后由 woodzn 于 2024-3-24 23:23 编辑

    STC8H8K64U TSSOP20 软件IIC驱动mcp4725a0t不稳定

    驱动代码如下,硬件IIC会直接卡住无法使用,软件IIC时而有用时而失效,
    失效时无论IIC写数据什么,DAC输出都是0

    软件IIC具体实现:SDA和SCL如原理图定义
    1. #define D 10
    2. void I2C_Init(void)    //初始化IIC
    3. {
    4. }
    5. void I2C_Start(void) //起始信号
    6. {
    7.         SDA = 1;
    8.         SCL = 1;
    9.         delay_us(D);       //大于4.7us
    10.         SDA = 0;           //SCL高电平期间,SDA发生负跳变
    11.         delay_us(D);       //大于4us
    12.         SCL = 0;
    13.         delay_us(D);
    14. }
    15. void I2C_SendByte(unsigned char temp)  //发送数据
    16. {
    17.         unsigned char i;
    18.         for(i=0;i<8;i++)
    19.         {
    20.                 SDA = (bit)(temp&0x80);
    21.                 temp <<= 1;
    22.                 SCL = 1;         //SCL高电平期间传送数据,并保持稳定
    23.                 delay_us(D);     //大于4us
    24.                 SCL = 0;         //SCL低电平期间数据发生改变
    25.                 delay_us(D);
    26.         }
    27. }
    28. bit I2C_ACKR(void)  //接收应答信号
    29. {
    30.         bit flag;
    31.         SCL = 1;          //SCL高电平期间接收数据
    32.         SDA = 1;          //读取数据前置一
    33.         delay_us(D);
    34.         flag = SDA;
    35.         SCL = 0;
    36.         delay_us(D);
    37.         return(flag);
    38. }
    39. void I2C_Stop(void)  //终止信号
    40. {
    41.         SCL = 1;
    42.         delay_us(D);       //大于4us
    43.         SDA = 1;           //SCL高电平期间,SDA发生正跳变
    44.         delay_us(D);       //大于4.7us
    45.         SDA = 0;
    46. }
    47. unsigned char I2C_ReceiveByte(void)  //接收数据
    48. {
    49.         unsigned char i;
    50.         unsigned char temp = 0x00;
    51.         for(i=0;i<8;i++)
    52.         {
    53.                 SCL = 1;         //SCL高电平期间接收数据
    54.                 SDA = 1;         //读取数据前置一
    55.                 delay_us(D);     //大于4us
    56.                 temp |= SDA;
    57.                 SCL = 0;         //SCL低电平期间数据发生改变
    58.                 temp <<= 1;
    59.                 delay_us(D);     //大于4us
    60.         }
    61.         return(temp);
    62. }
    63. void I2C_ACKS(bit A)        //发送应答信号
    64. {
    65.         if(A == 1)
    66.                 SDA = 1;
    67.         else
    68.                 SDA = 0;
    69.         SCL = 1;            //SCL高电平期间传送应答信号
    70.         delay_us(D);
    71.         SCL = 0;
    72.         delay_us(D);
    73. }
    复制代码


    mcp4275接线

    mcp4275接线

    引脚定义

    引脚定义

    mcp4275驱动带

    mcp4275驱动带
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    15 小时前
  • 签到天数: 82 天

    [LV.6]常住居民II

    13

    主题

    320

    回帖

    718

    积分

    荣誉版主

    热心市民

    积分
    718
    发表于 2024-3-24 23:43:25 | 显示全部楼层
    本帖最后由 晓飛飛 于 2024-3-24 23:47 编辑

    之所以I2C卡住,有可能是发送的器件地址不正确,导致芯片无ACK响应。


    你把A0引脚上的上拉电阻R2拆掉,或者传输硬件地址改为0xC2试试
    因为R2使A0为高电平,使得器件地址变为了0xC2,和你的程序中写入的地址不一致。
    一般来说A0直接连接VCC或者GND都可以,不要搞那么多没用的电阻。
    A0接VCC时,写入地址为0xC2
    A0接GND时,写入地址为0xC0

    睁开眼睛做场梦~~~
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-29 16:24
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    2

    主题

    12

    回帖

    90

    积分

    注册会员

    积分
    90
     楼主| 发表于 2024-3-25 08:00:36 | 显示全部楼层
    晓飛飛 发表于 2024-3-24 23:43
    之所以I2C卡住,有可能是发送的器件地址不正确,导致芯片无ACK响应。

    这里的电阻R2和R3仅仅只是在原理图上设计,实际焊接时仅焊接一个,我实际板子焊接的是r3也就是A0接GND,地址是0xc0,但是我在实际使用时,向0xc0写两个字节数据,不管数据是什么,DAC输出都为0,如果地址错误,那DAC输出为2.5V
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    15 小时前
  • 签到天数: 82 天

    [LV.6]常住居民II

    13

    主题

    320

    回帖

    718

    积分

    荣誉版主

    热心市民

    积分
    718
    发表于 2024-3-25 15:49:33 | 显示全部楼层
    P1.4和P1.5是否设置成了开漏输出模式?
    睁开眼睛做场梦~~~
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-29 16:24
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    2

    主题

    12

    回帖

    90

    积分

    注册会员

    积分
    90
     楼主| 发表于 2024-3-27 22:19:50 | 显示全部楼层
    目前已经找到原因了,软件iic可以使用了,硬件iic还是不能使用
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-29 16:11 , Processed in 0.072052 second(s), 47 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表