完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我最近读了很多书,而且自从我之前尝试过I2C之后,XC8已经熟练了一些。我花了直到早上7点,然后又花了一整天的时间阅读、google、编程/重编程,并且只尝试在I2C上找到的所有东西。我花了太多的时间和精力,只为头痛而努力。我理解I2C的概念相当好,但不能为我的生活让它做任何事情。我曾尝试过16F1508次和18F13K22,可能还有其他的过去。现在我很高兴能够写一个值到一个24LC32的EEPROM与16F1508的任意地址。我也有一个MCP7940M RTC,我想在某个时候使用。如果有人能帮我在I2C的执行过程中保持头脑清醒,我会非常感激。到目前为止我的代码是:
|
|
相关推荐
19个回答
|
|
|
两件事。首先,我建议先让它不中断地工作(在你能走路之前不要运行)。其次,在SDA和SCL行上附加一个逻辑分析器或者最好是一个作用域,看看发生了什么。虽然你可以在没有作用域或LA的情况下完成这项工作,就像几十年前我有头发时所做的那样。示波器至少有一个月的薪水。
|
|
|
|
|
|
好的,我看到了几件事,对于初学者,看起来你的芯片地址是向后的,看数据表,应该是1010A2A10和R/W,所以如果你的EEPROM连接到111的地址,那么对于写命令应该是10101110,对于读命令应该是10101111。我们的重新启动命令,您通常用R/W位设置再次发送芯片地址,因此10101111。您还需要2字节的数据地址。所以您的读取序列应该是:START10101110ADDRESS HIGHADDRESS LOWRESTART101111DATAOUTSTOPI,暂时不会受中断的影响,它应该可以正常工作把它们拿出来。如果这不起作用,检查EEPROM A2:A0布线的芯片地址。还要记住,如果以前没有使用过eeprom,那么您可能会返回0x00或0xff,这是正确的,但是看起来它不工作。逻辑分析器在调试I2C时工作得很好,即使只是看到被轮询的ACK行告诉您在正确的轨道上。一旦它工作了,还要记住的另一件事情是在等待任务完成的同时避免使用无限while循环。发送,系统就挂断了。最好在循环中包含超时,希望这有帮助!
|
|
|
|
|
|
嗨,这行代码在我看来很可疑,r/w位被设置(读取)了,并且它是在开始之后的第一个I2C事务。(除了注释和变量1010/0101不同之外?)I2CSend(0b01110101);//1010是LSB,并且芯片选择0:2都高,r/w=0I可能被误解,如果这样道歉,无论如何……我发现使I2C启动和运行的最佳方法是在调试中逐层建立例程,即发送启动然后发送地址,停止I2C标志上的代码,以及看看是否有ACK或NACK。如果其他的都是浪费时间。你获得地址确认,重复,但是数据被添加为有效负载,每个字节得到一个ack,然后你检入调试。仅仅写下全部内容并期望弹出到最后,是错误发现的噩梦。工作方法,我发现我可以针对我编写的每个应用程序调整它,但是一旦有了基本原理,让它工作起来就相当轻松了。
|
|
|
|
|
|
你应该放弃I2C。SPI是如此简单和快捷。它确实使用了更多的引脚。
|
|
|
|
|
|
哦,不!
|
|
|
|
|
|
你为什么要检查I2C程序中的SEN?当然,你的意思是检查SSP1STAT1.S而不是SSP1CON2.SEN!请参阅描述这些位之间差异的数据表。您可以检查SSP1STAT1.S,或者只检查SSP1IF标志。另外,“它不工作”也不是对发生什么的非常清晰的描述。如果你能用一个范围来检查这些信号,也许会发布跟踪,那会有什么了不起呢?启动条件发生了吗?如果不是,引脚可能不正确设置,如果是,那么你还有另一个问题。地址是写的吗?如果是,也许地址有错误,如果没有,你有不同的问题,等等……你在I/O引脚上看到了什么?顺便说一下,最简单的方法是按照数据表中的顺序……以下是来自数据表的指令:21.6.6.4典型传输序列:1。用户通过设置SSPXCON2寄存器的SEN位来生成启动条件。2。SSPXIF由硬件设置,在开始时完成。3。SSPXIF由软件清除。4。MSSPX模块将在任何其他操作发生之前等待所需的开始时间。5。用户加载来自地址的SSPXBUF进行传输。6。地址是移出SDAX引脚,直到所有8位传输。SSPxBUF一写到7,传输就开始了。MSSPx模块从从设备转移ACK位,并将其值写入SSPxCON2寄存器的ACKSTAT位。MSSPX模块通过设置SSPXIF位9在第九时钟周期的末尾产生中断。用户用八位数据加载SSPXBUF。数据移出SDAX引脚,直到所有8位传输。MSSPx模块从从设备转移ACK位,并将其值写入SSPxCON2寄存器的ACKSTAT位。对于所有传输数据BYTES.13,重复步骤8~11。用户通过设置SSPXCON2寄存器的笔或RSEN位来生成停止或重新启动条件。一旦停止/重新启动条件完成,就会产生中断。
|
|
|
|
|
|
我想如果没有逻辑分析仪或作用域,调试就有点困难。有什么建议买得起吗?我不确定是否有一个中断处理程序是严格必要的,所以我已经试过了没有或没有。我还把地址翻转了几遍,以便确定。我猜我昨晚就倒退了。早些时候我尝试过我的LED闪光灯(如果)!AccSTAT)但不管我在I2CSTART()之后发送了什么地址,它总是闪闪发光。我想我可以看一下针来判断ACK是高还是低,我的LED灯亮起来了吗?
|
|
|
|
|
|
参见http://www. Salea.com/。逻辑4在这一点上是你最好的朋友…
|
|
|
|
|
|
如果我做了这样的事情,LED会显示什么!检查EEPROM是否连接。但只能用于控制字节。地址的高位字节的第二个实例永远不会确认,即使我删除了控制字节的Flash序列。
|
|
|
|
|
|
禁用外围设备、配置和启用它作为最后一步总是一个好主意。我建议更改MSSP安装步骤以遵循该顺序。
|
|
|
|
|
|
这里有一个写得很好的关于I2C的教程。我已经成功地使用这个教程编写了一些简单的驱动程序,虽然我不是一个sw专家。xxw_u http://ww1.micro..com/downloads/en/DeviceDoc/i2c.pdf我知道有合适的方式插入链接,但是目前我想不起来了。如果全部失败,只需键入“http://..”等到浏览器中即可。祝你好运。
|
|
|
|
|
|
我已经读过无数遍了。我只是希望他们有一个XC8,因为我不知道汇编,我不知道如何将其翻译成C。我改变了我的MSSP设置,但我仍然在控制字节之后得到ACK,不管地址和SCL/SDA是否连接到任何东西。我使用2.2K的拉普拉。地址的高位字节仍然不提供ACK或NAK,代码似乎从那点什么也不做。
|
|
|
|
|
|
好的,我更详细地研究了您正在做的事情,并且意识到您需要在I2CSend()调用之后等待SSP1IF进行断言。只有到那时,ACKSTAT才有效。如果您花一些时间认真研究数据表中的图21-28和21-29,您应该开始看到事物如何流动,以及您的软件必须如何与MSSP交互。忘记使用中断,只是轮询这件事,直到你觉得舒服。然后再忘记使用中断…-另一个想法:你的代码在公共汽车上倾倒的所有怪事可能会严重地混淆奴隶。在全功率循环之后开始测试(或者花一些时间理解如何对序列进行位操作以保证总线是静止的——搜索论坛以获得示例和讨论)。-严重的,得到沙雷。
|
|
|
|
|
|
1。发送启动2。发送地址低比特为0,指示写入7位地址为前7位/ 3。检查是否ACK位是Low,如果它不是没有这个地址存在的芯片。4。在1-3工作之前不要继续工作。注意,如果EEPROM处于丢失状态,则可能需要对其进行电源循环。闪烁和LED?使用调试器吗?没有范围,没有调试器试图用茶匙舀出浴盆。有可能,但要花很长时间。
|
|
|
|
|
|
一些应用程序说明可能是有用的是AN989AN734 C。
|
|
|
|
|
|
哦,我知道那会是“有趣的”。关于阿杜伊诺“它只是工作”,但我知道有很多事情在幕后进行。我更喜欢PIC的挑战,但我学到的每一件新的事情是头痛的时间/天/周,然后突然点击。我会在今晚晚些时候订购沙龙,但我相信这会有一个学习曲线。我真的希望有同样的在线课程或在我的一般领域的人,可以坐下来与我,无论是亲自或视频电话或类似谁可以陪我通过这些事情的一些。这并不是说我不感激我在这里得到的所有帮助。
|
|
|
|
|
|
嗯,特别是在PIC10/12/16的情况下,你几乎是在裸露的金属上,这使得吞吐数据表变得至关重要。我一直觉得Microchip在文档方面做得很好(虽然我希望更新的数据表仍然有一个索引),但是确实没有捷径:它需要学习。它确实需要时间(尤其是对于像MSSP这样的外围设备),直到事情单击为止,这就是为什么图21-28等金块非常有帮助,并且通常导致“哦,是的!”一会。别走捷径,也不知道在阿尔多伊诺人群中到底是怎么回事。我相信Gooligum教程仍然是从头开始学习的最佳教程。只有当你了解事物如何真正工作时,像MCC/Ont/MLA之类的奇特玩具才会出现。跳过基本原理会导致许多“不能得到工作岗位”。
|
|
|
|
|
|
我是如何开始的。我会阅读教程,并用手键入示例以获得它的感觉。然后,我会玩它,改变它,打破它,然后修复后阅读更多。当我有一个工作实例时,我倾向于学习得更好,我可以通过摆弄它来弄清楚什么是什么。我还没有在XC8中发现I2C,所以我觉得我在黑暗中摸索。我已经使用MCC或其他任何一个,因为这是一个捷径。我想在等待我的逻辑4到达这里时,我会试试SPI。也许这将有助于我更好地理解串行通信一般。
|
|
|
|
|
|
我怀疑如果你在检查阿克斯塔特之前等待SSP1,你可能会取得一些进步。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475 浏览 0 评论
5795 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1125浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1098浏览 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 21:59 , Processed in 1.037946 second(s), Total 108, Slave 91 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
466