altoslib: Fix EasyMini voltage computations
authorKeith Packard <keithp@keithp.com>
Thu, 3 Apr 2014 05:04:18 +0000 (22:04 -0700)
committerKeith Packard <keithp@keithp.com>
Thu, 3 Apr 2014 05:04:18 +0000 (22:04 -0700)
Early Em prototypes had a 3.0V regulator.
Early v1.0 boards measured power past the blocking diode.

Deal with both conditions to try and report more accurate voltages for
EasyMini data.

Signed-off-by: Keith Packard <keithp@keithp.com>
altoslib/AltosConvert.java
altoslib/AltosSensorEMini.java

index 8f214c8b40c7a80fc6778a3b6806e471b76b7ad6..35923ec3c3dbd1308e2f6d75b1959fcc760efa71 100644 (file)
@@ -224,10 +224,21 @@ public class AltosConvert {
                return sensor / 32767.0 * supply * 127/27;
        }
 
                return sensor / 32767.0 * supply * 127/27;
        }
 
-       static double easy_mini_voltage(int sensor) {
-               double  supply = 3.0;
+       static double easy_mini_voltage(int sensor, int serial) {
+               double  supply = 3.3;
+               double  diode_offset = 0.0;
 
 
-               return sensor / 32767.0 * supply * 127/27;
+               /* early prototypes had a 3.0V regulator */
+               if (serial < 1000)
+                       supply = 3.0;
+
+               /* Purple v1.0 boards had the sensor after the
+                * blocking diode, which drops about 150mV
+                */
+               if (serial < 1665)
+                       diode_offset = 0.150;
+
+               return sensor / 32767.0 * supply * 127/27 + diode_offset;
        }
 
        public static double radio_to_frequency(int freq, int setting, int cal, int channel) {
        }
 
        public static double radio_to_frequency(int freq, int setting, int cal, int channel) {
index f888754c80ea812ee953b1f0d054cbc476dfb44e..5f43b3a9ecf6aebcfde8f24c4190ec77436cf14a 100644 (file)
@@ -31,10 +31,10 @@ public class AltosSensorEMini {
 
                        if (sensor_emini == null)
                                return;
 
                        if (sensor_emini == null)
                                return;
-                       state.set_battery_voltage(AltosConvert.easy_mini_voltage(sensor_emini.batt));
-                       state.set_apogee_voltage(AltosConvert.easy_mini_voltage(sensor_emini.apogee));
-                       state.set_main_voltage(AltosConvert.easy_mini_voltage(sensor_emini.main));
-                       
+                       state.set_battery_voltage(AltosConvert.easy_mini_voltage(sensor_emini.batt, config_data.serial));
+                       state.set_apogee_voltage(AltosConvert.easy_mini_voltage(sensor_emini.apogee, config_data.serial));
+                       state.set_main_voltage(AltosConvert.easy_mini_voltage(sensor_emini.main, config_data.serial));
+
                } catch (TimeoutException te) {
                }
        }
                } catch (TimeoutException te) {
                }
        }