Hello to everyone,

I am new to this site but have already found it to be a great resource. Thanks.....

I need some helpful insight into a problem that I have. I have a 72 volt battery pack that consists of 24 individual cells connected in series. I want to be able to measure each individual cell voltage which will vary from 3.6 volts to 2.8 volts and display this voltage on an LCD screen one at a time.

To start simple, I used a 12CE674 (had one laying around) and have written the code to measure a voltage that I can vary between 0 and 5 volts and display the output (X.XX volts) on an LCD screen. It works fine.

Now for the next phase to my original goal. My plan was to use two 16 channel multiplexers (74HCT4067) with all of the odd numbered nodes of the battery pack connected to one multiplexer and all of the even numbered nodes of the battery pack connected to the other multiplexer. This way I could use a PIC (plan on using an 18F252) to select adjacent nodes of the battery pack which will represent an individual cell. These two outputs from the two multiplexers would be connected to two analog input channels on the PIC, one of which is connected to the Vref pin.

From this point on, I am beginning to think that my logic might be in error. The idea was that since one of the two analog inputs was connected to Vref and that the delta voltage between the two inputs was never more than 3.6 volts, that everything should work.

The first issue is the first reading will be such that the Vref pin will be on the low side of the delta voltage. The next reading will be such that the Vref pin will be on the high side of the delta voltage. This will toggle back and forth as I move down the string of cells. Will the PIC be OK with this? Assuming it is, I was planning on handling that situation with an ABS command to remove the negative reading.

The second issue is can two analog input pins measure a delta voltage between them with the battery pack and the monitoring circuit on two different grounds? Will this work????

The last thing I want to do is pull my hair out trying to get some code to work only to find out that my logic is incorrect. Can someone let me know if I am going down the wrong road? I am certainly open to any other possible solutions.

Thanks.....