tof_control/rb_control/
rb_dac.rs

1use crate::constant::*;
2use crate::helper::rb_type::RBError;
3use crate::device::{ad5675, pca9548a};
4
5pub fn set_dac() -> Result<(), RBError> {
6    let i2c_mux = pca9548a::PCA9548A::new(I2C_BUS, RB_PCA9548A_ADDRESS_2);
7    i2c_mux.select(RB_AD5675_CHANNEL)?;
8    let ad5675 = ad5675::AD5675::new(RB_AD5675_ADDRESS);
9
10    /*	DAC settings
11        Next few lines will configure the DAC outputs for DRS4/analog front end
12        The AD5675 is a 16-bit DAC with range 0 to 2.048 V
13        Decimal step size is: 0.00003125 V / integer
14
15        DAC Channels:
16            0x0: Vout -
17            0x1: Vout +
18            0X2: ROFS
19            0X3: THS4509 Common Voltage
20            0X4: DRS BIAS
21    */
22
23    // DRS4 analog input offset/bias: IN+_OFS, IN-_OFS
24    // in_neg
25    ad5675.write_dac(0, 25600);
26    // in_pos
27    ad5675.write_dac(1, 25600);
28    // offset
29    // DRS ROFS 1V, 1.6V max
30    // ad5675.write_dac(2, 35200);
31    ad5675.write_dac(2, 42500);
32    // THS4509 common mode voltage: V_CM
33    // For +3.5 V and -1.5 V split supply, half range is 1 V
34    ad5675.write_dac(3, 32000);
35    // DRS BIAS 0.7V
36    ad5675.write_dac(4, 22400);
37
38    i2c_mux.reset()?;
39
40    Ok(())
41    
42}
43
44pub fn set_dac_500() -> Result<(), RBError> {
45    let i2c_mux = pca9548a::PCA9548A::new(I2C_BUS, RB_PCA9548A_ADDRESS_2);
46    i2c_mux.select(RB_AD5675_CHANNEL)?;
47    let ad5675 = ad5675::AD5675::new(RB_AD5675_ADDRESS);
48
49    ad5675.write_dac(2, 49600);
50
51    i2c_mux.reset()?;
52
53    Ok(())
54}
55
56pub fn dac_noi_mode() -> Result<(), RBError> {
57    let i2c_mux = pca9548a::PCA9548A::new(I2C_BUS, RB_PCA9548A_ADDRESS_2);
58    i2c_mux.select(RB_AD5675_CHANNEL)?;
59    let ad5675 = ad5675::AD5675::new(RB_AD5675_ADDRESS);
60
61    ad5675.write_dac(1, 25600);
62
63    i2c_mux.reset()?;
64
65    Ok(())
66}
67
68pub fn dac_vcal_mode() -> Result<(), RBError> {
69    let i2c_mux = pca9548a::PCA9548A::new(I2C_BUS, RB_PCA9548A_ADDRESS_2);
70    i2c_mux.select(RB_AD5675_CHANNEL)?;
71    let ad5675 = ad5675::AD5675::new(RB_AD5675_ADDRESS);
72
73    ad5675.write_dac(1, 46400);
74
75    i2c_mux.reset()?;
76
77    Ok(())
78}
79
80pub fn dac_tcal_mode() -> Result<(), RBError> {
81    let i2c_mux = pca9548a::PCA9548A::new(I2C_BUS, RB_PCA9548A_ADDRESS_2);
82    i2c_mux.select(RB_AD5675_CHANNEL)?;
83    let ad5675 = ad5675::AD5675::new(RB_AD5675_ADDRESS);
84
85    ad5675.write_dac(1, 25600);
86
87    i2c_mux.reset()?;
88
89    Ok(())
90}
91
92pub fn dac_sma_mode() -> Result<(), RBError> {
93    let i2c_mux = pca9548a::PCA9548A::new(I2C_BUS, RB_PCA9548A_ADDRESS_2);
94    i2c_mux.select(RB_AD5675_CHANNEL)?;
95    let ad5675 = ad5675::AD5675::new(RB_AD5675_ADDRESS);
96
97    ad5675.write_dac(1, 25600);
98
99    i2c_mux.reset()?;
100
101    Ok(())
102}