完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
因此,我有一个设备设置为I2C主机,其余的设备上的总线设置为奴隶。主设备向每个从设备发送命令,从设备执行此任务(运行电机、PID、重要时间敏感代码)。我想知道奴隶何时完成了它的任务。我唯一能看到的方法是不断地让主轮询从机,但是这会产生一个问题,因为每次主轮询从机时,都会触发从机上的i2c中断,并且短时间内停止运行电机代码。有什么办法可以解决这个问题吗?我在考虑将所有设备设置为主设备,所以当每个设备完成任务时,它可以发送数据,而不需要轮询。问题在于,我担心总线上的数据与试图同时通信的设备发生冲突。解决这个问题的正确方法是什么?也许问题不像我想象的那么严重,而且执行PID控制的电机代码可能需要时间来中断,并回复给主机,而不会产生很多问题?这似乎是一个标准场景,其中许多不同的设备运行任务,并在完成任务后返回报告,这通常如何解决?
|
|
相关推荐
14个回答
|
|
|
有单独的PIN信号吗?
|
|
|
|
|
|
HMM,一个中断驱动的从属代码不应该中断电机处理,或者不超过一些USEC……否则,是的,您可以使用另一个PIN来“请求注意”。事实上,我确实使用了数据本身——通常只有主机可以驱动数据低:所以,当奴隶请求注意时,它会为一些人拉低数据,然后主人会轮询它。我只有一个奴隶在公共汽车上请求注意…
|
|
|
|
|
|
哎哟,我忘了提及我正在使用的硬件已经构建好了,并且我没有能力连接到从机上的任何引脚。所以,为忙信号添加一个新的PIN对我来说是不可能的。所以,正如我前面提到的,不幸的是,我不能使用额外的PIN。所以你认为仅仅让从机用一个中断来回复主机,并不能使从机延迟足够的时间,从而搞砸一些简单的PID电机控制?
|
|
|
|
|
|
…或者做I2C EEPROM做的事情。让奴隶在忙碌的时候忽略I2C总线,所以主机的任何访问都会得到NACK。
|
|
|
|
|
|
这不是I2C规范的一部分,但是它已经发展成一个忙碌的I2C从站将NAK它的从站地址。对于大多数PIC实现来说,I2C从站ISR在地址匹配上需要NAK。如果即使允许I2C中断发生也是不可接受的,那么从机也可以屏蔽I2C中断或者将其地址更改为主机同意不选择的地址。编辑:荒山亮,你真是太棒了!但你从星期五开始发布,我星期四还没有完成,所以我落后你了。
|
|
|
|
|
|
用秒拍你丹:)编辑:尼尔用秒打我。
|
|
|
|
|
|
好,在我看来,正确的操作过程是主机必须设置超时,因为在从机运行时间敏感代码时它不会在轮询时得到响应。当从机运行时间敏感代码时,我需要禁用从机上的i2c然后,当完成它的时间敏感代码时,我需要重新启用i2c,它最终将响应主机,并且一切应该正常进行。这一切都正确吗?
|
|
|
|
|
|
好,在我看来,正确的操作过程是主机必须设置超时,因为在从机运行时间敏感代码时它不会在轮询时得到响应。当从机运行时间敏感代码时,我需要禁用从机上的i2c然后,当完成它的时间敏感代码时,我需要重新启用i2c,它最终将响应主机,并且一切应该正常进行。这一切都正确吗?
|
|
|
|
|
|
|
|
|
嗨,这里是通用PIC32论坛,所以我假设您正在运行PIC32。电机控制代码中时间关键部分需要多长时间,需要多长时间运行一次?所有PIC32设备都具有7级中断优先级,高于以优先级0运行的主程序。我将在比I2C从机优先级高的中断中运行时间关键电机控制代码。这样,即使I2C从机已经响应了传输,电机控制代码wi将优先考虑并替换I2C。启用时钟伸展的从机。由于I2C将时钟信号放在连接到每个从机的线路上,并且时钟伸展是协议的一部分,所以I2C通信中没有时间关键的东西。您还可以尝试其他不响应的建议丁。这可以通过禁用I2C模块来实现,或者通过设置I2COV接收溢出位,如果设置了溢出位,大多数PIC I2C设备将NAK它们的地址。在禁用从设备之前,应该测试从设备尚未开始接收,检查S位是否==0。如果禁用le I2C中断,I2C硬件将确认地址并接收字节。当可重启中断处理时,中断和接收的字节仍然存在,并且可能在再次启用I2C从中断时得到服务。如果延迟过长,从硬件将遇到接收溢出,在继续之前必须清除。附图中有一些I2C信号。绿色痕迹是I2C数据,褐色是SCL。红色脉冲是从属ISR中的时间,蓝色是主ISR。在开始下一次传输之前的长蓝色主中断是由于主代码中的一个错误。Mysil,
|
|
|
|
|
|
时钟拉伸是I2C协议中的好事情。好的方面是缓慢的从设备能够使I2C时钟以可接受的速率运行,坏的方面是lavescan时钟无限期地伸展。系统管理总线(SMBus)协议解决了I2C协议的许多问题,但是正确实现更复杂。
|
|
|
|
|
|
时钟延长的另一个问题,特别是在SMBus水平上,是时间。公共汽车是免费的,直到奴隶释放它。所以,如果你有多个奴隶,你不能在等车的时候把他们全部解雇或在公共汽车上使用其他东西。
|
|
|
|
|
|
Z470:只是好奇:任务有多有限?有时,电机控制就像:“保持1234转,直到我告诉你不同的。”你能说说为什么任务“结束”吗?TKS
|
|
|
|
|
|
是的,我的观点也是如此。PID代码可能会慢一点,但没有电机“应该疯了”…
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1121浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
872浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 18:41 , Processed in 1.064559 second(s), Total 98, Slave 81 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
533