In the last 10 minutes, this is what I've done to investigate the problem:
I've disconnected the only connection to J1[9] - it is now floating. I've soldered a wire to the output of my MUX, and connected it to a DMM. In my code, I inserted a 2 second delay inbetween mux channel switching commands. When the unit runs, it now selects the MUX channel, holds it for 2 seconds, then switches again, holds, etc. According to my DMM, and Logic analyzer, the mux is switching correctly, and outputs are swinging as they should. J1[9] is holding constant at 3.3V as far as my scope and logic probe can tell. What would cause that to happen? Is this just an incorrect setup? Again, my setup is this:
Code: Select all
J1[9].function(0);
J1[9].hiz(); // tried once or twice, didn't make a difference like I thought it would
and this is what I'm doing to check the input:
Code: Select all
// poll all mux positions
for (BYTE i = 0; i < 32; i ++)
{
J2[33] = 0; // enable IO
MUX_Tx[2] = i; // writes the incremented position to OLAT of the 8b breakout
J1[5] = 0; // MUX CS line drop
J1[6] = 0; // MUX WR line drop
J1[7] = 1; // MUX EN line high
DSPIStart(1, MUX_Tx, MUX_Rx, 3, NULL, true); // Data to GPIO breakout to switch mux
while(!DSPIdone(1)); // release when done
OSTimeDly(TICKS_PER_SECOND*2); // delay for port testing
if (J1[9].read()) MUX_OUT[i] = MYSYS_FAULT_FOUND; // loads a "pin on" value (chosen so as not to be 1 or 0)
else MUX_OUT[i] = MYSYS_NO_FAULT; // loads a "pin off" value (chosen so as not to be a 1 or 0)
J1[6] = 1; // MUX WR line high
J1[5] = 1; // MUX CS line high
J1[7] = 0; // MUX EN line drop
}