I have 500+ mainly 74 series chips mostly from pulls. I thought that it would be a good idea to test them so connected my USB programmer which is supposed to do just that but it doesn't work correctly so I thought that it would be a reasonably simple matter to build a device to do it. I have a nice case and thought it would be an interesting project. So I'm currently about to start by using a shield with a ZIF in it and take it from there. I've had a thought about the software and for flexibility I've decided to call a function for each IC using other functions to do the work.
After removing the quotes this would be the call for a single device:
if (menu=='7400')
begin
testIC_QuadSameGate(inNormal, outNormal, gateNAND, 0b0010000000000000, b0000000001000000, 0b0000000000000011, 0b0000000000000100, 0b0000000000011000, 0b0000000000100000, 0b0000001100000000, 0b0000000010000000, 0b0001100000000000, 0b0000010000000000
end;
This is basically a function with 13 values with all gate types being unsigned binary ints:
input gate type
output gate type
gate type (there will be alternative functions for any ICs with multiple gate types if I come across them)
input power pins
output power pins
gate 1 input pin(s)
gate 1 output pin(s)
gate 2 input pin(s)
gate 2 output pin(s)
gate 3 input pin(s)
gate 3 output pin(s)
gate 4 input pin(s)
gate 4 output pin(s)
This will allow each gate to be tested individually and fully.
I will obviously have to test different device output etc but I'm working on that idea. Here are the first few ICs including the remarks. A lot of devices can just be copied from others. There is enough memory in a 664 and enough I/O pins to do it this way rather than use a complicated data structure.
I just wrote this in text input and will move it to the IDE when I've built the shield this afternoon.
Chip test
//
// outPUTS
//
// outNormal
// outOpenCollector - require external pull up resistor for proper logical operation
// out15VOpenCollector
// out30VOpenCollector
// out39VOpenCollector
//
// inPUTS
//
// inNormal
// inSchmitt
//
// gateS
//
// gateNAND
// gateNOR
// gateNOT
// gateAND
// gateOR
// gateBuffer
if (menu=='7400')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_QuadSameGate(inNormal, outNormal, gateNAND, 0b0010000000000000, 0b0000000001000000,
0b0000000000000011, 0b0000000000000100, 0b0000000000011000, 0b0000000000100000, 0b0000001100000000, 0b0000000010000000, 0b0001100000000000, 0b0000010000000000
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output Gate 3 input Gate 3 output Gate 4 input Gate 4 output
end;
if (menu=='7401')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_QuadSameGate(inNormal, outOpenCollector, gateNAND, 0b0010000000000000, 0b0000000001000000,
0b0000000000000110, 0b0000000000000001, 0b0000000000110000, 0b0000000000001000, 0b0000000110000000, 0b0000001000000000, 0b0000110000000000, 0b0001000000000000
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output Gate 3 input Gate 3 output Gate 4 input Gate 4 output
end;
if (menu=='7402')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_QuadSameGate(inNormal, outNormal, gateNOR ,0b0010000000000000, 0b0000000001000000,
0b0000000000000110, 0b0000000000000001, 0b0000000000110000, 0b0000000000001000, 0b0000000110000000, 0b0000001000000000, 0b0000110000000000, 0b0001000000000000
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output Gate 3 input Gate 3 output Gate 4 input Gate 4 output
end;
if (menu=='7403')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_QuadSameGate(inNormal, outOpenCollector, gateNOR ,0b0010000000000000, 0b0000000001000000,
0b0000000000000110, 0b0000000000000001, 0b0000000000110000, 0b0000000000001000, 0b0000000110000000, 0b0000001000000000, 0b0000110000000000, 0b0001000000000000
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output Gate 3 input Gate 3 output Gate 4 input Gate 4 output
end;
if (menu=='7404')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_HexSameGate(inNormal, outNormal, gateNOT ,0b0010000000000000, 0b0000000001000000,
0b0000000000000001, 0b0000000000000010, 0b0000000000000100, 0b0000000000001000, 0b0000000000010000, 0b0000000000100000, 0b0000000100000000, 0b0000000010000000,
0b0000010000000000, 0b0000001000000000, 0b0001000000000000, 0b0000100000000000
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output Gate 3 input Gate 3 output Gate 4 input Gate 4 output
// Gate 5 input Gate 5 output Gate 6 input Gate 6 output
end;
if (menu=='7405')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_HexSameGate(inNormal, out30VOpenCollector, gateNOT ,0b0010000000000000, 0b0000000001000000,
0b0000000000000001, 0b0000000000000010, 0b0000000000000100, 0b0000000000001000, 0b0000000000010000, 0b0000000000100000, 0b0000000100000000, 0b0000000010000000,
0b0000010000000000, 0b0000001000000000, 0b0001000000000000, 0b0000100000000000
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output Gate 3 input Gate 3 output Gate 4 input Gate 4 output
// Gate 5 input Gate 5 output Gate 6 input Gate 6 output
end;
if (menu=='7406')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_HexSameGate(inNormal, out39VOpenCollector, gateNOT ,0b0010000000000000, 0b0000000001000000,
0b0000000000000001, 0b0000000000000010, 0b0000000000000100, 0b0000000000001000, 0b0000000000010000, 0b0000000000100000, 0b0000000100000000, 0b0000000010000000,
0b0000010000000000, 0b0000001000000000, 0b0001000000000000, 0b0000100000000000
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output Gate 3 input Gate 3 output Gate 4 input Gate 4 output
// Gate 5 input Gate 5 output Gate 6 input Gate 6 output
end;
if (menu=='7407')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_HexSameGate(inNormal, outHVOpenCollector, gateNOT ,0b0010000000000000, 0b0000000001000000,
0b0000000000000001, 0b0000000000000010, 0b0000000000000100, 0b0000000000001000, 0b0000000000010000, 0b0000000000100000, 0b0000000100000000, 0b0000000010000000,
0b0000010000000000, 0b0000001000000000, 0b0001000000000000, 0b0000100000000000
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output Gate 3 input Gate 3 output Gate 4 input Gate 4 output
// Gate 5 input Gate 5 output Gate 6 input Gate 6 output
end;
if (menu=='7408')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_QuadSameGate(inNormal, outNormal, gateAND, 0b0010000000000000, 0b0000000001000000,
0b0000000000000011, 0b0000000000000100, 0b0000000000011000, 0b0000000000100000, 0b0000001100000000, 0b0000000010000000, 0b0001100000000000, 0b0000010000000000
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output Gate 3 input Gate 3 output Gate 4 input Gate 4 output
end;
if (menu=='7409')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_QuadSameGate(inNormal, outOpenCollector, gateNAND, 0b0010000000000000, 0b0000000001000000,
0b0000000000000011, 0b0000000000000100, 0b0000000000011000, 0b0000000000100000, 0b0000001100000000, 0b0000000010000000, 0b0001100000000000, 0b0000010000000000
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output Gate 3 input Gate 3 output Gate 4 input Gate 4 output
end;
if (menu=='7410')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_TripleSameGate(inNormal, outNormal, gateNAND, 0b0010000000000000, 0b0000000001000000,
0b0001000000000011, 0b0000100000000000, 0b0000000000011100, 0b0000000000100000, 0b0000011100000000, 0b0000000010000000
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output Gate 3 input Gate 3 output
end;
if (menu=='7411')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_TripleSameGate(inNormal, outNormal, gateAND, 0b0010000000000000, 0b0000000001000000,
0b0001000000000011, 0b0000100000000000, 0b0000000000011100, 0b0000000000100000, 0b0000011100000000, 0b0000000010000000
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output Gate 3 input Gate 3 output
end;
if (menu=='7412')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_TripleSameGate(inNormal, outOpenCollector, gateNAND, 0b0010000000000000, 0b0000000001000000,
0b0001000000000011, 0b0000100000000000, 0b0000000000011100, 0b0000000000100000, 0b0000011100000000, 0b0000000010000000
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output Gate 3 input Gate 3 output
end;
if (menu=='7413')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_DualSameGate(inSchmitt, outOpenCollector, gateNAND, 0b0010000000000000, 0b0000000001000000,
0b0000000000011011, 0b0000000000100000, 0b0001101100000000, 0b0000000010000000,
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output
end;
if (menu=='7414')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_HexSameGate(inSchmitt, outOpenCollector, gateNOT ,0b0010000000000000, 0b0000000001000000,
0b0000000000000001, 0b0000000000000010, 0b0000000000000100, 0b0000000000001000, 0b0000000000010000, 0b0000000000100000, 0b0000000100000000, 0b0000000010000000,
0b0000010000000000, 0b0000001000000000, 0b0001000000000000, 0b0000100000000000
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output Gate 3 input Gate 3 output Gate 4 input Gate 4 output
// Gate 5 input Gate 5 output Gate 6 input Gate 6 output
end;
if (menu=='7415')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_TripleSameGate(inSchmitt, outNormal, gateAND, 0b0010000000000000, 0b0000000001000000,
0b0001000000000011, 0b0000100000000000, 0b0000000000011100, 0b0000000000100000, 0b0000011100000000, 0b0000000010000000
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output Gate 3 input Gate 3 output
end;
if (menu=='7416')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_HexSameGate(inNormal, out15VOpenCollector, gateNOT ,0b0010000000000000, 0b0000000001000000,
0b0000000000000001, 0b0000000000000010, 0b0000000000000100, 0b0000000000001000, 0b0000000000010000, 0b0000000000100000, 0b0000000100000000, 0b0000000010000000,
0b0000010000000000, 0b0000001000000000, 0b0001000000000000, 0b0000100000000000
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output Gate 3 input Gate 3 output Gate 4 input Gate 4 output
// Gate 5 input Gate 5 output Gate 6 input Gate 6 output
end;
if (menu=='7417')
begin
// Input Output Gate POWER INPUT GROUND INPUT
// 6543210987654321 6543210987654321
testIC_HexSameGate(inNormal, out15VOpenCollector, gateBuffer ,0b0010000000000000, 0b0000000001000000,
0b0000000000000001, 0b0000000000000010, 0b0000000000000100, 0b0000000000001000, 0b0000000000010000, 0b0000000000100000, 0b0000000100000000, 0b0000000010000000,
0b0000010000000000, 0b0000001000000000, 0b0001000000000000, 0b0000100000000000
// 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321 6543210987654321
// Gate 1 input Gate 1 output Gate 2 input Gate 2 output Gate 3 input Gate 3 output Gate 4 input Gate 4 output
// Gate 5 input Gate 5 output Gate 6 input Gate 6 output
end;
I will have a function for each number of gates rather than overloading, again just for simplicity.
I will have a main function which will call each gate separately with a function specifically for testing a particular type of gate.
So this should cover all the ICs in the range and it will be completely open source. The final device will have a 20x4 LCD display to select the IC type or run a test to work it out.