forked from awendt/pyrelacs
99 lines
2.6 KiB
Python
99 lines
2.6 KiB
Python
import ctypes
|
|
import faulthandler
|
|
|
|
import time
|
|
|
|
import uldaq
|
|
from IPython import embed
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
|
|
from pyrelacs.repros.mccdac import MccDac
|
|
from pyrelacs.util.logging import config_logging
|
|
|
|
log = config_logging()
|
|
faulthandler.enable()
|
|
|
|
|
|
class Calibration(MccDac):
|
|
def __init__(self) -> None:
|
|
super().__init__()
|
|
|
|
def run_calibration(self):
|
|
# Stimulus
|
|
t = np.arange(0, DURATION, 1 / SAMPLERATE)
|
|
data = AMPLITUDE * np.sin(2 * np.pi * SINFREQ * t)
|
|
# sending stimulus
|
|
|
|
self.write_analog(
|
|
data, [0, 0], SAMPLERATE, ScanOption=uldaq.ScanOption.EXTTRIGGER
|
|
)
|
|
|
|
# read_data = self.read_analog_daq(
|
|
# [0, 1], DURATION, SAMPLERATE, ScanOption=uldaq.ScanOption.EXTTRIGGER
|
|
# )
|
|
|
|
self.diggital_trigger()
|
|
try:
|
|
self.ao_device.scan_wait(uldaq.WaitType.WAIT_UNTIL_DONE, 15)
|
|
except uldaq.ul_exception.ULException:
|
|
log.debug("Operation timed out")
|
|
# reset the diggital trigger
|
|
self.write_bit(channel=0, bit=0)
|
|
time.sleep(1)
|
|
self.set_analog_to_zero()
|
|
|
|
def check_amplitude(self):
|
|
# write to ananlog 1
|
|
t = np.arange(0, DURATION, 1 / SAMPLERATE)
|
|
data = AMPLITUDE * np.sin(2 * np.pi * SINFREQ * t)
|
|
|
|
# sending stimulus
|
|
log.debug(f"{data}, {data.shape}")
|
|
embed()
|
|
exit()
|
|
# self.set_attenuation_level(db_channel1=0.0, db_channel2=0.0)
|
|
# self.set_analog_to_zero()
|
|
# time.sleep(1)
|
|
log.debug(self.ao_device)
|
|
|
|
self.write_analog(
|
|
data,
|
|
[1, 1],
|
|
SAMPLERATE,
|
|
ScanOption=uldaq.ScanOption.EXTTRIGGER,
|
|
)
|
|
# data_channel_one = self.read_analog(
|
|
# [0, 0], DURATION, SAMPLERATE, ScanOption=uldaq.ScanOption.EXTTRIGGER
|
|
# )
|
|
log.debug(self.ao_device)
|
|
time.sleep(1)
|
|
|
|
self.diggital_trigger()
|
|
|
|
try:
|
|
self.ao_device.scan_wait(uldaq.WaitType.WAIT_UNTIL_DONE, 15)
|
|
self.write_bit(channel=0, bit=0)
|
|
time.sleep(1)
|
|
self.set_analog_to_zero()
|
|
except uldaq.ul_exception.ULException:
|
|
log.debug("Operation timed out")
|
|
# reset the diggital trigger
|
|
self.write_bit(channel=0, bit=0)
|
|
time.sleep(1)
|
|
self.set_analog_to_zero()
|
|
self.disconnect_dac()
|
|
embed()
|
|
exit()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
SAMPLERATE = 40_000.0
|
|
DURATION = 5
|
|
AMPLITUDE = 1
|
|
SINFREQ = 10
|
|
|
|
daq_input = Calibration()
|
|
# daq_input.check_attenuator()
|
|
daq_input.check_amplitude()
|