diff --git a/ohmpi.py b/ohmpi.py
index 585bdc351550c70f71dd5f583c417cf39e0a0a2c..12afc36292391209b55d644ac65c5abe7f6e236e 100644
--- a/ohmpi.py
+++ b/ohmpi.py
@@ -315,12 +315,12 @@ class OhmPi(object):
         # select a polarity to start with
         self.pin0.value = True
         self.pin1.value = False
-        I=0 
-        vmn=0
-        count=0
 
         # implement different strategy
         if strategy == 'vmax':
+            I=0
+            vmn=0
+            count=0
             while I < 3 or abs(vmn) < 20 :  # I supÊrieur à 1 mA et Vmn surpÊrieur
                 if count >0 :
                     volt = volt + 2
@@ -377,11 +377,32 @@ class OhmPi(object):
             vab = factor * volt * 0.8
             if vab > tx_max:
                 vab = tx_max
-
-        elif strategy == 'constant':
-            vab = volt
         else:
-            vab = 5
+            if strategy == 'constant':
+                vab = volt
+            else:
+                vab = 5
+
+            # autogain
+            self.ads_current = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=860, address=self.ads_current_address)
+            self.ads_voltage = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=860, address=self.ads_voltage_address)
+            gain_current = self._gain_auto(AnalogIn(self.ads_current, ads.P0))
+            gain_voltage0 = self._gain_auto(AnalogIn(self.ads_voltage, ads.P0))
+            gain_voltage2 = self._gain_auto(AnalogIn(self.ads_voltage, ads.P2))
+            gain_voltage = np.min([gain_voltage0, gain_voltage2])
+            self.ads_current = ads.ADS1115(self.i2c, gain=gain_current, data_rate=860, address=self.ads_current_address)
+            self.ads_voltage = ads.ADS1115(self.i2c, gain=gain_voltage, data_rate=860, address=self.ads_voltage_address)
+            # we measure the voltage on both A0 and A2 to guess the polarity
+            I = AnalogIn(self.ads_current, ads.P0).voltage * 1000. / 50 / self.r_shunt  # noqa measure current
+            U0 = AnalogIn(self.ads_voltage, ads.P0).voltage * 1000.  # noqa measure voltage
+            U2 = AnalogIn(self.ads_voltage, ads.P2).voltage * 1000.  # noqa
+
+            # check polarity
+            polarity = 1  # by default, we guessed it right
+            vmn = U0
+            if U0 < 0:  # we guessed it wrong, let's use a correction factor
+                polarity = -1
+                vmn = U2
 
         self.DPS.write_register(0x09, 0) # DPS5005 off
         # print('polarity', polarity)