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 77ead14dbed34d1088215e78817dc1d7cc618467..bc7d3a51246d2105085e63fc365cc641e86415fd 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 db16f57b43e1be3afbe29dfe5292c62b2a0143b7..866a4c5a3d46144f4c0e6eca9f898f020346c0e6 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