hey everybody,
i'm new in arduino area.
i would like to get guidance in a project of continuity tester using arduino.
i need to do 3 test:
open circuit.
short circuit.
cross.
i'm using the arduino uno r3 board and i need to test a cable of 128 wires.
moreover, i would like to connect a LCD screen and a keypad- i need you to consider it with the pin calculation and a recommendation
for lcd and keypad type and model.
i need a recommendation for extending the i/o pins with shift registers/mux & de-mux or other components- i would like to get a detailed information with model number.
i would like to get help about the logic/algorithm and functions needed for those operations.
thank you very much.
There have been a couple of other threads about essentially the same problem in the last few weeks so I suggest you search those out to find what advice was given.
What do you want to do if there is a fault? Discard the cable, repair it, or what?
So, do you need to know which wire is at fault?
Which end of the cable has the short, or open?
How many cables do you plan to test each day/week?
You answered one of my questions. If you would answer the other questions, I would have a better understanding of your situation, and may be able to give more appropriate suggestions. Thanks.
EDIT: Are we to assume these wires are in a cable, and that the cable has connectors on each end?
Does it have to be "simultaneously" or just appear to be by measuring really fast?
Simultaneously, you wire up your test connector pins so the wires make up one big long string; if one wire is open, you only know that the cable is bad overall.
A better method is to have say 16 shift-out registers (I'd go with open drain type so one low driven output is not fighting another high driven output if there is a short ) and 16-shift-in registers with pullup resistors.
You take one output low, confirm its mating input is low, and that all other inputs are high. Code would be simple and fast;
16 SPI.transfer() to load the low bit, 16 SPI.transfer() to read the data in, 16 compares to check that only the desired bit was low.
Repeat 128 times.
// code for 1 wire - wrap this in a loop that moves a 0 across all outputs one at a time
// in this example shiftOoutData[] is an array containing 15 bytes of 0xFF, and 16th byte with 0x11111110 (0xFE)
// change the 11111110 to 11111101, 11111011, 11110111, 11101111, 11011111, 10111111, 01111111.
// then move that walking 0 to the next byte
digitalWrite (ssPinOut, LOW);
for (x=0; x<16; x=x+1){
SPI.transfer[shiftOutData[x] ]);
}
digitalWrite (ssPinOut, HIGH); // data is setup at shiftout register output
digitalWrite (ssPinIn, LOW); // data is latched into the shift-in registers - check level for the part used
for (x=0; x<16; x=x+1){
shiftInData =SPI.transfer(0); // capture a byte
}
digitalWrite (ssPinIn, HIGH); // close the latches
// and test the data
for (x=0; x<16; x=x+1){
if (shiftInData[x] == shiftOutData[x]){
Serial.print("byte good: ");
Serial.println (x, DEC);
}
else {
Serial.print("byte bad: );
Serial.println (x, DEC);
Serial.print ("Sent data ");
Serial.println (shiftOutData[x], BIN);
Serial.print ("Received ");
Serial.println (shiftInData[x], BIN);
}
Need a bunch of chips, but not too bad price wise. Lets you isolate to a single wire in the backshell for an open, pin not inserted correctly, or to a couple pins if shorts are found. Can' tell which end, but gets you down to specific pins to look at.