Three Potis and a Button killing a Nano

Hi,

I have set up an Arduino Nano v3.0 with three potis (100 kiloOhm each) and a pushbutton (using a 100 kiloOhm pull-down resistor), powered by the USB connection. After a few hours of use, the Arduino broke (switched off and would not power up again). Thinking it through multiple times, I just don't see the error here ... but I'm an amateur in electronics, so I assume that it's easy to spot:

I'd be very glad for hints :slight_smile:

(this is a bit related to this thread).

Are those the only connections? Could any of your pins accidentally have been set as output?

I just don't see the error here

Well for what it is worth I can't see one either. Are you sure that is what you actually had wired up?

I did not specify the pin types explicitly (I read that they default to input) in the code that ran when the Arduino crashed; but I did change some to output once in a previous session. Is that a setting that persists during reset/upload?

I had really hoped it was a wiring error ... the schematic should reflect the actual wiring (sorry if this is too demanding; I have already tested the board for any shorts between lanes, but there are none):



Thank you very much for your input :slight_smile:

s that a setting that persists during reset/upload?

No they default to inputs every time it resets.

Can’t see anything wrong. When you say crashed what exactly happened and what is the board like now? Will it still upload a sketch?
What ever was wrong it isn’t in what you have shown so far.

Hi,
thanks a lot for taking the time to look at this! The ‚Äėcrash‚Äô occured as follows: The Arduino was plugged in to USB & powered on; I received serial data from it inside vvvv every 40ms (default of the code). It was working for a few minutes (- it had worked in longer intervals the days before -), then it stopped sending data. I took a look at the Arduino, and its LEDs were dark. I unplugged it & removed it from the circuit. Upon reconnecting it, none of its LEDs would light up & it would not show up as a COM-port; there is minimal but unstable voltage to be found on the pins (below 50mV in respect to the ground pin). It remained like that up to this day.

The code running on the Arduino at the time of failure:

/*
 polls X analogue pins at short intervals, averages the results;
 polls Y digital inputs (starting at 7), no averaging on those
 sends all results via 115200 serial connection
 can receive 2 bytes: first byte determines poll interval, second pause between polls in ms.
 
 send order, all int, seperated by comma, finished by newline
 1x poll count
 Xx analogue values
 Yx digital values
 
 */
const int analogCount = 3;
const int digitalCount = 1;
 
int pollDuration, pollInterval;

unsigned int analogInput[ analogCount ];
unsigned int digitalInput[ digitalCount ];

unsigned long analogSum[ analogCount ];
unsigned long analogAverage[ analogCount ];
unsigned int pollCount;
unsigned long pollStartTime;
unsigned long pollCurrentTime;

void pollAnalogMillis( int duration, int interval ){
  // remember start time
  pollStartTime = pollCurrentTime = millis();
  pollCount = 0;
  // poll until duration is over
  while(( pollCurrentTime - pollStartTime )< duration ){
    for( int i = 0; i < analogCount; ++i ){
      analogInput[ i ] = analogRead( i );
      analogSum[ i ] += analogInput[ i ];
    }
    ++pollCount;
    delay( interval );
    pollCurrentTime = millis();
  }
  // polling is done, now average
  Serial.print( pollCount );
  for( int i = 0; i < analogCount; ++i ){
    analogAverage[ i ] =( analogSum[ i ] * 100 )/ pollCount;
    Serial.print( "," );
    Serial.print( analogAverage[ i ] );
    analogSum[ i ] = 0;
  }
}

void pollDigital(){
  for( int i = 7; i <= 6 + digitalCount; ++i ){
    Serial.print( "," );
    Serial.print( digitalRead( i ), DEC );
  }
}

void setup() {
  Serial.begin( 115200 );
  pollDuration = 40;
  pollInterval = 10; 
}

void loop() {
  if( Serial.available() > 0 ){
    pollDuration = Serial.read();
    pollInterval = Serial.read();
    Serial.flush();
  }
  pollAnalogMillis( pollDuration, pollInterval );
  pollDigital();
  Serial.print( '\n' );
}

I had previously (not in the ‚Äėcrashing‚Äô session, though) played with smaller poll intervals, sometimes reading the AD-converter repeatedly as fast as possible, e.g. without delay - is that unhealthy practice?