Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ideas to simplify the circuit #2

Open
ole00 opened this issue Jan 21, 2023 · 2 comments
Open

Ideas to simplify the circuit #2

ole00 opened this issue Jan 21, 2023 · 2 comments

Comments

@ole00
Copy link

ole00 commented Jan 21, 2023

Hi,
thanks for sharing your project and for the explanation write-up.

Your design uses 2 MCU pins to drive one TIC (tested IC) pin. I was wondering whether this could be simplified and only one MCU pin could be used (to drive or sense one TIC pin) for a simpler testing device - basically to test 14-pin-only 74xx logic devices where the VCC and GND are on the fixed position.

  • VCC and GND: fixed on specific TIC pins, hardwired on the board
  • TIC input: arduino pin set as output with value 0/1 depending on the test case
  • TIC output: arduino pin set as input either with or without internal pull-up. Each pin would be also pulled Down externally with very weak resistor (~300k - 500k) so that the internal arduino pull-up (if set) can still drive the pin high (overriding the external pull down). Also the TIC should have no problem to overdrive the external pull-down when it sets the level High. The High Z could also be tested by both enabling internal Pull-Up (and read value from the pin) then disabling the internal pull-up (and read the value from the pin). In the first case the pin should read H and in the second case the pin should read L to verify the TIC pin is really in high Z state. Open collector pin tests should also work (I think) by setting the MCU pin with internal pull-up, which the TIC pin should be able to drive L.
  • All data pins would have a 2k2 resistor in series as a protection from damaged TIC pin / logic

Of course such design would be limited to a subset of TIC devices, but could eliminate the external GPIO chips. Basically the device would only consist of the Arduino, the ZIF socket, VCC decoupling and bunch of resistors. Simple to build on a bread board or protoboard in a few hours.

Any ideas ? Any situations where it would not work, or would not work reliably? Thanks.

EDIT: actually, it seems Arduino has enough pins to drive even 16 pin TICs (I forgot about the analogue pins that can be used as digital as well). The GND pin 7 (on 14 pin ICs) could be enabled or disabled via mosfet. The GND pin 8 (on 16 pin ICs) could be hardwired. VCC stays on the same pin position on the ZIF socket.

@Johnlon
Copy link
Owner

Johnlon commented Jan 22, 2023

Yeah the setup is for driving power and also open circuit.

If you have fixed power then just hard wire that.

It's ages ago. The resistor thing might work yeah. I believe I might have considered it iirc but I can't recall why I would have discounted it. Also do I have a series resistor on each pin to prevent overcurrent when the test device is accidentally driving an output pin as an input pin? If so then you can probably ditch that too as the risk to the device under test is small if the test execution time is short, which it is when using the automation.
Of course in exploratory mode then things are different cos a pin could be driven hard indefinitely.

@ole00
Copy link
Author

ole00 commented Jan 22, 2023

Thanks for the reply. Your unedited answer nudged me to try that. :) And it seems to work so far. The test code is like that:

            case 'Z':
                {
                    uint16_t x = 0;
                    Serial.print("Test pin: ");
                    Serial.println(pinIndex);
                    while(x++ < 10){
                        pinMode(p, OUTPUT);
                        digitalWrite(p, 0); // force the pin Low
                        delayMicroseconds(20);
                        pinMode(p, INPUT_PULLUP); //weak internal pull up should raise the pin High
                        delayMicroseconds(100);
                        if (digitalRead(p) != 1) { //test the pin is High
                            res++;
                            testResult[i] = 'E';
                        }
                        digitalWrite(p, 1); // force the pin High
                        delayMicroseconds(20);
                        pinMode(p, INPUT); //weak external pull down should set the pin Low
                        delayMicroseconds(100);
                        if (digitalRead(p) != 0) { //test the pin is Low
                            res++;
                            testResult[i] = 'E';
                        }
                    }
                    pinIndex++;
                }

I also scoped the pins to give me and idea how it works and it looks good. This was tested on a pin with no IC attached.
z_test

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants