c - 使用较短的延迟读取 PIC 的 ADC 模块的效果(在 PIC C 中)

标签 c delay pic adc

我正在研究 PIC16F887,我的任务主要基于 adc 读数(8 位)。 有 10 个不同的模拟输入,因此逐个读取它们需要相当长的时间。 时钟为 20Mhz,adc 唯一允许的设备频率为 Fosc/32(当然对于 20mhz 时钟),结果为 TAD=1.6us

准确的 adc 读数应该需要 10 TAD(由于 8 位读数),短暂的 16us。

问题来了; 例如,如果我使用 10us 会发生什么。我想要更小的延迟。我认为 PIC 的 ADC 模块使用逐次逼近。这是否意味着首先读取最高有效位?我认为前 4 位的准确性足以满足我的计算需求。但是剩余位的值是多少?他们会是零吗?或身份不明,可能是任何级别?

提前致谢

最佳答案

阅读 PIC16F887 手册的 ADC 部分。查找有关如何使用 ADC 端口的具体信息。通常,没有必要使用在运行时轮询 ADC 端口的代码。也就是说,您可以激活一个 ADC 端口,硬件将进行逐次逼近,完成后硬件将在您的程序可以引用的寄存器中发布一个位。

这意味着您的代码可以多路复用多个 ADC 端口,并且只需要在 ADC 为您的代码准备好样本时处理来自 ADC 的数据。届时您将考虑您自己使用 ADC 数据的代码的效率如何。

同一手册会告诉您是否可以中断 ADC 以获取前四位等。它还会告诉您如何将 ADC 端口的时钟设置为不同的频率。

最后,您最好自己阅读一下。如果您有具体问题,请重新询问并提供手册链接、页码和您的具体问题。

关于c - 使用较短的延迟读取 PIC 的 ADC 模块的效果(在 PIC C 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18294433/

相关文章:

c - 我需要一些最小包围圆的测试用例

delay - 我们可以为 dspic33ep256mu814 Controller 的 mplab 中的 xc16 中的 _delay_ms 添加延迟函数的限制是多少?

laravel - 如何在 Laravel 或 Redis 中取消排队的作业

c - PIC C编译器RS232传输代码

c - 尝试执行 "strrev",来自整数的指针而不进行强制转换

c - 为什么一次编译两个 c 文件以在终端中构建通用可执行文件不起作用?

C 在 HDF5 中读取大型数据集速度很慢(使用 HD5_read)

audio - 使用millis();而不是delay();不同延迟的处理

c - __attribute__((__interrupt__, no_auto_psv)) 是做什么的?

c - PIC 打印垃圾字符而不是预期字符