Ouch...
So far, I have not run into that. For example, I put a new MMOD in the breakout board that Paul made.
View attachment 29099
And I used the test program that @defragster and myself hacked on:
Code:#ifdef ESP_PLATFORM #define digitalWriteFast digitalWrite #define digitalReadFast digitalRead #endif void setup() { Serial.begin(115200); while (!Serial && millis() < 4000 ); Serial.println("Compile Time:: " __FILE__ " " __DATE__ " " __TIME__); Serial.printf("Num Digital Pins: %d\n", NUM_DIGITAL_PINS); testForShorts(); } uint32_t cnt = 0; void loop() { cnt++; allPinTest( cnt ); } uint32_t pinLast[NUM_DIGITAL_PINS]; void allPinTest( uint32_t cnt ) { uint32_t ii, SET; Serial.print("PULLDOWN Start Vals:\n "); SET = 0; Serial.print("PULLDOWN :: TEST to 3.3V\n "); for ( ii = 0; ii < NUM_DIGITAL_PINS; ii++) { pinMode( ii, INPUT_PULLDOWN ); delayMicroseconds( 5 ); pinLast[ii] = digitalReadFast( ii ); if (pinLast[ii]) { Serial.print("\nd#="); Serial.print( ii ); Serial.print( " val=" ); } Serial.print( pinLast[ii] ); Serial.print(','); } Serial.println(); Serial.println(); while ( 1 ) { uint32_t jj, dd = 0, cc = 0, ee=4; cc = 0; for ( ii = 0; ii < NUM_DIGITAL_PINS; ii++) { jj = digitalReadFast( ii ); if ( jj != pinLast[ii] ) { dd = 1; cc++; pinLast[ii] = jj; Serial.print("d#="); Serial.print( ii ); if ( pinLast[ii] ) Serial.print( "\t" ); Serial.print( " val=" ); Serial.print( pinLast[ii] ); Serial.print(','); } if ( cc > 1 && ee ) { Serial.println(">>> MULTI CHANGE !!"); ee--; } if ( Serial.available() ) { while ( Serial.available() ) Serial.read(); if ( 0 == SET ) { SET = 1; Serial.print("PULLUP :: TEST TO GND\n "); } else { SET = 0; Serial.print("PULLDOWN :: TEST to 3.3V\n "); } for ( ii = 0; ii < NUM_DIGITAL_PINS; ii++) { if ( 0 == SET ) pinMode( ii, INPUT_PULLDOWN ); else pinMode( ii, INPUT_PULLUP ); delayMicroseconds( 20 ); pinLast[ii] = digitalReadFast( ii ); if (SET != pinLast[ii]) { Serial.print("d#="); Serial.print( ii ); Serial.print( " val=" ); Serial.println( pinLast[ii] ); } } } } if ( dd ) { dd = 0; Serial.println(); delay( 50 ); } } } void testForShorts() { uint32_t ii; Serial.print("Quick Test for Shorts to adjacent pin"); Serial.println("First pull pins down and see if the next one follows"); for ( ii = 0; ii < NUM_DIGITAL_PINS-1; ii++) { pinMode( ii+1, INPUT_PULLDOWN ); pinMode( ii, OUTPUT); digitalWrite(ii, HIGH); delayMicroseconds( 5 ); if (digitalRead(ii+1)) { Serial.printf("%d:%d ", ii, ii+1); } } Serial.println("\n Now try Pull up and see if setting low follow"); for ( ii = 0; ii < NUM_DIGITAL_PINS-1; ii++) { pinMode( ii+1, INPUT_PULLUP ); pinMode( ii, OUTPUT); digitalWrite(ii, LOW); delayMicroseconds( 5 ); if (!digitalRead(ii+1)) { Serial.printf("%d:%d ", ii, ii+1); } } Serial.println(); }
And I rang out all of the IO pins on it and it, all were found.
Note the green board is my own breakout, that I had partially assembled. Earlier I rang out all of the pins on that one.
Nice info, thanks KurtE. I'm gonna try that test program!