diff --git a/config_ohmpi_card_3_15.py b/config_ohmpi_card_3_15.py index 9e787e98fbef18ee8d3429457ea7fb9b27b8d60d..fd79afdef8155d057942595c8929bdebf72a6b3e 100644 --- a/config_ohmpi_card_3_15.py +++ b/config_ohmpi_card_3_15.py @@ -30,9 +30,9 @@ HARDWARE_CONFIG = { 'sampling_rate': 10., # ms 'nb_samples': 20, # Max value 10 # was named integer before... }, - 'mux': {'model' : 'dummy_mux', # 'ohmpi_i2c_mux64_v1.01', + 'mux': {'model' : 'mux_2024_rev_0_0', # 'ohmpi_i2c_mux64_v1.01', 'max_elec': 64, - 'board_addresses': {'A': 0x73, 'B': 0x72, 'M': 0x71, 'N': 0x70}, # CHECK IF YOUR BOARDS HAVE THESE ADDRESSES + 'addresses': './hardware_components/mux_2024_22_23_4_roles_addressing_table.json', 'voltage_max': 100, 'current_max': 3 } diff --git a/hardware_components/abstract_hardware_components.py b/hardware_components/abstract_hardware_components.py index a1845bc4a942be6c22254aff59a8a9d404802dff..10b817af405b48bab30828c86323497d7d8012d0 100644 --- a/hardware_components/abstract_hardware_components.py +++ b/hardware_components/abstract_hardware_components.py @@ -1,14 +1,14 @@ from abc import ABC, abstractmethod import numpy as np - +import json from OhmPi.logging_setup import create_stdout_logger import time class ControllerAbstract(ABC): def __init__(self, **kwargs): self.board_name = kwargs.pop('board_name', 'unknown Controller hardware') - self.bus = None + self.bus = None # TODO: allow for several buses self.exec_logger = kwargs.pop('exec_logger', None) if self.exec_logger is None: self.exec_logger = create_stdout_logger('exec_ctl') @@ -35,7 +35,7 @@ class ControllerAbstract(ABC): class MuxAbstract(ABC): def __init__(self, **kwargs): - self.board_name = kwargs.pop('board_name', 'unknown MUX hardware') # TODO: introduce MUX boards that take part to a MUX system (could be the same for RX boards that take part to an RX system (e.g. different channels) + self.board_name = kwargs.pop('board_name', 'unknown MUX hardware') # TODO: introduce MUX boards that are part of a MUX system (could be the same for RX boards that take part to an RX system (e.g. different channels) self.exec_logger = kwargs.pop('exec_logger', None) if self.exec_logger is None: self.exec_logger = create_stdout_logger('exec_mux') @@ -44,6 +44,17 @@ class MuxAbstract(ABC): self.soh_logger = create_stdout_logger('soh_mux') self.exec_logger.debug(f'{self.board_name} MUX initialization') self.controller = kwargs.pop('controller', None) + self.addresses = kwargs.pop('addresses', None) + + def _get_addresses(self, addresses_file): + with open(addresses_file, 'r') as f: + x = json.load(f) + + self.addresses = {} + for k in x.keys(): + y = k.strip('(').strip(')').split(', ') + x[k]['TCA'] + self.addresses.update({(int(y[0]), y[1]): x[k]}) @abstractmethod def reset(self): @@ -91,7 +102,7 @@ class MuxAbstract(ABC): self.exec_logger.warning(f'Missing argument for {self.board_name}.switch: elec_dict is None.') @abstractmethod - def switch_one(self, elec, role, state): + def switch_one(self, elec=None, role=None, state=None): pass def test(self, elec_dict, activation_time=1.): diff --git a/hardware_components/mux_2024_rev_0_0.py b/hardware_components/mux_2024_rev_0_0.py index 817410d0ce25785a550f36914ffea3b9632d7dc9..313b7f1ebfaf03b216912be49b8f43230207fae5 100644 --- a/hardware_components/mux_2024_rev_0_0.py +++ b/hardware_components/mux_2024_rev_0_0.py @@ -11,9 +11,9 @@ class Mux(MuxAbstract): def __init__(self, **kwargs): kwargs.update({'board_name': os.path.basename(__file__).rstrip('.py')}) super().__init__(**kwargs) + print(f'addresses: {self.addresses}') self.max_elec = MUX_CONFIG['max_elec'] - print(os.path.curdir) - if self._addresses is None and 'addresses' in MUX_CONFIG.keys(): + if self.addresses is None and 'addresses' in MUX_CONFIG.keys(): self._get_addresses(MUX_CONFIG['addresses']) def reset(self): @@ -27,7 +27,7 @@ class Mux(MuxAbstract): pin_enable.direction = Direction.OUTPUT pin_enable.value = state - d = self._addresses[elec, role] + d = self.addresses[elec, role] if d['TCA_address'] is None: tca = self.controller.bus else: diff --git a/hardware_components/test_mux_2024.py b/hardware_components/test_mux_2024.py new file mode 100644 index 0000000000000000000000000000000000000000..86d3bee08923343b4b7b52971635557716724000 --- /dev/null +++ b/hardware_components/test_mux_2024.py @@ -0,0 +1,7 @@ +from OhmPi.hardware_components.mux_2024_rev_0_0 import Mux, MUX_CONFIG +import time + +mux = Mux() +mux.switch_one(elec=1, role='M', state='on') +time.sleep(2) +mux.switch_one(elec=1, role='M', state='off') diff --git a/test_measure_with_ohmpi_card_3_15.py b/test_measure_with_ohmpi_card_3_15.py index 3c863dacdc86d9919b937117ebe823944a45eee4..cfb073adc0df160d73085e2306b239904a1f61ad 100644 --- a/test_measure_with_ohmpi_card_3_15.py +++ b/test_measure_with_ohmpi_card_3_15.py @@ -48,3 +48,4 @@ r = [np.abs((k.pulses[i]['polarity']*k.pulses[i]['vmn']-k.sp)/k.pulses[i]['iab'] for i in range(len(r)): print(f'Mean resistance with sp correction for pulse{i}: {np.mean(r[i]):.3f} Ohms, Dev. {100*np.std(r[i])/np.mean(r[i]):.1f} %') change_config('config_default.py', verbose=False) +