查看: 5833|回复: 15

[求助] 812 i2c的应用

[复制链接]

该用户从未签到

105

主题

190

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1367
最后登录
2024-12-31
发表于 2022-1-26 11:46:25 | 显示全部楼层 |阅读模式
本帖最后由 chuandaoxy 于 2022-1-26 11:53 编辑

在网上找到zlg的 drive 包,进行测试对8574的读写测试,反复测试都没有点亮led
8574的a0-a1-a2是这样设定的,1-0-0  根据手册物理地址是0x21, 写寄存器是0x42

确认测试板有电,物理连接没有问题,上拉电阻也有,可是led就是不亮,用的是812硬件i2c

大家帮忙看看那里问题,谢谢
void I2CWriteByte (uint32_t uiSubAddr, uint8_t ucData)
//void I2CWriteByte (uint8_t ucData)
{
    while (!(LPC_I2C->STAT & 1));                                       /* 等待空闲    */
    LPC_I2C->MSTDAT  = I2C_SLV_WRITE;
    LPC_I2C->MSTCTL  = (1 << 1) | (1 << 0);                             /*·发送起始位           */

    while (!(LPC_I2C->STAT & 1));                                       /* 等待操作                  */
    LPC_I2C->MSTDAT  = uiSubAddr;
    LPC_I2C->MSTCTL  = (1 << 0);                                        /* 发送字地址                  */

    while (!(LPC_I2C->STAT & 1));                                       /* 等待操作                      */
    LPC_I2C->MSTDAT  = ucData;
    LPC_I2C->MSTCTL  = (1 << 0);                                        /* 发数据                 */

    while (!(LPC_I2C->STAT & 1));                                       /* 等待操作                   */
    LPC_I2C->MSTCTL  = (1 << 2) | (1 << 0);                             /* 发送停止              */
}

int main (void)
{
   // uint8_t i;

    SystemInit();                                                      

    I2CInit();

    while (1) {
                        I2CWriteByte(0x42,0x00);       
                        myDelay(5000);
                        I2CWriteByte(0x42,0xff);
       myDelay(5000);                       
    }
}

最佳答案

本帖最后由 安 于 2022-1-26 15:56 编辑 楼主,我看应该是地址不对的问题,应该用0x42。如果测试还是不行,SDA和SCL有没有接上拉电阻。
8574.png
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2022-1-26 13:49:00 | 显示全部楼层
    本帖最后由 安 于 2022-1-26 15:44 编辑

    楼主硬件地址不对,他是七位的,你现在用的地址上需要左移1位,另外注意8574和8574A的地址是不一样的。正常应该是写入地址是0x42;读取地址是0x42 | 0x01。一定要按照正确的操作方法。先发送start信号,再发送硬件地址,再发送页内地址,再发送写入数据。
    读取的时候,先发送start信号,再发送硬件地址,再发送页内地址,再发送start信号,再发送硬件设备地址|0x01先。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    105

    主题

    190

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1367
    最后登录
    2024-12-31
     楼主| 发表于 2022-1-26 14:02:47 | 显示全部楼层
    楼上说的对,我一直迷惑于这个7位地址
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 1849 天

    连续签到: 4 天

    [LV.Master]伴坛终老

    203

    主题

    3万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    112633
    最后登录
    2025-7-22
    发表于 2022-1-26 14:32:26 | 显示全部楼层
    调用的时候要使用7位地址,也就是你说的0x21,而不是0x42
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    105

    主题

    190

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1367
    最后登录
    2024-12-31
     楼主| 发表于 2022-1-26 14:33:23 | 显示全部楼层

    地址按0x21的波形

    while (1) {
                            I2CWriteByte(0x42,0x00);       
                            myDelay(100);
                            I2CWriteByte(0x42,0xff);
           myDelay(100);                       
        }

    bx.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 1849 天

    连续签到: 4 天

    [LV.Master]伴坛终老

    203

    主题

    3万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    112633
    最后登录
    2025-7-22
    发表于 2022-1-26 14:34:04 | 显示全部楼层
    安 发表于 2022-1-26 13:49
    楼主硬件地址不对,他是七位的,你现在用的地址上需要左移1位,另外注意8574和8574A的地址是不一样的。正常 ...

    想起以前在TB上买的8574的小模块,特么挂羊头卖狗肉,说的是8574,结果芯片上是8574T……
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2022-1-26 15:00:42 | 显示全部楼层
    本帖最后由 安 于 2022-1-26 15:58 编辑

    不好意思,我看成RTC芯片了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    105

    主题

    190

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1367
    最后登录
    2024-12-31
     楼主| 发表于 2022-1-26 15:29:00 | 显示全部楼层
    我将测试project上传,大家看看,谢谢

    I2C_8574.rar

    116.66 KB, 下载次数: 3, 下载积分: 威望 1

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2022-1-26 15:51:00 | 显示全部楼层
    本帖最后由 安 于 2022-1-26 15:56 编辑

    楼主,我看应该是地址不对的问题,应该用0x42。如果测试还是不行,SDA和SCL有没有接上拉电阻。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    105

    主题

    190

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1367
    最后登录
    2024-12-31
     楼主| 发表于 2022-1-26 16:09:42 | 显示全部楼层
    加了,测量电压是3.1V,Vcc,我把硬件接到launghpad,是正常的,电压是3.3v,电压差0.2不会导致不亮吧
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-25 22:21 , Processed in 0.112794 second(s), 32 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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