完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
伙计们,在花了几个小时试图发现为什么我的I2C程序不能工作之后,我发现为什么它不能工作但是无法解决。正如你们在下面的代码中可以看到的,代码将只写和读I2C内存以检查I2C是否正常工作。写函数工作得很好,因为它在所有步骤之后退出。但是在读取功能中,我看到的LCD的最后一条消息是“WRITE_FA”,意思是它成功地发送了24C64的基本地址,但是随后一切都冻结了。当我移除行“.(BF==0)”时,LCD打印“READ”,意思是它读取存储器(不知道数据读取是对还是错),但是在下一步显示“READ”时冻结,因此,它在停止信号过程中冻结。同样,在代码中挖掘,当我编写I2C_Master_Wait()不检查ACKEN位时,程序最终退出Read函数,但随后,Wrote数据和read数据不匹配。所以:1)我不应该等待缓冲满位设置(意味着数据被接收),然后读取SSPBUF?为什么高炉是清澈的?2)确认顺序有什么问题?为什么它永远不会完成清理钻头的顺序?这是I2C头:我使用PIC18F2550@ 20MHz晶体振荡器。这个I2C头与PIC16F86A一起工作得很好(很明显,带有正确的寄存器)。
|
|
相关推荐
16个回答
|
|
|
I2C_Master_Start();//发出I2C开始信号I2C_Master_Write(0xA0);//通过I2C(设备地址+W)发送字节,检查这里的ACK。在您写完EEPROM之后将很忙,直到写完之后才响应。您必须阅读。没有写工作的证据。你从不检查ACKs和NACK。
|
|
|
|
|
|
如果你看到我的头文件,你会知道我已经在做了。在它做任何事情(START信号,写一些东西或其他东西)之前,它检查忙碌的操作位。它只是在从24C64:c接收到数据之后才被卡住。
|
|
|
|
|
|
没有ACK。MSSP繁忙是一个不同的问题。1。您必须始终检查ACK以确保I2C设备响应您的命令。2。你应该检查ACK Aon你发送的所有字节。3。EEPROM本身在写开始后不会响应
|
|
|
|
|
|
哦,是的。你是指阿克斯塔特比特吗?
|
|
|
|
|
|
对。如果奴隶要求的话,应该是低的。高它没有。
|
|
|
|
|
|
在读取时仍然坚持等待设置BF位。如果我删除检查BF的行,那么程序在发送停止信号时停止。甚至检查ACKSTAT:c也没有改变。
|
|
|
|
|
|
如果(阿克斯塔);= 0){返回一个错误,从芯片没有响应。}您需要在发送每个字节之后进行响应。当读取时,您需要对每个字节进行ACK。
|
|
|
|
|
|
对不起,如果它似乎是我的新手,但是为什么ACK序列在最后一个命令中失败?为什么它在每一个步骤之前工作,一旦它离开I2C.MigMistaWalk例程?如果是ACK问题,那么自从第一次发送命令就不会失败吗?如果我放置一个if代替一段时间,那么ACK序列可能更长,并且在调用if语句之前没有完成,因此即使没有,我也会得到一个错误,对吗?为什么当我要求数据时,它就在发传真?我很难理解它,因为同一个头用PIC16F86A:C工作得非常精细。
|
|
|
|
|
|
只要字节被发送,ACK位就可用。你不是在等待结果。你得到了结果。当你接收数据时,你必须确认从机。如果你不是,那么通信就会失败。
|
|
|
|
|
|
嗯,至少我是用数据表来对付奴隶的。我会在每次发送数据后再进行一个ACKSTAT验证,然后告诉你我得到了什么。
|
|
|
|
|
|
这个想法是,如果没有接收到ACK,就再次尝试读取内存。检查此程序,程序再次停止信号。
|
|
|
|
|
|
我在那里吗?我能看到发生了什么事吗?你第一次拿到这些小包吗?(注意,如果有问题,你的GOTO代码将被卡住,PIC将被锁定)你看到你的最后一个职位的BF检查吗?你被困在哪一个高炉里?是否返回一个字节或2个字节?你使用的是谁的I2C图书馆?你肯定行吗?取消所有的LCD和长延时,所以你的代码只是代码中的问题。你在使用调试器吗?或者液晶显示器是调试器?
|
|
|
|
|
|
对不起,忘记一些细节。BF检查是在头(第一个职位,第二个代码)。我被困在BF检查内部例程I2C.MigMista只读。I2C主机应该只返回一个字节。我会把它放在液晶显示器上,是的,LCD是我的DeBugg,一旦我没有其他条件,就没有条件购买。长延时和LCD只用于清理。我写这封信是为了纪念。一旦例程退出(没有陷入任何泥潭),我就会删除所有内容,只专注于阅读例程。是的,我知道代码会被锁定。因为我在抱怨,我不担心。记住:我不是美国人,所以我的英语可能会在某个时候出错。
|
|
|
|
|
|
好的,把接收到的字节放在LCD上会返回错误的数据。我发送“U”(HEX 0x55),但是我在LCD中所得到的是一个正方形(看起来像是符号)。所以,现在似乎一切都不对了。哈哈哈!
|
|
|
|
|
|
甚至没有阿克斯塔特
|
|
|
|
|
|
对于那些寻找答案的人来说,这里是我所做的工作库:找不到错误,从零开始。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1122浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 00:17 , Processed in 1.198167 second(s), Total 102, Slave 85 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
809