你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

求助关于STM8硬件I2C使芯片重写地址的问题

[复制链接]
伸手不及放手为空 提问时间:2018-1-15 10:46 /
本帖最后由 伸手不及放手为空 于 2018-1-15 10:49 编辑

目前使用一款MCP4728芯片,但他只有4个通道,而我需要扩展到8通道,也就是要在添加一个芯片,此时便需要对其中一片重写地址。
如下方图所示,需要在其第2字节第8位之后和ACK之前,将LDAC置0
那么现在的问题是倘若程序为:   
//上方程序省略
while(!I2C_CheckEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));  
I2C_SendData(0x61); //第2字节
GPIO_WriteLow(GPIOC,GPIO_PIN_3);
while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));    //停留此处,不再向下执行
I2C_SendData(0x66);//第3字节
//下方程序省略
那么第2字节数据发完后,将LDAC引脚置0,此时其ACK便会被影响,程序卡住。若GPIO_WriteLow(GPIOC,GPIO_PIN_3);这一句不写程序正常向下执行。请问有什么办法能使发送完第8位数据后,同时LDAC置0,而不影响ACK。
望大神们能指点一二。
QQ截图20180115104228.png QQ截图20180115104239.png


收藏 1 评论4 发布时间:2018-1-15 10:46

举报

4个回答
伸手不及放手为空 回答时间:2018-1-15 11:44:04
顶起
七哥 回答时间:2018-1-25 10:12:56
本帖最后由 toofree 于 2018-1-25 10:44 编辑

现在有个问题,你的“I2C_SendData(0x61); //第2字节”,这行程序执行后,到了第几位了?
LDAC必须到第8位正脉冲结束之后,并且在第9位的ACK位时钟拉高之前,由高置低才行。
建议用示波器看一下真实波形,到底LDAC在哪位来的

可以先读一下地址看能不能行,如果读不行的话,写肯定更不行了。
傲游截图20180125100920.jpg
傲游截图20180125100930.jpg

这是从Microchip官网下载的手册
22187E.pdf (2.87 MB, 下载次数: 1)

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

wolfgang 回答时间:2018-1-25 12:41:21
IIC的基本操作是:

读地址,获取数据
写地址,写地址数据;

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

无薪税绵 回答时间:2018-1-25 21:59:30
我觉得有可能是地址位不正确,或者数据未正常发出。
建议使用示波器,看看波形是否正确。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版