I am creating an IC checker for some high school juniors since a faulty IC can be a nuisance of a bug to find when bread-boarding. These ICs are all simple TTL gating from the 74LS series; the set I am using are all 14-pin and have VCC and GND at pin 14 and 7 respectively.

Thus far my prototype's hardware looks like this:

  • 14 digital pins to connect to the IC inputs/outputs
  • 1 analog pin reading a joystick to navigate through the IC options
  • 1 analog pin set to digital read as a button, which starts the checking process
  • 1 analog pin writing to an LED to indicate whether the IC is valid
  • 2 analog pins (SDA and SCL) as a serial bus to control my display

I actually have the prototype working for a few ICs, but I am concerned that these high school students may test an IC under the wrong selection. Since the digital pins have to dynamically change input/output depending which IC its checking, this allows for inputs and outputs to be mismatched, which could prove fatal to both the IC and the Arduino board.

I want to know if there is a way to check that inputs and outputs are misaligned without having serious electrical failure. Possible some advanced pin control I am unaware of?

Also, if you could answer my question with an example with the 74LS00, whose pinout is diagrammed below and datasheet can be found here.

enter image description here

  • 1
    Very interesting project, but Arduino knowledge is not involved. – user31481 Jan 29 '18 at 8:47
  • 1
    Just add some current limiting resistors to the Arduino pins. Those shouldn't affect the operation of the device-under-test, but will prevent damage if something isn't connected right. Might I also suggest putting in some sort of protection in case the chip is inserted upside-down. – Gerben Jan 29 '18 at 9:49
  • Perhaps this would be better on electronics.SE – dalearn Jan 29 '18 at 13:51
  • hackaday.com/2018/02/15/… might be of interest – Pete Kirkham Feb 16 '18 at 14:06

The simplest way to "fool proof" your system (i.e., to prevent damage by a fool, not make it so it always works right even with a fool) is to add a resistor to each connection. The resistor should be sized so that if an IO pin is HIGH and it's connected to a LOW output on the chip the current flow is below the maximum allowed by both ends.


simulate this circuit – Schematic created using CircuitLab

If D5 is set HIGH and the output of the NAND is LOW the voltage difference (assuming a 5V Arduino) would be around 5V. I=V/R, so 5/1000 is 5mA - way below the maximum of 25mA (40mA burst) of the Arduino.

It won't tell you that you have connected the wrong chip, but it will protect both the chip and the Arduino in such an event.

Since it now doesn't matter if the wrong chip is selected you could in fact cycle automatically through each of the chips testing each on in sequence until you find one that gives the correct results. No need to select a specific one - if no chip matches then it's a faulty chip.

  • Won't a resistor set up of this type drop the voltage across the system significantly? TTL ICs tend only to operate between 4.75V and 5.25V. – Benjamin Brownlee Jan 29 '18 at 18:38
  • 1
    No. 1: you're not putting a resistor in the supply connections, only the signal paths. 2: The voltage drop is proportional to the current, and the current from an output to an input is minuscule (an input is very high impedance). – Majenko Jan 29 '18 at 18:39
  • Oh duh, sorry for that comment. I tested this out and it works well. – Benjamin Brownlee Feb 2 '18 at 6:26

I would connect each of the IC's IO pins to both a digital output and a digital (or analog) input of the Arduino, like this:


simulate this circuit – Schematic created using CircuitLab

Drive each pin with the digital output, alternatively LOW and HIGH. While doing this, read the pin voltage through your input:

  • If the IC pin is an input, you will have no significant voltage drop through the protection resistor. Your reading should be LOW when driving the pin LOW and HIGH when driving it HIGH.
  • If the IC pin is an output, you will have 5 V through the resistor whenever the IC's output value doesn't match your Arduino output. The reading on your input will be independent of the level of your output.

Obviously, an Uno doesn't have enough I/O pins to implement this idea. You could use a Mega instead. Notice also that with this setup you don't need the joystick input: you could just test for every known IC type until you find one that matches the observed behavior, then display the part number on your LCD.

  • 1
    You can use a shift register instead of directly using arduino outputs. – Jonas Schäfer Jan 29 '18 at 13:22
  • Alternatively, just one input pin and switch the pull-up resistor on and off. – Pete Kirkham Jan 30 '18 at 10:45
  • @PeteKirkham: You probably would want a pulldown also. – Edgar Bonet Jan 30 '18 at 11:24
  • Great idea but I only have the arduino uno. – Benjamin Brownlee Feb 2 '18 at 6:23

I am tempted to repeat the old engineering trope "You can't make it foolproof - fools are so ingenious".

If you want to proceed, and are prepared for the complexity 2 solutions suggest themselves.

  1. Limit the current supplied by the Arduino output if connected to a pin on the IC configured as output.

  2. Probably less complex is to test each pin by loading it to 0V and 5V to find which are TTL outputs. A TTL input will unable to source any significant current, while an output will be able to draw current to/from either 0V or 5V.

Either will require quite a bit of additional hardware.

This is not strictly an Arduino problem, but an Arduino would be an ideal solution.

Not the answer you're looking for? Browse other questions tagged or ask your own question.