From fa3c704497603767ac0bbdbdd492e3b183b02cde Mon Sep 17 00:00:00 2001 From: wendtalexander Date: Mon, 23 Sep 2024 11:54:16 +0200 Subject: [PATCH] adding digital trigger --- pyrelacs/repros/repos.py | 46 +++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/pyrelacs/repros/repos.py b/pyrelacs/repros/repos.py index e421425..502551c 100644 --- a/pyrelacs/repros/repos.py +++ b/pyrelacs/repros/repos.py @@ -1,5 +1,6 @@ from ctypes import Array, c_double from typing import Union +from IPython import embed import numpy.typing as npt import uldaq import numpy as np @@ -30,16 +31,15 @@ class Repos: ScanOption: uldaq.ScanOption = uldaq.ScanOption.DEFAULTIO, AInScanFlag: uldaq.AInScanFlag = uldaq.AInScanFlag.DEFAULT, ) -> Array[c_double]: - - if len(channels) > 2: - log.error("Please provide only two channels") - # Get the Ananlog In device and Analog Info + if channels[0] == channels[1]: + channel_len = 1 + else: + channel_len = len(channels) + assert len(channels) == 2, log.error("Please provide a list with two ints") ai_device = self.daq_device.get_ai_device() - ai_info = ai_device.get_info() - buffer_len = np.shape(np.arange(0, duration, 1 / samplerate))[0] - data_analog_input = uldaq.create_float_buffer(1, buffer_len) + data_analog_input = uldaq.create_float_buffer(channel_len, buffer_len) er = ai_device.a_in_scan( channels[0], @@ -52,8 +52,7 @@ class Repos: AInScanFlag, data=data_analog_input, ) - ai_device.scan_wait(uldaq.WaitType.WAIT_UNTIL_DONE, timeout=-1) - log.debug("Scanning") + # ai_device.scan_wait(uldaq.WaitType.WAIT_UNTIL_DONE, timeout=-1) return data_analog_input @@ -61,13 +60,11 @@ class Repos: self, data: Union[list, npt.NDArray], channels: list[int], - duration: int, samplerate: float, - AiInputMode: uldaq.AiInputMode = uldaq.AiInputMode.SINGLE_ENDED, Range: uldaq.Range = uldaq.Range.BIP10VOLTS, ScanOption: uldaq.ScanOption = uldaq.ScanOption.DEFAULTIO, - AInScanFlag: uldaq.AOutScanFlag = uldaq.AOutScanFlag.DEFAULT, - ) -> Array[c_double]: + AOutScanFlag: uldaq.AOutScanFlag = uldaq.AOutScanFlag.DEFAULT, + ): """ Parameters @@ -92,6 +89,7 @@ class Repos: Returns ------- Array[c_double] + ao_device """ @@ -101,7 +99,6 @@ class Repos: log.debug(f"Created C_double data {data_analog_output}") ao_device = self.daq_device.get_ao_device() ao_info = ao_device.get_info() - ao_device.set_trigger err = ao_device.a_out_scan( channels[0], @@ -110,22 +107,31 @@ class Repos: int(len(data)), samplerate, ScanOption, - AInScanFlag, + AOutScanFlag, data_analog_output, ) - ao_device.scan_wait(uldaq.WaitType.WAIT_UNTIL_DONE, 11) + log.info(f"The actual scan rate was {err}") + # ao_device.scan_wait(uldaq.WaitType.WAIT_UNTIL_DONE, 11) - return data_analog_output - - def digital_trigger(self, portn): + return data_analog_output, ao_device + def digital_trigger(self, portn: int = 0, data: int = 1) -> None: + log.info(f"{self.daq_device}") dio_device = self.daq_device.get_dio_device() - dio_device.d_bit_out(uldaq.DigitalPortType.FIRSTPORTA, bit_number=portn, data=1) + + dio_device.d_config_bit( + uldaq.DigitalPortType.AUXPORT, portn, uldaq.DigitalDirection.OUTPUT + ) + + dio_device.d_bit_out(uldaq.DigitalPortType.AUXPORT, bit_number=portn, data=data) def disconnect_dac(self): self.daq_device.disconnect() self.daq_device.release() + def clean_up(): + pass + def run_repo(self) -> None: pass