I picked up a GM328A kit with 160x120 color display, rotary encoder, and TL431 reference. I didn't like the original firmware so I built my own versions of both the m and k firmware discussed here.
I found the update of the display to be too slow, so I did a couple things: upgraded from the original 8 MHz crystal and fixed some code. I ended up running at 27 MHz (significant overclocking but it works) and needed to update some timing related things for correct readings. In particular, sampling_cap.c required trivial but important update to support this specific frequency. The ADC is running at ~210 kHz clock, slightly beyond spec for best accuracy, but we over-sample and average anyway so a little bit of LSb noise isn't so bad.
The other thing I did was "fix" the menu system (K firmware). I tried switching to the page mode menu, but it was still way too slow to respond to the rotary control. I found that although most of the screen is not changing content, the entire screen is re-drawn each time the control is moved. So I fixed that: if the 'page' doesn't change, then draw only the '>' or ' ' at the first char of each line, to indicate the selection. This was only 3 lines of code including a variable declaration. I also changed the rotary encoder input to not wait for additional increments, but return on the first one. The combination of these two changes makes the menu instantly responsive.
As I played I thought it would be great to add measurement of VCEsat (Voltage of Collector-Emitter at saturation) for BJTs. I chose to do this in the M firmware as the code looked better structured and easier to follow. The web of #ifdef statements in the K firmware can be hard to follow. I only implemented the NPN so far, but it works well. I use the 680R to drive the base with about 7 mA in a common emitter type circuit. Originally, I used the 680R to limit Ic collector current, but this small ~7 mA Ic, plus Ic/Ib ratio nearly =1 gave lower (sometimes much lower) than expected results for measured VCEsat. So I switched to using no R at all in the collector-emitter path. Only the internal resistance of the pin drivers (20-24 Ohm) and test leads will limit current, so it ends up at around 80 to 100 mA (depending on VCEsat slightly). The Ic/Ib is now about 10 to 14, closer to ideal for this measurement about 30, still lower than the ideal ratio of 10 (used in many datasheets). The high Ic is far exceeding the max specified I/O pin current, but it is for only a few milliseconds at a time during the test. So far I haven't blown up any '328Ps. The Ic current is high enough that even the test probe resistance must be accounted for in calculations. With the low-ish base current, DC gain must be >>30 (I'd say at least 100) to ensure good saturation. Case in point: result with the low gain 2SC2625, see below.
Obviously I am willing to share my code changes, but I don't know the best way to do that.
Left to Right:
2N2222 (TO-92), 2SD2394 (TO-220), 2SC2625 (TO-247)
I suppose I should duplicate the test conditions (Ib and Ic) on the bench and verify the results with the same set of devices. In fact I'll do that now, and update this post with the results.
Bench Test Update:
For 2N2222, I measured 250 mV at 95 mA Ic, roughly 3 mA Ib.
For D2394, I measured 63 mV at 109 mA Ic, roughly 3 mA Ib.
For 2SC2625, due to its low gain (20) was not in saturation due to the small (~3 mA) base current. On the bench, increasing base current to about 6 mA resulted in saturation with about 206 mV across C-E. The tester can't drive this base current due to the ~20 Ohms RIL (I/O pin internal resistance) acting as an emitter degeneration resistor, lifting the emitter voltage to about ~ 2 V, and the base voltage to about ~2.6 V.