问题标签 [digital-analog-converter]

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 投票
2 回答
170 浏览

audio - 数字音频格式

我有一个矢量化的 wav 文件,其值在 -1 和 1 之间,有 88,200 个样本,44.1 kHz 的采样率可以在两秒内听到音频。我想通过蓝牙将音频发送到蓝牙模块、arduino、DAC 和带耳塞的 3.5 毫米分线板。

当我最后收到它时,我得到了噼里啪啦的声音。我试图重新创建这是 MATLAB,结果它是缩放(乘以 + 将值移到 0 上)和由于接收器引起的采样率变化的组合。当然,我可能会用低效的 Arduino 代码完全调整采样频率,但由于一个因素也是初始缩放比例,我的猜测是我误解了音频处理的基本原理。

格式化和/或缩放 0-4095(DAC 输入所需)之间的值的正确方法是什么,以便音频本身在收听时不会因缩放因子、采样率保留而失真?或者在这个大局中我还缺少什么吗

澄清:目前我正在使用 python 套接字库将音频字符串数组逐字符发送到 Arduino 数组中,并将它们作为整数读取,然后输入到 DAC。不确定python套接字是否是最好的方法,应该有更好或更强大的套接字实现来发送数据

更新:我意识到 HC-05 使用SPP 蓝牙协议,这似乎是因为分辨率太低而无法发送可靠的音频。我会看看是否可以发送更压缩的音频文件,将其存储在 arduino 中,然后输出到 DAC。这可以提供更可靠的音频。

0 投票
0 回答
108 浏览

c - 使用 Cordic 进行数模转换

我是 DAC 的新手,但基本上,我有一个运行 Linux 的 FPGA (DE1-SOC)。与之相连的是一个 LTC2607 DAC。就 Linux 识别 I2C 上的 DAC 和一切而言,一切都运行顺利。

我的问题是关于如何使用cordic算法生成正弦波形。我有一个算法可以输出一个包含 16 个十六进制值的数组。

{0x00003243、0x00001DAC、0x00000FAD、0x000007F5 等...}

运行 I2c/DAC 的代码接受 16 位“DAC 代码”,然后将其转换为模拟输出:

我知道对于直接数字合成,您必须沿正弦曲线“插入”点(电压电平)。我的想法是,我会通过 I2C 一个接一个地发送这些值,无论这 16 个十六进制值通过 I2C 的速度有多快(由主 (FPGA) 时钟 @ ~10MHz 设置)是正弦波的频率将会?

写入DAC的代码如下:

如何使用上述 LTC2607_write 函数将该 16 个十六进制值的字符串转换为正弦曲线?

0 投票
1 回答
127 浏览

python - Raspberry Pi 上的 spidev 没有使用 DAC7562EVM 提供任何输出

我正在尝试使用 Raspberry Pi 控制 DAC7562EVM。我已连接:

信号 - PI - TI - 信号

MOSI - P1-19 - J2-11 SDI

SCLK - P1-23 - J2-3 SCLK

CEO - P1-24 - J2-1 /SYNCO

接地 - P1-25 - J2-4 接地

此外,JP1 引脚用于将/LDAC 接地。

到目前为止,我已经在 SDI、SCLK 和 /SYNC0 引脚上使用了示波器,并且可以验证同步引脚不会中断数据传输。此外,我可以看到 DAC 接收到的 8 位序列。

我一直在使用的代码如下:

我不明白我怎么知道正在发送消息,但我没有从 DAC 获得任何可辨别的输出。我错过了什么?

DAC7562 数据表:http ://www.ti.com/lit/ds/slas719e/slas719e.pdf

DAC7562EVM 手册:http ://www.ti.com/lit/ug/sbau183a/sbau183a.pdf

我发现这个答案对 SPI 模式很有帮助,但无法实现其他指令:TI DAC8568 的树莓派上的 SPIDEV 未按预期运行

0 投票
0 回答
34 浏览

java - 为什么使用 AudioTrack 库无法在智能手机的音频端口生成直流电压?

我正在构建一个 android 应用程序来生成 Sine、Square、Sawtooth 和 DC 等信号。我已经能够通过生成值并将这些值填充到缓冲区来生成正弦波、方波和锯齿波,通过该缓冲区我使用 AudioTrack 类写入音频端口。对于 DC,我将常量值 1 写入缓冲区并写入音频端口。但是,当我将移动设备连接到 CRO 时,这不会产生任何输出。

在参考了一些文档后,我发现移动设备的音频 I/O 旨在仅传递变化的信号。有人可以详细说明这到底是什么意思吗?为什么我们有这样的限制?是因为 DAC 不能将常数值转换为模拟值吗?提前致谢。

0 投票
1 回答
27 浏览

digital-analog-converter - 键盘到模拟

我还没有找到任何可以帮助我完成我想做的事情的资源。我想制作一个简单的程序,在运行时将按键转换为模拟输入。例如,如果我在游戏打开的情况下按住 A,它会使我的角色缓慢地向左移动。我不需要模拟是动态的,它可以以恒定的量输出。为了更加清晰,这样一个没有控制器的朋友可以在他的模拟器上潜入口袋妖怪游戏。如果有人有任何想法或可以为我指明正确的方向,我会很高兴。我对编程很熟悉,所以我只需要知道如何或在哪里可以实现这一点的方法。谢谢!

0 投票
2 回答
334 浏览

stm32f4discovery - STM32 模拟输出

我正在研究 stm32 的模拟输出。STM32F407VG用户手册和DAC手册说STM32可以从DAC外设提供模拟输出。

那个模拟输出真的是 ANALOG 吗?

0 投票
1 回答
28 浏览

raspberry-pi - MAX5825满量程8位

我使用 MAX5825 作为 RPi 的外部 DAC。
根据数据表,该组件的分辨率为12 位
当我阅读时,我应该在 CODEn (0x8n) 寄存器中写入我想要设置的值,n 是我想要设置的 DAC 通道,然后在 LOADn (0x9n) 寄存器中写入任何内容,或者使用 CODEn_LOADn (0xBn) 注册一步完成。请参阅此处的数据表摘录
我正在使用 pigpio 守护程序库来接口 I²C 通信

这应该将我的 CODE0 寄存器设置为value参数。
但是,我有一个奇怪的行为,所以我尝试从 CODEn (0x80) 寄存器中读取数据,以查看我的设置尝试是否正确。

我不确定我是否可以从命令寄存器中读取一个值,但是当我的值超过 0xFF 时,我从 I²C 读取得到的返回看起来像value & 0xFF。(即,当我将寄存器设置为 0xFF 时,我在寄存器中读取 0xFF,当我将寄存器设置为 0x100 时,我读取 0x00)
此外,当 CODEn 寄存器设置为 0xFF 时,我的 DAC0 通道的输出电压处于最大量程。我使用了 4.0V 内部基准,当我将设置为 0xFF 时,输出电压为 4.0V-ish。
我不明白为什么 0xFF 是 12 位分辨率 DAC 的最大刻度?我是否缺少配置分辨率或类似方法的方法?
到目前为止我已经尝试过:

  • 移除设置值上的 << 4 移位:行为没有变化
  • 反转写入 CODEn 寄存器的 LSByte 和 MSByte(我在 pigpiod API 上看到 SMBus 标准应该在一个字写入过程中发送 LSByte 然后 MSByte): CODEn 寄存器的读取跳过了 0x0FFF 值。MAX5825 应该与 SMBus 标准兼容。
  • 使用i2c_write_block_data代替 pigpiod lib 的 i2c_write_word_data函数:行为没有变化。

谢谢你的时间 !

参考:
MAX5825 数据表:https:
//datasheets.maximintegrated.com/en/ds/MAX5823-MAX5825.pdf pigpio API:https ://abyz.me.uk/rpi/pigpio/pdif2.html