1

我有一个基于 PIC24 的系统,配备 24 位、8 通道 ADC(谷歌 MCP3914 评估板了解更多详细信息......)。我已经让电路板对所有 8 个通道进行采样,将数据存储在 512x8 缓冲区中,并在缓冲区已满时使用 USB 模块将数据传输到 PC(由不同的中断完成)。

唯一的问题是,当 MCU 正在传输数据时(UART 传输中断的优先级高于 ADC 读取中断),ADC 没有采样数据,因此会出现数据丢失(采样率约为 500 采样/秒)。有什么办法可以防止这种数据丢失?也许一些多任务处理?

4

3 回答 3

2

只需将信息发送到 UART 寄存器,无需使用中断,而是通过轮询位 TXIF

while (PIR1.TXIF == 0);
TXREG = "the data you want to send";

这同样适用于 ADC 转换:如果您使用中断来启动/停止转换,只需轮询所需的位 (ADON) 即可。

TX 位和 AD 位可能因您的 PIC 而异。

这可以防止 MCU 进入中断服务程序并丢失 3-4 个样本。

于 2014-06-12T18:16:29.820 回答
1

在 PIC24 中,可以为中断分配 8 个优先级之一。看一下《家庭参考手册》中的对应章节-> http://ww1.microchip.com/downloads/en/DeviceDoc/70000600d.pdf

于 2015-01-12T01:05:45.307 回答
1

或者,您可以使用非常方便的 DMA 通道。您可以将 ADC 配置为使用 DMA,因此采样和馈送缓冲区不会使用任何 CPU 时间,我相信 UART 也是如此。

http://ww1.microchip.com/downloads/en/DeviceDoc/39742A.pdf http://esca.atomki.hu/PIC24/code_examples/docs/manuallyCreated/Appendix_H_ADC_with_DMA.pdf

于 2017-02-21T08:42:45.237 回答