One suggestion above was to use the internal pullup as half of the resistive divider to prepare the battery voltage for the ADC, but I see the internal pullups range from 20K to 50K on the datasheet. Perhaps in silicon they are more consistent, but that is quite a range, so not sure that is a great way to design just to save the cost of one resistor. I'll put the resistor on the pc board layout, and perhaps we can try it by leaving the resistor off, but if needed it will be easy enough to put it on.
My 2013 revised design has a number of changes over the 2011 version. There are four balancing load resistors for about 150mA balance current, all driven from the micro directly. The opto arrangement is slightly different which saves one resistor and lowers the power consumption. It has four semiconductors per cell: the micro, the protection zener, and the two optical isolators. All other parts are passive. Parts cost per cell group is very low, currently estimated under $2.50 at 100 quantity rates not including pc board, shipping, loading, calibration and testing, etc.
I've also been looking at the serial communications setup. The ATtiny44 has a Universal Serial Interface which is not quite a UART but can be used for various serial protocols. I'm looking at ways to use it that make the software simple. It only needs to talk to the master node, no need for it to be a standard protocol. The master node will have a lot more codespace and be much easier to modify code in, so the goal is to make the slave code very simple, and use serial and USB to talk to the master node, perhaps even CANBUS later on. The master node will generate the low voltage cutoff output, battery status display, and control charging and balancing, and possibly do the RFID keyswitch as well. One of my goals is to have an onboard charger and be able to just plug in AC and have it charge safely.
The slave functionality will be basically read the battery voltage, apply the calibration, send the result to the master when requested, and control the balance loads on/off as directed by the master. Otherwise it will power down and go to sleep, and have timeouts and watchdog timers to ensure the slaves don't hang up. Also, some sanity checking code in the slave can prevent it from turning balance loads on at low cell voltages. Checksums will prevent acting on bad data.
The master node I was planning to use, the terminal shown earlier in this thread, has disappeared from my supplier, and possibly been discontinued. So I'll probably look at using a Teensy 2.0 or something similar for that functionality. Arduino code can be used on the Teensy so development is easy, and it has a USB interface so no programmer is needed to load it with code.
The balancing is still fairly gentle, but since I use LED power supplies with adjustable voltage and current regulation, and a microprocessor will control the balancing, it can patiently balance at the top of the charge, cycling the charger off if any cell starts to get too high. This won't work well for bad cells needing lots of balancing every cycle, but it will stay safe, stopping the charging before any cell group gets too high, and leaving some groups low if balance is poor. It will advise the user of the balance condition and keep things safe. If cells are getting out of balance every cycle then the pack probably needs an overhaul, though leaving the charger on will eventually allow it to balance them unless leakage is similar to the balance currents. My packs stay balanced well with no balancing, so it won't take much to keep them aligned.
Current estimates show about a 5 hz scan rate for a 24S pack. This will occur during charge and discharge, and shut down at other times. Idle current will be very low when shut down, so this won't be a danger to the battery pack.