My ribbon cable assemblies are creating intermittent short circuits that cause my Atmega328p microprocessor to spontaneously reset.
The setup: 60-conductor .05 ribbon cable made by 3M (long ago when prices were more reasonable than today), separated to use 34 of the conductors and trimmed to length with sharp scissors. 34-position IDC connectors made by Marvic International designed to terminate .05 ribbon cable. Connectors crimped onto ends of cables using a Hilitand-style crimping tool (including the yellow boat that holds the connector). Cable folded over connector and strain relief applied. Inserted into 34-position PCB header made by On Shore Technology, hand soldered onto PCB made by ExpressPCB. I can't think of anything else that might be relevant to the problem.
The problem occurs when I move the cable even slightly. It occurs even when only one end of the cable is connected to a header and even when only that end is terminated. The problem does NOT occur when I remove the cable from the header and wiggle the header or flex the board. I've done what I can to make sure that the conductors at the ends of the cable aren't shorting (cautery with a lighter, scraping with a razor blade, making the cable end flush with the IDC connector). I've made and remade the cable assembly several times. I can't see any glitches in the power supply to the board that are visible on my oscilloscope, but I think the microprocessor must be detecting a brown-out condition because I don't know why else it would be resetting.
I haven't measured a short circuit. I've inferred that it must be the problem because merely flexing the cable provokes the problem. I don't have a way to measure capacitance, but the signals being put on the lines are in the kilohertz range. As I said, I closed the IDC connector with a standard tool, and (which I didn't mention) verified continuity of all the conductors.
A floating reset pin was an inspired guess. I have it hard-wired to pin 10 on an Arduino Uno to facilitate burning hardware. It also has a 10K pull-up resistor attached, though. So probably not this cause. The problem occurs with cables about 15 inches and 36 inches long. I don't know what to do to check for EM interference.
The problem occurs even when the other end of the cable isn't attached to anything. The signals on the lines are square waves in the low kilohertz range.
I used rosin-core solder without separate flux to solder components to the board.
I don't know the cause of the reset. The fuses are programmed so that the brown-out voltage is around 2 V; the supply voltage is 5 V with a commercial (NAEMATEK?) power supply and the watchdog timer is disabled. I think I can rule out the timer in any case because sometimes the resets occur in very rapid succession. One of the timers is in use by the Arduino OS for controlling the serial port; I don't know if another timer might be running without my knowledge.
FURTHER UPDATE: Instead of a ribbon cable, I attached 34 jumpers to the header. Lo, and behold, I can provoke the resets by wiggling those jumpers. That suggests that my problem lies in the way the header is connected to the board. Instead of tying some of the header pins to interior layers for power and ground, perhaps I should have used surface traces?
EVEN FURTHER UPDATE: I slowed the signals down to 1 Hz, hoping to eliminate any RF interference. No joy.