3个版本
0.1.2 | 2023年3月29日 |
---|---|
0.1.1 | 2023年3月21日 |
0.1.0 | 2023年3月21日 |
#744 in 嵌入式开发
15KB
113 行
ad9850
ad9850
- AD9850 DDS合成器芯片的嵌入式驱动程序
AD9850是Analog Devices销售的DDS合成器芯片。查看其数据手册以获取有关其的一般信息。
此crate实现了嵌入式设备控制AD9850芯片的接口。
此crate的唯一依赖是您的设备有4个数字输出引脚,这些引脚实现了embedded_hal::digital::v2::OutputPin
特性。
使用示例
此示例使用arduino-hal
。虽然ad9850
库不是特定于设备的,但应很容易将示例修改为其他设备。
#[arduino_hal::entry]
fn main() -> ! {
let dp = arduino_hal::Peripherals::take().unwrap();
let pins = arduino_hal::pins!(dp);
// Initialize the device
let ad9850 = ad9850::Ad9850::new(
pins.d4.into_output(), // Connect D4 (Arduino) to RESET (AD9850)
pins.d5.into_output(), // Connect D5 (Arduino) to DATA (AD9850)
pins.d6.into_output(), // Connect D6 (Arduino) to FQ_UD (AD9850)
pins.d7.into_output(), // Connect D7 (Arduino) to W_CLK (AD9850)
).into_serial_mode().unwrap();
// ^^^^ unwrap is ok here, since `set_low`/`set_high`
// are infallible in the arduino-hal.
// Set output frequency to 1 MHz
ad9850.set_frequency(1000000.0);
}
支持的功能
- 重置设备
- 串行模式编程
- 并行模式编程
- 掉电/唤醒
关于时序的说明
与Ad9850的通信涉及在RESET、W_CLK和FQ_UD线上发送“脉冲”。根据数据手册,这些脉冲的长度至少为3.5ns(RESET和W_CLK)和至少7ns(FQ_UD线)。
此实现不会在切换引脚高低之间插入任何“延迟”,因此脉冲宽度取决于运行此代码的设备的CPU频率。
示例:如果MCU运行在16MHz,则这种方式获得的最小脉冲宽度为$\frac{1}{16MHz} = 62ns$,这远远超过了所需的7ns宽度。
如果您的MCU运行频率显著更高,则这种方法可能失败,您必须修改代码以插入延迟。
如果您遇到时序问题,请随时提交问题。
许可证:MIT
依赖项
~71KB