Problema Arduino Leonatdo boot

Ciao a tutti
Ho una scheda Leonardo che utilizzo per pilotare rele e altro
ad un tratto ha smesso di funzionare
alimentata rimane acceso solo il led ON e al boot il led L non lampeggia
è possibile che in una qualche maniera il bootloader si sia corrotto o cancellato ?
ho controllato F1 e funziona ma la scheda naturalmente non viene riconosciuta

mi conviene sostituire direttamente la scheda o trovare un modo per riscrivere il bootloader?
Grazie a tutti

Se hai usato una uscita di Leonardo per pilotare direttamente il relè è possibile che la corrente >40mA abbia rovinato il micro.

i rele sono su una loro scheda con il loro bjt e optoisolati

protezio:
i rele sono su una loro scheda con il loro bjt e optoisolati

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

ah si scusate lo avevo dimenticato ...
ho guardato i link che mi ha postato
i collegamenti sono giusti, ho aperto qui in Software perchè mi sembra un problema di bootloader
ho controllato e sul micro arrivano 5V ma appena alimento la scheda il led L non lampeggia
non capisco se è un problema sw cioè del bootloader o hw.

Se hai un altro Arduino puoi provare a riscrivere il bootloader via ISP.
Nel caso usa la guida di Michele --> http://www.michelemenniti.it/arduino_burn_bootloader.php

Controlla però per prima cosa come viene riconosciuta la scheda dal PC. Se hai Windows da gestione periferiche. Per Linux non so.

protezio:
Ciao a tutti
Ho una scheda Leonardo che utilizzo per pilotare rele e altro
ad un tratto ha smesso di funzionare
alimentata rimane acceso solo il led ON e al boot il led L non lampeggia
è possibile che in una qualche maniera il bootloader si sia corrotto o cancellato ?
ho controllato F1 e funziona ma la scheda naturalmente non viene riconosciuta

mi conviene sostituire direttamente la scheda o trovare un modo per riscrivere il bootloader?
Grazie a tutti

Visto che il controller dell LEonardo gestisce sia la USB che esegue il Tuo programma puó capitare che se il Tuo sketch blocca il micocontroller non esegue neanche piú l' interfaccia USB.
Puoi provare di caricare un sketch semplice come per esempio il blink ce é compreso nei esempi del IDE e caricarlo. Tieni premuto il tasto reset, lancia il upload e molli il reset quando scrive in basso nel IDE upload. Forse devi provare piú volte per riuscire di beccare il momento giusto.

Ciao Uwe

ho provato ma non viene proprio riconosciuto ne da win ne da mac
a questo punto mi conviene forse prendere un leonardo nuovo e provare in un secondo momento
a riscrivere il bootloader sul vecchio con la scheda nuova

Quando colleghi la scheda, su gestione risorse di windows non appare proprio niente?
E se la colleghi e poi premi il reset, che fa?

Quando collego a win7 64 mi da dispositivo usb non riconosciuto
se premo reset "smonta e rimonta" ma sempre non riconosciuto

Hai provato a ricaricare il driver dalla cartella DRIVER all'interno dell'IDE?

Protezio, sketch e schema elettrico aiuterebbero a capire cosa potrebbe dare problemi.

Questo è lo sketch
lo schema è molto semplice ho soltato collegato la scheda rele (già fatta )
e un bjt per lo strip led
il tutto ha funzionato a dovere finchè non l'ho inserito in uno scatolotto
è possibile che abbia messo in corto qualcosa non so l'hreader ICSP e distrutto il micro?
appena alimentato teoricamente il led L sul pin 13 dovrebbe lampeggiare ma rimane spento
se non per un attimo appena alimento la scheda

#include <IRremote.h>
#include <elapsedMillis.h>

int recvLED = 7;
int recvPin = 11;
int pot;
unsigned long recv_value;
unsigned long pre_recv_value;
unsigned long mask_recv_value;
int pwm,pre_pwm,perc;
int on_off=0;
IRrecv irReciver(recvPin);
int k0=1,k1=1,k2=1,k3=1;
decode_results results;
IRsend irsend;
char  serial_command[8];
int i;

#define LG_on_off  0x20df10ef
#define bt_red     0x45B
#define bt_green   0x45C
#define bt_yellow  0x45D
#define bt_blue    0x45E
#define bt_gen     0x45A
#define bt_star    0x41D
#define bt_diesis  0x41C
#define bt_on_off  0x40C
#define separatore "------------"

elapsedMillis time;
#define interval 5000

void setup()
{
  pinMode(recvLED, OUTPUT); 
  pinMode(9, OUTPUT);
  //relay
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);

  digitalWrite(0, HIGH);
  digitalWrite(1, HIGH);
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);

  pinMode(13,OUTPUT); 
  digitalWrite(recvLED, LOW); 
  Serial.begin(9600); 
  irReciver.enableIRIn(); 
}

void loop()
{


  if (on_off)
  { 

    pot = analogRead(A5);
    pwm = map(pot,0,1023,0,255);
    delay(100);
    if (pre_pwm != pwm)
    {
      analogWrite(9,pwm);
      Serial.println(separatore);
      Serial.println("Led: ");
      perc = map(pwm,0,255,0,100);
      Serial.println(perc);
      pre_pwm = pwm;
    }
  }

  else pre_pwm = 0;
i=0;

if (Serial.available() > 0)
  { 
  
      while (Serial.available() >0 )
      {   
          serial_command[i] = Serial.read();       
          i++;
      }  

      serial_command[i]='\0';

  if(!strcmp(serial_command,"k0")) 
    {
        toggle(0);
    }
  if(!strcmp(serial_command,"k1")) 
    {
        toggle(1);
    }
    if(!strcmp(serial_command,"k2")) 
    {
        toggle(2);
    }
    if(!strcmp(serial_command,"k3")) 
    {
        toggle(3);
    }

if(!strcmp(serial_command,"all_off")) 
    {
        Serial.println(separatore);
        Serial.println("All Off");
        digitalWrite(0,1);digitalWrite(1,1);
        digitalWrite(2,1);digitalWrite(3,1);
        k0=0;k1=1;k2=1;k3=1;  

    }

if(!strcmp(serial_command,"all_on")) 
    {
        Serial.println(separatore);
        Serial.println("All On");
        digitalWrite(0,0);digitalWrite(1,0);
        digitalWrite(2,0);digitalWrite(3,0);
        k0=0;k1=0;k2=0;k3=0;

    }
if(!strcmp(serial_command,"status")) 
    {
        
        print_status ();

    }
  

  } 

if (time > interval) 
{
     time -= interval; 
     print_status();
}

  if (irReciver.decode(&results)) 
  {
    recv_value = results.value; 

    if (  recv_value != pre_recv_value )
    {
      blink();      

      switch (recv_value & ~0x8000) 
      { 
      case bt_red:
        toggle(0);
        break;
      case bt_green:
        toggle(1);
        break;
      case bt_yellow:
        toggle(2);
        break;
      case bt_blue:
        toggle(3);
        break;
      case bt_star:
        Serial.println(separatore);
        Serial.println("Led down");
        if (pwm >= 15 && !on_off)
        {   
          pwm -=15;

          perc = map(pwm,0,255,0,100);
          Serial.println(perc); 
          analogWrite(9,pwm);
        }
        break;
      case bt_diesis:
        Serial.println(separatore);      
        Serial.println("Led up: ");
        if (pwm <= 245 && !on_off)
        {  
          pwm +=15;
          //Serial.println(pwm);
          perc = map(pwm,0,255,0,100);
          Serial.println(perc);
          analogWrite(9,pwm);
        }
        break;  
      case bt_gen:
        on_off = !on_off;
        pwm = 0 ;
        analogWrite(9,0);
        Serial.println(separatore);      
        Serial.println("Switch StripLed mode");      
        break;
      case bt_on_off:
        irsend.sendNEC((LG_on_off), 32); // pin 3 ;
        Serial.println(separatore);
        Serial.println("Send On/Off code");
        delay(100);
        irReciver.enableIRIn();     
        break;
      default:
        Serial.println(separatore);
        Serial.print("Code: ");
        Serial.println(recv_value,HEX);
        break;  


      }

      pre_recv_value = recv_value;

    }
    irReciver.resume(); 

  }


}


void blink ()
{
  
  digitalWrite(recvLED, HIGH);
  delay(10);
  digitalWrite(recvLED, LOW);
}


void toggle (int k)
{
    switch (k) {
        case 0:
          k0 = ! k0;
          digitalWrite(0,k0);
          Serial.println(separatore);
          Serial.print("K0: ");
          Serial.println(!k0);
          break;
        case 1:
          k1 = ! k1;
          digitalWrite(1,k1);
          Serial.println(separatore);
          Serial.print("K1: ");
          Serial.println(!k1);
          break;
        case 2:
          k2 = ! k2;
          digitalWrite(2,k2);
          Serial.println(separatore);
          Serial.print("K2: ");
          Serial.println(!k2);
        break;  
        case 3:
          k3 = ! k3;
          digitalWrite(3,k3);
          Serial.println(separatore);
          Serial.print("K3: ");
          Serial.println(!k3);
        break;
        

    }
}


void print_status ()
{

        Serial.println(separatore);
        Serial.println("Status");
        Serial.print("K0: ");
        Serial.println(!k0);
        Serial.print("K1: ");
        Serial.println(!k1);
        Serial.print("K2: ");
        Serial.println(!k2);
        Serial.print("K3: ");
        Serial.println(!k3);


}

Ma lo scatolotto di che materiale era?
Sì, un corto ci può stare.

Il led "L" appena data corrente dovrebbe lampeggiare 3 volte poi basta, se non usato. Questo è il "messaggio" dell'avvio del bootloader.

Il led "L" appena data corrente dovrebbe lampeggiare 3 volte poi basta, se non usato. Questo è il "messaggio" dell'avvio del bootloader.

Esatto è quello che volevo dire per questo ho pensato a un problema di bootloader avendo controllato l'alimentazione e
cercando di coprire eventuali punti scoperti ,visto che la scatola era in metallo.
L'unico di cui non mi sono preso cura è l'header ICSP
Quindi un corto potrebbe aver rovinato il micro o corrotto il bootloader?

Sull'ICSP sono riportati: 5V, GND, RESET, più i segnali MOSI/MISO/SCK collegati ai rispettivi pin del micro.

La risposta è: sì, puoi aver fatto un corto fra uno di quei pin e bruciato il chip Atmega32U4 della Leonardo.

Tristezza...
quindi a questo punto mi conviene prenderne uno nuovo e magari provare con quello a riscrivere il BL sul vecchio
ce ne uno in particolare migliore o da consigliare visto che molto probabilmente ne prenderò uno nuovo magari senza header

grazie comunque a tutti

Leonardo con o senza headers sono identiche, non c'è differenza a livello di scheda (a parte l'assenza dei connettori) quindi una vale l'altra. Anche la Micro è basata sul 32U4, se hai bisogno di risparmiare spazio potresti prenderla in considerazione (attenzione! non ha il regolatore per alimentazioni esterne superiori a 5V).

Per usare la Leonardo come programmatore ISP mi pare che devi cambiare un paio di definizioni di pin nello sketch ArduinoISP: