|
3 | 3 |
|
4 | 4 | class DAC: |
5 | 5 |
|
6 | | - def __init__(self, channel: str = 'A'): |
7 | | - self.dac_A = not channel in ['B', 'b'] |
| 6 | + def __init__(self): |
| 7 | + pass |
| 8 | + |
| 9 | + def write(self, voltage_a: float = None, voltage_b: float = None): |
| 10 | + |
| 11 | + if voltage_a is None and voltage_b is None: |
| 12 | + raise ValueError('Must specify either a voltage_a or voltage_b') |
| 13 | + elif voltage_a is not None and voltage_b is None: |
| 14 | + # Just use DAC A |
| 15 | + voltages = [voltage_a] |
| 16 | + selectors = [True] |
| 17 | + elif voltage_b is not None and voltage_a is None: |
| 18 | + # Just use DAC B |
| 19 | + voltages = [voltage_b] |
| 20 | + selectors = [False] |
| 21 | + else: |
| 22 | + # Use both DACs |
| 23 | + voltages = [voltage_a, voltage_b] |
| 24 | + selectors = [True, False] |
8 | 25 |
|
9 | | - def write(self, voltage): |
10 | | - waveform = DC(voltage) |
| 26 | + spi, CS, LDAC = _setup_spi() |
| 27 | + LDAC.value(True) # Set LDAC to HIGH to keep latch closed |
11 | 28 |
|
12 | | - wcr_array = _add_instr_to_wcr_array(waveform.get_wcr_array(), |
13 | | - self.dac_A, |
14 | | - waveform.gain_2) |
| 29 | + for voltage, sele in zip(voltages, selectors): |
| 30 | + waveform = DC(voltage) |
15 | 31 |
|
16 | | - spi, CS, LDAC = _setup_spi() |
| 32 | + wcr_array = _add_instr_to_wcr_array(waveform.get_wcr_array(), |
| 33 | + sele, |
| 34 | + waveform.gain_2) |
| 35 | + mv = memoryview(wcr_array) |
| 36 | + |
| 37 | + CS.value(True) |
17 | 38 |
|
18 | | - mv = memoryview(wcr_array) |
19 | 39 |
|
20 | | - CS.value(True) |
21 | | - LDAC.value(False) |
| 40 | + buffer = bytearray([0, 0]) |
22 | 41 |
|
23 | | - buffer = bytearray([0, 0]) |
| 42 | + # PREPARE --------------------------- |
| 43 | + CS.value(False) |
| 44 | + buffer[0] = mv[0] |
| 45 | + buffer[1] = mv[1] |
24 | 46 |
|
25 | | - # PREPARE --------------------------- |
26 | | - CS.value(False) |
27 | | - buffer[0] = mv[0] |
28 | | - buffer[1] = mv[1] |
| 47 | + # WRITE POINT ----------------------------- |
| 48 | + spi.write(buffer) |
| 49 | + CS.value(True) # Datasheet: Chip select to end before LDAC pulse |
29 | 50 |
|
30 | | - # WRITE POINT ----------------------------- |
31 | | - spi.write(buffer) |
32 | | - CS.value(True) # Datasheet: Chip select to end before LDAC pulse |
| 51 | + LDAC.value(False) # Release latch to update simultaneously |
33 | 52 |
|
34 | 53 | return 1 |
35 | 54 |
|
|
0 commit comments