I've built a 100x160mm PCB containing 16 Omron B3J Key Switches and other devices. The switches are not laid out as a square grid, but are correctly wired in XY fashion. They feed an MM74C922 prior to being fed on to the Amtel 328 MPU. Everything is apparently working except for one major problem that I'm unable to diagnose.
On pressing certain switches, the 74C922 outputs false data. The false data is always bit 0 of the 4 bit nibble. This is not a software problem and the PCB is correctly wired. I'm unable to see any solder splashes or track breaks. The problem is not related to the debounce time constant, as I've tried various values and oscillator frequencies. Occasionally, if I hold down the switch at address X1Y1, the chip will issue a continuous stream of data available signals - but not always.
The problem appears to be intermittent and unpredictable. Can anyone offer a suggestion to how I can identify the cause of this misbehavior?
The data sheet refers to switches with up to 50k on resistance. Could my problem be crosstalk? Would external pull ups (in addition to the ones inside the 74C922) help by reducing the line impedance of the XY matrix?