使用C2000和simulink访问多个I2C传感器

8次浏览(过去30天)
凯尔Goodrick
凯尔Goodrick 2019年2月12日
回答: 说bensebaa2021年3月23日
你好,
我试图使用TI C2000微控制器访问使用I2C的外部adc的数据。这个ADC有多个通道,所以我希望能够从所有这些检索数据。现在我有代码设置从一个通道拉数据,它工作得很好。它可以与ADC通信,检索数据,并在matlab范围内实时显示(使用外部模式)。我甚至可以用手动开关来切换通道,改变I2C TX块的数据命令。
然而,我不知道如何在这些通道之间周期性地循环,并同时看到它们。我看过 这个例子使用函数调用对多个TX块进行排序,但它仍然只使用一个接收块,因为似乎来自两个传感器的数据同时到来。在我的情况下,我需要为每个通道向ADC发送单独的命令(例如,通道8为255,通道4为223),并在每个命令后读取ADC发送的值。我尝试用函数调用将子系统中的多个TX和RX块链接在一起,但当我尝试时,我无法从任何通道获得数据。
如果有人有这样的例子,或者有什么方向的建议,我会非常感激。我也很好奇这些块是如何工作的(我实际上很惊讶于给出的例子是如何工作的)。每个块是否重复触发?如果是这样,是每抽样率一次还是其他速度?RX块是否在尝试读取之前等待TX块完成,反之亦然?另外,当您将这些块放入子系统中时,这种情况如何变化?是每一个都去一次,然后转移到下一个子系统,还是有更多的子系统?
我已经附上了我的两次尝试的文件,让我知道,如果你看到在序列函数调用版本中出现了什么问题。当我探查sda行时,我可以看到一些动作,所以它正在做一些事情,但它并不完全在那里。
提前谢谢你,
凯尔

答案(3)

说bensebaa
说bensebaa 2021年3月23日
凯尔Goodrick
我想知道你是否解决了这个问题?如果是,请告诉我如何在不增加开关和不改变数据长度的情况下从不同通道获取数据?
谢谢。
问候,
B说

马纳尔Chilapur
马纳尔Chilapur 2019年2月13日
你好,
请您参考一下样板。 c28x_i2c_eeprom_interrupt ”。 从这个例子模型可以观察到C28x硬件中断块的使用。此块用于I2C Rx中断。使用这种方法更实用,因为在I2C Tx和I2C Rx之间存在延迟,这取决于I2C总线速度、交换的比特数和从机的响应时间等因素。因此,在back2back中使用Tx和Rx时,我们需要在读取数据之前使用while循环考虑这种延迟。否则,可以在Rx上设置中断,以便我们可以在Master接收I2C数据时做其他工作,并在完成后通知我们。使用此方案读取所有ADC通道的几种方法是从ISR内部发送后续通道请求,并在单独的缓冲区中捕获接收到的数据。您也可以Rx FIFO能够读取数据从所有通道在同一时间。
HTH,
问候,
马纳尔C
2的评论
马纳尔Chilapur
马纳尔Chilapur 2019年2月14日
嗨,凯尔,
请通过以下方式与我们联系:
同时,您可以考虑在CCS中导入项目以进一步调试。
这是一个关于如何从MATLAB中导入CCS项目的链接。
您也可以参考示例“c28x_i2c_eeprom_interrupt”来研究硬件配置窗格中的I2C配置。
HTH,
问候,
马纳尔C

登录评论。


马纳尔Chilapur
马纳尔Chilapur 2019年2月13日
你好,
您也可以查看示例模型'c28x_i2c_sensor'的实现,在这里我们对Tx和Rx操作进行排序,以便在当前执行步骤时间读取前一步时间发送的数据请求的数据。因此,我们读取延迟了一个采样时间的数据,w.r.t发送到从设备的数据读取请求。请确保采样时间持续时间足够让输入数据在读取前到达主服务器。
HTH,
问候,
马纳尔C

世界杯预选赛小组名单社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!世界杯预选赛小组名单

开始狩猎!

Baidu
map