Commit c70e2db1 authored by Olivier Kaufmann's avatar Olivier Kaufmann
Browse files

Fixes bug with _addresses and super()

Showing with 28 additions and 9 deletions
+28 -9
......@@ -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
}
......
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.):
......
......@@ -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:
......
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')
......@@ -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)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment