#driver #embedded-hal-driver #embedded-hal #digital-signal #dac7568 #dac8168

no-std dac8568

适用于德州仪器DAC8568、DAC8168和DAC7568的简单平台无关库

10个版本

0.0.10 2024年7月15日
0.0.9 2022年9月2日
0.0.7 2022年6月30日
0.0.6 2022年2月27日
0.0.2 2021年4月26日

#388 in 嵌入式开发

29 每月下载量

MIT 许可证

13KB
156

dac8568

适用于德州仪器DAC8568的平台无关库。

dac8568

描述

DAC7568DAC8168DAC8568分别是低功耗、电压输出、八通道、12位、14位和16位数字至模拟转换器。这些设备包含一个2.5V、2ppm/°C的内部参考(默认禁用),提供2.5V或5V的全量程输出电压范围。内部参考的初始精度为0.004%,可以在VREFIN/VREFOUT引脚提供高达20mA的电流。这些设备是单调的,提供优异的线性度并最小化不希望的代码到代码瞬态电压(毛刺)。它们使用一种通用的3线串行接口,时钟速率高达50MHz。该接口与标准SPI™、QSPI™、Microwire™和数字信号处理器(DSP)接口兼容。

特性

待完善功能

如果您想添加对更高级特性的支持,请随意创建问题和PR

  • 利用LDAC线进行异步模式
  • 灵活模式
  • 对DAC7568(12位)和DAC8168(14位)的泛型支持

示例

注意:快速示例基于stm32h7xx-hal

// Initialise SPI. Ensure correct polarity and phase are respected
let spi: Spi<SPI1, Enabled> = interface.spi(
    (sck, NoMiso, mosi),
    spi::MODE_1, // polarity: Polarity::IdleLow,
                 // phase: Phase::CaptureOnSecondTransition,
    10.mhz(),
    prec,
    clocks,
);
// Initialise SYNC for SPI communications
let sync = sync.into_push_pull_output();
// Initialize the dac instance
let mut dac = dac8568::Dac::new(spi, sync);
// Perform a software reset of DAC8568 to clear all registers
dac.reset();
// Configure the DAC to use the internal 2.5v reference
dac.use_internal_reference().unwrap();
// Optionally, invert the output signal
dac.set_inverted_output(true);
// Now transfer the data to update the DAC as a blocking call
dac.set_voltage(dac8568::Channel::A, voltage).unwrap();

// Alternatively, you can maintain ownership of the SPI and SYNC if you need to use
// asynchronous communication such as Interrupts and/or DMA.
let (spi, sync) = dac.release();
// And then access the desired message directly
let message = dac8568::Message::get_voltage_message(dac8568::Channel::A, voltage, false);
// Get the message data that can be transferred manually
let payload = message.get_payload_bytes();
// And then write the message bytes to a DMA RAM buffer

依赖

~71KB