问题标签 [adc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1000 浏览

c - 带有 linux 内核的嵌入式系统上的 C - 神秘的 adc 读取问题

我正在运行 uClinux 的 AD Blackfin BF537 DSP 上进行开发。我总共有 32MB 的 SD-RAM 可用。我连接了一个 ADC,我可以使用对read().

我的代码中最有趣的部分如下。运行程序似乎工作得很好,我得到了一个很好的数据包,我可以从 SD 卡中获取并绘图。但是,如果我注释掉浮点计算部分(如代码中所述),我在 ft_all.raw 文件中只得到零。如果我将优化级别从 -O3 更改为 -O0,也会发生同样的情况。

我已经尝试过无数种各种事物的组合,有时它可以工作,有时它不能 - 早些时候(对下面的小修改),代码只有在禁用优化时才能工作。如果我在文件中进一步添加其他内容,它也可能会中断。

我的怀疑是read()-function 传输的数据可能没有完全传输(这可能吗,即使它返回正确的字节数?)。这也是我第一次使用直接内存地址初始化指针,我不知道编译器对此有何反应——也许我错过了什么,在这里?

我现在已经在这个问题上花了几天时间,而且我越来越绝望 - 我真的很感谢在这个问题上提供一些帮助!提前致谢。

编辑:如果我使用 read() 从简单文件而不是 ADC 读取数据,代码似乎工作得很好。这让我相信,在提取输入的 I 和 Q 部分时,看起来相当 hacky 的代码正在按预期工作。检查编译器生成的程序集证实了这一点。

我正在尝试与 ADC 驱动程序的开发人员取得联系,看看他是否对此行为有解释。

ADC 通过 SPORT 连接,并按如下方式打开:

以下是配置 SPORT 时使用的选项:

还包括来自 Analog Devices 的 bfin_sport.h 文件:https ://gist.github.com/tausen/5516954

更新 在与项目的前任开发人员进行了一夜的调试后,结果发现问题与上面显示的代码完全无关。正如 Chris 所建议的,这确实是 SPORT 驱动程序和 ADC 配置的问题。

调试时,只要数据“损坏”,就会出现此错误消息:bfin_sport: sport ffc00900 status error: TUVF。虽然这在应用程序中没有多大意义,但从打印数据中可以清楚地看出,有些东西是不同步的:缓冲区中的数据在表单上,0x12000000,0x34000000,...​​而不是0x00000012,0x00000034,...在显示状态错误时。那么似乎很清楚,为什么 buf16I 和 buf16Q 只包含零(因为我正在提取 12 个 LSB)。

在 ADC 初始化和配置阶段之间进行几次调用usleep()似乎已经解决了这个问题 - 我希望它保持这种状态!

0 投票
2 回答
230 浏览

c - 转换为 6 位

我正在尝试整理这个将 10 位值转换为 6 位的函数。当我使用更高分辨率的 ADC 时,我还需要能够定义输入的位长:

0 投票
1 回答
219 浏览

signal-processing - 如何检测信号是否为音频

我有一个从连接到麦克风前置放大器包的 12 位 ADC 收集的样本流。由于样本是 12 位的,所以我可以假设它们的十进制值范围为 0-4096。在我将其向下移动 2048 并除以 2048 以获得一组具有 -1 和 +1 的样本后,我应该得到一个代表音频流的漂亮波形。

(到目前为止,如果我错了,请纠正我。)

我从该线性映射中获得的是一组样本在 -0.55ish 附近“振荡”。(通常的音频流样本在 0 附近振荡)

我不确定是否要再次移动和缩放以获得在 0 附近振荡的波形,或者我在 ADC 上做错了什么。无论哪种情况,我都想知道如何确定我的输出是音频流还是一组随机无用样本。感谢你们!

0 投票
1 回答
804 浏览

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

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

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

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

提前致谢

0 投票
2 回答
2714 浏览

c - 有人为 NXP LPC17xx ADC 编写过工作代码吗?

我正在使用 NXP LPC1788 微控制器,我正在尝试编写代码,让我在模拟通道 0-7 上执行 ADC 测量。我现在的代码是:

随着延迟,代码似乎可以工作,但我不希望在那里出现任意延迟。我已经玩了几个小时的代码,无论出于何种原因,当存在延迟时设置了溢出标志(也就是说,当函数输出正确的值时它会抱怨溢出)。

我只对模拟通道 0 施加电压。这是包含延迟时得到的输出:

当它不包括在内时:

有没有人写过任何代码,可以让我运行所有 ADC 通道并尽可能快地记录它们的值,而不会出现任意延迟?

0 投票
3 回答
1846 浏览

embedded - 两个模拟通道在图中相互影响

我正在做一个项目来通过使用嵌入式 c 读取 pic 16f73 中的 adc 值来识别手势。使用单个 adc 通道时一切正常。当我使用多个通道时,值会相互影响。这是硬件错误还是软件问题?

0 投票
1 回答
585 浏览

filtering - beagle bone black ADC 输入引脚处的 RC 滤波器

我正在尝试读取带有黑色小猎犬骨的热敏电阻。

我有一个为单位增益运算放大器供电的分压器电路。运算放大器的 O/P 连接到一个简单的 RC 低通滤波器,该滤波器将电压馈送到 ADC 引脚。

我注意到的问题是,小猎犬骨头感应到的电压总是比运算放大器输出的实际电压高 0.02V。

起初我认为这是一个软件问题,但经过进一步调查,我发现 ADC 引脚上的电压实际上升高了 0.02V。如果我直接从运算放大器馈送 ADC 引脚,没有 RC 滤波器,我就没有这个问题。有没有其他人经历过类似的事情?

提前致谢!

0 投票
1 回答
3548 浏览

c - C语言中的arduino上的ADC

我正在尝试在纯 C 中使用 Arduio Uno,因为我无法将 Arduino IDE 用于我的高级设计项目。在某种程度上,我已经成功地让串行通信、数字输出/输入和模拟输入正常工作。我正在读取模拟输入的读数,但其中大多数是 20,000+,这太高了。这应该是一个 10 位的 ADC,而我只尝试使用 8 位。为什么我的读取结果是最高值的 100 倍?

我唯一能想到的是我正在使用“int reading_str = itoa(reading, buffer, 10);” 使其成为可打印的值。当我直接打印阅读时,它会将垃圾打印到终端。(char buffer[100]; 是什么缓冲区)

Uno 使用 Atmega328P:www.atmel.com/Images/doc8161.pdf‎</p>

谢谢你的帮助。

0 投票
1 回答
626 浏览

c - 从 ADC 转换 uint16 翻转为负

我想要做的: 将生成的 16 位数字(在组合两个 8 位 #s 之后)变成一个字符串,以与我的串行发送功能一起使用

问题: 使用 itoa 时,一旦通过中间点(从第 15 位传递到第 16 位),结果就会变为负数,因此它本质上是使用第 16 位作为符号位(不足为奇),我的数字应该是无符号的. sprintf 也这样做。请注意, itoa(16) 可以正常工作,因为它应该。

硬件: atmega16 微处理器 (AVR c) 通过 SPI 总线连接的 16 位外部 ADC(将 ADC 结果作为两个 8 位数字发送)

编码:

这样做的结果是它打印了一个 15 位有符号的而不是原始的 uint16。我一直在使用 itoa 打印 10 位内部 ADC 的结果,但是这么简单的事情要花这么长时间,这让我很生气。

我真的很感谢你的时间。

0 投票
2 回答
1143 浏览

adc - 如何在汇编中使用 ADC 和设置标志

我了解 ADC 的作用,但我不确定如何管理进位标志。如果我使用常规 ADD 并且它溢出,它会自动将进位标志设置为 1 吗?如果我使用ADC并且CF为1并且它没有溢出,它会将CF设置为0吗?谢谢。