From f3c1ecad4c5f60710be6f3a3608791faab1922a2 Mon Sep 17 00:00:00 2001 From: awatlet <arnaud.watlet@umons.ac.be> Date: Thu, 12 Oct 2023 08:09:56 +0200 Subject: [PATCH] Adds jumper positions capability for mux_2024 config --- configs/config_mb_2024_0_2__1_mux_2024.py | 6 ++++-- ohmpi/hardware_components/mux_2024_0_X.py | 20 +++++++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/configs/config_mb_2024_0_2__1_mux_2024.py b/configs/config_mb_2024_0_2__1_mux_2024.py index 77ead14d..bc7d3a51 100644 --- a/configs/config_mb_2024_0_2__1_mux_2024.py +++ b/configs/config_mb_2024_0_2__1_mux_2024.py @@ -36,8 +36,10 @@ HARDWARE_CONFIG = { {'model': 'mux_2024_0_X', 'tca_address': None, 'tca_channel': 0, - 'mcp_0': '0x26', # TODO : Replace this with pos of jumper on MUX board (address doesn't mean anything for the average user...) - 'mcp_1': '0x27', # TODO : Replace this with pos of jumper on MUX board (address doesn't mean anything for the average user...) + 'addr2': 'down', + 'addr1': 'down', + # 'mcp_0': '0x26', + # 'mcp_1': '0x27', 'roles': {'A': 'X', 'B': 'Y', 'M': 'XX', 'N': 'YY'}, 'cabling': {(i+0, j): ('mux_03', i) for j in ['A', 'B', 'M', 'N'] for i in range(1, 9)}, 'voltage_max': 12.} diff --git a/ohmpi/hardware_components/mux_2024_0_X.py b/ohmpi/hardware_components/mux_2024_0_X.py index db16f57b..866a4c5a 100644 --- a/ohmpi/hardware_components/mux_2024_0_X.py +++ b/ohmpi/hardware_components/mux_2024_0_X.py @@ -89,9 +89,21 @@ class Mux(MuxAbstract): self._tca = adafruit_tca9548a.TCA9548A(self.connection, tca_address)[tca_channel] # Setup MCPs - self._mcp_addresses = (kwargs.pop('mcp_0', '0x22'), kwargs.pop('mcp_1', '0x23')) # TODO: add assert on valid addresses.. + self._mcp_jumper_pos = (kwargs.pop('addr2', None), kwargs.pop('addr1', None)) + self._mcp_addresses = (kwargs.pop('mcp_0', None), kwargs.pop('mcp_1', None)) + if self._mcp_addresses['mcp_0'] is None and self._mcp_addresses['mcp_1'] is None: + if self._mcp_jumper_pos['addr2'] is not None and self._mcp_jumper_pos['addr1'] is not None: + self._mcp_jumper_pos_to_addr() + self.exec_logger.debug(f'{self.board_id} assigned mcp_addresses {self._mcp_addresses['mcp_0']} and ' + f'{self._mcp_addresses['mcp_1']} from jumper positions.') + else: + self.exec_logger.debug(f'MCP addresses nor jumper positions for {self.board_id} not in config file...') + # TODO: if no addresses defined, should abort or should we set default mcp addresses? + for addr in self._mcp_addresses: + assert addr in [0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27] self._mcp = [None, None] self.reset() + if self.addresses is None: self._get_addresses() @@ -127,3 +139,9 @@ class Mux(MuxAbstract): if state == 'off': activate_relay(self._mcp[d['MCP']], d['MCP_GPIO'], False) # time.sleep(MUX_CONFIG['release_delay']) # NOTE: moved to MuxAbstract switch + + def _mcp_jumper_pos_to_addr(self): + d = {'up': 0, 'down': 1} + mcp_0 = hex(int(f'0100{d[self._mcp_jumper_pos['addr2']]}{d[self._mcp_jumper_pos['addr1']]}0', 2)) + mcp_1 = hex(int(f'0100{d[self._mcp_jumper_pos['addr2']]}{d[self._mcp_jumper_pos['addr1']]}1', 2)) + self._mcp_addresses = {'mcp_0': mcp_0, 'mcp_1': mcp_1} \ No newline at end of file -- GitLab