我有一个基于PIC24的系统配备了24位,8通道模数转换器(谷歌MCP3914评估板的更多细节...)。我已经让电路板对所有8个通道进行采样,将数据存储在512x8缓冲区中,并在缓冲区已满时使用USB模块将数据传输到PC (这是通过不同的中断完成的)。
唯一的问题是,当MCU正在传输数据时(UART传输中断比ADC读取中断具有更高的优先级),ADC不会对数据进行采样,因此会有数据丢失(采样率约为500样本/秒)。有什么方法可以防止这种数据丢失吗?也许是多任务处理?
发布于 2014-06-13 02:16:30
只需通过轮询TXIF位而不使用中断,即可将信息传输到UART寄存器
while (PIR1.TXIF == 0);
TXREG = "the data you want to send";这同样适用于ADC转换:如果您使用中断来启动/停止转换,只需轮询所需的位(ADON)即可。
根据您的PIC,TX位和AD位可能会有所不同。
这防止MCU进入中断服务例程并丢失3-4个采样。
发布于 2015-01-12 09:05:45
在PIC24中,可以为中断分配8个优先级中的一个。请参阅《系列参考手册》-> http://ww1.microchip.com/downloads/en/DeviceDoc/70000600d.pdf中的相应章节
发布于 2017-02-21 16:42:45
或者,您可以使用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
https://stackoverflow.com/questions/24189309
复制相似问题