diff --git a/ohmpi/hardware_components/abstract_hardware_components.py b/ohmpi/hardware_components/abstract_hardware_components.py
index f2e61dbb0e3156d26ab48f8ff80cf106d7cbe168..60999509e7b93dd1f91ac2f6e66cc44d3fd6537c 100644
--- a/ohmpi/hardware_components/abstract_hardware_components.py
+++ b/ohmpi/hardware_components/abstract_hardware_components.py
@@ -56,6 +56,7 @@ class PwrAbstract(ABC):
         self._voltage_min = kwargs.pop('voltage_min', 0.)
         self._voltage_max = kwargs.pop('voltage_max', 0.)
         self.connection = kwargs.pop('connection', None)
+        self._battery_voltage = np.nan
 
     @property
     @abstractmethod
@@ -92,10 +93,20 @@ class PwrAbstract(ABC):
         if not self.voltage_adjustable:
             self.exec_logger.debug(f'Voltage cannot be set on {self.model}...')
         else:
-            assert self._voltage_min < value < self._voltage_max
+            assert self._voltage_min <= value <= self._voltage_max
             # add actions to set the DPS voltage
             self._voltage = value
 
+    def battery_voltage(self):
+        # add actions to read the DPS voltage
+        self.exec_logger.debug(f'Battery voltage cannot be read on {self.model}...')
+        return self._battery_voltage
+
+    def reset_voltage(self):
+        if not self.voltage_adjustable:
+            self.exec_logger.debug(f'Voltage cannot be set on {self.model}...')
+        else:
+            self.voltage = self._voltage_min
 
 class MuxAbstract(ABC):
     def __init__(self, **kwargs):
diff --git a/ohmpi/hardware_components/mb_2023_0_X.py b/ohmpi/hardware_components/mb_2023_0_X.py
index 196d54e1f322e03f4420a5f8428a0de385e90f65..bd98758be653b9f85842d8c184848ffdc6963945 100644
--- a/ohmpi/hardware_components/mb_2023_0_X.py
+++ b/ohmpi/hardware_components/mb_2023_0_X.py
@@ -7,6 +7,7 @@ from digitalio import Direction  # noqa
 from busio import I2C  # noqa
 import time
 import os
+import numpy as np
 from ohmpi.hardware_components import TxAbstract, RxAbstract
 from ohmpi.utils import enforce_specs
 
@@ -181,9 +182,13 @@ class Tx(TxAbstract):
 
     @property
     def tx_bat(self):
-        self.soh_logger.warning(f'Cannot get battery voltage on {self.model}')
-        self.exec_logger.debug(f'{self.model} cannot read battery voltage. Returning default battery voltage.')
-        return self.pwr.voltage
+        if np.isnan(self.tx.pwr.battery_voltage):
+            self.soh_logger.warning(f'Cannot get battery voltage on {self.model}')
+            self.exec_logger.debug(f'{self.model} cannot read battery voltage. Returning default battery voltage.')
+            return self.pwr.voltage
+        else:
+            return self.tx.pwr.battery_voltage
+
 
     def voltage_pulse(self, voltage=None, length=None, polarity=1):
         """ Generates a square voltage pulse
diff --git a/ohmpi/hardware_components/mb_2024_0_2.py b/ohmpi/hardware_components/mb_2024_0_2.py
index 62b32bed182f79ba8fd0c63a2dbb4fd178c6645d..5ace4148597d7b9cd5deb324566abf894e7ff432 100644
--- a/ohmpi/hardware_components/mb_2024_0_2.py
+++ b/ohmpi/hardware_components/mb_2024_0_2.py
@@ -91,7 +91,6 @@ class Tx(Tx_mb_2023):
         Tx_mb_2023.inject(self, polarity=polarity, injection_duration=injection_duration)
         self.pin6.value = False
 
-
 class Rx(Rx_mb_2023):
     def __init__(self, **kwargs):
         if 'model' not in kwargs.keys():
diff --git a/ohmpi/hardware_components/pwr_dps5005.py b/ohmpi/hardware_components/pwr_dps5005.py
index 1ee2f2bb86ff7fbfe531ddc5da6a554833547f69..7de8394941872304a7cacc29c953c2de6b6ac61b 100644
--- a/ohmpi/hardware_components/pwr_dps5005.py
+++ b/ohmpi/hardware_components/pwr_dps5005.py
@@ -2,12 +2,15 @@ from ohmpi.hardware_components.abstract_hardware_components import PwrAbstract
 import numpy as np
 import datetime
 import os
+import time
 from ohmpi.utils import enforce_specs
 #import minimalmodbus  # noqa
 
 # hardware characteristics and limitations
 SPECS = {'model': {'default': os.path.basename(__file__).rstrip('.py')},
          'voltage': {'default': 12., 'max': 50., 'min': 0.},
+         'voltage_min': {'default': 0},
+         'voltage_max': {'default': 0},
          'current_max': {'default': 100.},
          'current_adjustable': {'default': False},
          'voltage_adjustable': {'default': True}
@@ -54,20 +57,21 @@ class Pwr(PwrAbstract):
     def turn_on(self):
         self.connection.write_register(0x09, 1)
         self.exec_logger.debug(f'{self.model} is on')
+        time.sleep(.3)
 
     @property
     def voltage(self):
-        return PwrAbstract.voltage.fget(self)
+        # return PwrAbstract.voltage.fget(self)
+        return self._voltage
 
     @voltage.setter
     def voltage(self, value):
         self.connection.write_register(0x0000, value, 2)
+        self._voltage = value
 
     def battery_voltage(self):
-        self.connection.read_register(0x05, 2)
+        self._battery_voltage = self.connection.read_register(0x05, 2)
+        return self._battery_voltage
 
     def current_max(self, value):
         self.connection.write_register(0x0001, value * 10, 0)
-        
-    def reset_voltage(self):
-        self.DPS.write_register(0x0000, 0, 2)  # reset to 0 volt
\ No newline at end of file
diff --git a/ohmpi/hardware_system.py b/ohmpi/hardware_system.py
index 19c0724c58b6de1adc4e541ecb4c717a76524bf4..7997e50eb49bdb9215f4f8b22f8c274ba7e7426a 100644
--- a/ohmpi/hardware_system.py
+++ b/ohmpi/hardware_system.py
@@ -209,7 +209,7 @@ class OhmPiHardware:
             mux.barrier = self.mux_barrier
 
     @property
-    def pulses(self):
+    def pulses(self):  # TODO: is this obsolete?
         pulses = {}
         for i in np.unique(self.readings[:, 1]):
             r = self.readings[self.readings[:, 1] == i, :]
@@ -409,15 +409,16 @@ class OhmPiHardware:
         self._vab_pulses(vab, durations, sampling_rate, polarities=polarities,  append=append)
         self.exec_logger.event(f'OhmPiHardware\tvab_square_wave\tend\t{datetime.datetime.utcnow()}')
 
-    def _vab_pulse(self, vab, duration, sampling_rate=None, polarity=1, append=False):
+    def _vab_pulse(self, vab=None, duration=1., sampling_rate=None, polarity=1, append=False):
         """ Gets VMN and IAB from a single voltage pulse
         """
         #self.tx.polarity = polarity
         if sampling_rate is None:
             sampling_rate = RX_CONFIG['sampling_rate']
         if self.tx.pwr.voltage_adjustable:
-            self.tx.pwr.voltage = vab
-        else:
+            if self.tx.pwr.voltage != vab:
+                self.tx.pwr.voltage = vab
+        else :
             vab = self.tx.pwr.voltage
         # reads current and voltage during the pulse
         injection = Thread(target=self._inject, kwargs={'injection_duration': duration, 'polarity': polarity})
@@ -431,6 +432,10 @@ class OhmPiHardware:
     def _vab_pulses(self, vab, durations, sampling_rate, polarities=None, append=False):
         n_pulses = len(durations)
         self.exec_logger.debug(f'n_pulses: {n_pulses}')
+        if self.tx.pwr.voltage_adjustable:
+            self.tx.pwr.voltage = vab
+        else:
+            vab = self.tx.pwr.voltage
         if sampling_rate is None:
             sampling_rate = RX_CONFIG['sampling_rate']
         if polarities is not None:
@@ -440,7 +445,7 @@ class OhmPiHardware:
         if not append:
             self._clear_values()
         for i in range(n_pulses):
-            self._vab_pulse(self, duration=durations[i], sampling_rate=sampling_rate, polarity=polarities[i],
+            self._vab_pulse(self, vab, duration=durations[i], sampling_rate=sampling_rate, polarity=polarities[i],
                             append=True)
 
     def switch_mux(self, electrodes, roles=None, state='off', **kwargs):