Drain batteries through an LM324 controlled CEB6030L from a defunct graphics card

Dependencies:   mbed FastAnalogIn PID mbed-rtos

Revision:
4:fb20b0b3f57d
Parent:
3:08488e544b3e
Child:
5:7112e564d33a
--- a/main.cpp	Tue Jul 05 12:39:11 2016 +0000
+++ b/main.cpp	Tue Jul 05 20:03:55 2016 +0000
@@ -63,6 +63,27 @@
     }
 }
 
+bool header = false;
+Timer T;
+float charge = 0;
+void discharge(const void*) {
+    Thread::wait(3000);
+    I = 2;
+    T.start();
+    header = true;
+    int lastT = 0;
+    while(vbat_rest > 0.9 && (lastT < 5000000 || iget > I/2)) {
+        int t = T.read_us();
+        charge += iget * (t - lastT)/3600000.0;
+        lastT = t;
+        Thread::wait(30);
+    }
+    I = 0;
+    PwmOut led(LED1);
+    led.period_ms(2000);
+    led = 0.2;
+}
+
 int main()
 {
     pc.baud(115200);
@@ -79,10 +100,19 @@
     Thread t3(&rest);
     Thread t4(&ui);
 
+    Thread t5(&discharge);
+
     while (true) {
+        if (header) {
+            header = false;
+            pc.printf("Discharging\r\n");
+            pc.printf("Duration (s)\tVbat (V)\tVbat_rest (V)\tDischarge (I)\tCapacity (mAh)\r\n");
+        }
         //pc.printf("Iset %f    Iget %6d %f    Vbat %6d %f    \r", Iset.read(), Iget.read_u16(), Iget.read(), Vbat.read_u16(), Vbat.read());
-        pc.printf("Iset %f      Iget %8d %f %f", Iset.read(), Iget.read_u16(), Iin(Iget.read()), (float)iget);
-        pc.printf("      Vbat %8d %f %f %f\r", Vbat.read_u16(), Vin(Vbat.read()), (float)vbat, (float)vbat_rest);
-        Thread::wait(500);
+        //pc.printf("Iset %f      Iget %8d %f %f", Iset.read(), Iget.read_u16(), Iin(Iget.read()), (float)iget);
+        //pc.printf("      Vbat %8d %f %f %f    charge %f\r", Vbat.read_u16(), Vin(Vbat.read()), (float)vbat, (float)vbat_rest, charge);
+        if (active)
+            pc.printf("%-8.2f\t%f\t%f\t%f\t%f\r\n", (T.read_us()/10000)/100.0, (float)vbat, (float)vbat_rest, (float)iget, charge);
+        Thread::wait(1000);
     }
 }