In case anyone is interested in an update on my progress. I found a really tricky hardware bug while working on the documentation, and it took me a couple days to figure it out and create a work around.
Current theory/procedure:
0) Directly short the output (or connect it to multiple electronic loads that appear as a short until they start to limit the current)
1) The trigger is pulled and output is enabled as usual
2) There is a massive current spike, but not so huge as to trip the short circuit protection (which has to be set to 175A because the next lowest step, 100A, is insufficient for vacuum startup).
3) The output is disabled, but probably not actually because short-circuit protection kicks in. It takes about 400us, vs the 190us for short circuit protection.
4) The ISL94208 RESETS ITSELF AND DOES NOT PROVIDE ANY ERROR FLAG. Thus it is not obvious what happened.
- This is likely because during a hard short, there can be a current spike of 140A+.
- This causes the voltage on VBACK (attached to cell 1) to drop as low as 1.46V (vs 3-4.2V normally).
- VCC for the ISL94208, which is connected to Cell 6 drops as low as 10.5V but that's still above the POR voltage
- This is below the listed typical POR voltage (no minimum provided) for VBACK and is likely causing the reset of the ISL, which wipes all registers.
- All of this is likely caused because Dyson omitted the 10uF capacitor for VBACK shown in the ISL94208 datasheet (page 32).
5) The normal I2C commands to the ISL fail while it is resetting, causing I2C errors.
6) Previously, I2C errors were handled by resetting the PIC. So the PIC is reset.
7) The PIC starts up and sees the trigger is pulled and the ISL is presenting no error flags.
8 ) Wash, rinse, repeat. Go to step 1.
I've determined I can set some of the User Flag bits and periodically check those to determine of the ISL has silently reset itself. If those bits are cleared, it then asserts an ISL_BROWN_OUT error, rather than having the output flap. These User Flag bits also have to be checked in more than one place in the main loop because the ISL doesn't reset *immediately* after the output enable bit is set on a dead short, so if I check the User Flags immediately afterwards they'll still be fine. I also had to add more elaborate I2C error handling than just resetting the PIC since that would prevent the ability to detect that the ISL reset.
I also tried to assess how the stock batteries react to this fault. I blew the MOSFET and the fuse. Then I replaced the MOSFET and shorted out the fuse. Then the MOSFET blew up again (that could be due to my bad soldering though). At this point I decided I needed to not permanently destroy my last working V6 BMS board since I still need to test that my firmware is compatible with it. Most development was done with a V7 BMS board but it was designed to be compatible with V6 boards too. There are a few different versions of the V6 BMS board, so after I publish everything it would be helpful for anyone willing to test the firmware on a previously untested board version are report their results.
When I want to quit the program, it won't let me, and I get this message: System.UnauthorizedAccessException: Access to the path 'C:\Program Files (x86)\Microchip\PICkit 3 v3\PICkit3.ini' is denied.
The ZIP contains 3 other ZIPs, do I have to invoke those other files too in some way?
An I'm running Win7-64b.
Edit, it's running now, but still can't select the 16LF1847
Edit 2, can select it now, but still get the error while trying to quit.
I think that error when trying to close the PICKit 3 programmer program is "normal". I always get it too. You can thank Microchip for that.