Connesione PC

Salve a tutti mi chiamo Claudio, ho comprato la scheda Arduino Leonardo in questi giorni, ma visto che la sfortuna mi perseguita e quando vado a collegarla al PC riscontro un problema... Il PC riconosce la scheda come Arduino Leonardo (ho già installato il driver per Arduino Leonardo) ma dopo pochi secondi mi si disconnette dal PC. Ho provato a resettare la scheda più di una volta ma niente, il PC rileva l'hardware e dopo pochi secondi non lo trova più. In quei pochi secondi il PC riconosce correttamente Arduino come porta seriale e poi sparisce. Non riesco a mantenere la comunicazione con il PC!!! Ho problemi di comunicazione! Premetto che non sono molto esperto di programmazione. Ho già provato ad aggiornare il driver, cambiare cavetto, cambiare porta USB (le ho provate tutte) Prima di darmi questo problema sono riuscito a caricare un programmino semplice semplice per verificare se la scheda funziona (blink del led 13) e sembra che funzioni. Qualcuno può darmi una mano a risolvere questo problema? Saluti Claudio

Non ho mai utilizzato una Leonardo, ma al tuo posto proverei a collegarla ad un altro computer. Se dovessi riscontrare lo stesso problema, allora o la scheda ha un problema oppure manca qualcosa (inerente comunque alla scheda stessa), altrimenti è un problema del tuo pc.

Premesso che è molto che non uso una Leonardo e potrei dire una marea di vakkate :), credo sia normale: la Leonardo si collega al PC con la seriale CDC, ovvero quella gestita direttamente dall'ATmega32U4. Se nel tuo sketch non inizializzi la seriale (con Serial.begin(9600), ad esempio, che nel Blink NON c'è) questa non è appunto disponibile e non potrai né usare il monitor seriale, né caricare uno sketch.

Per "rimediare", ti basta premere il tasto di reset. A quel punto parte il bootloader e, come già vedi, la seriale resta disponibile per una decina di secondi, durante i quali puoi lanciare l'upload del nuovo sketch.

SukkoPera: Se nel tuo sketch non inizializzi la seriale (con Serial.begin(9600), ad esempio, che nel Blink NON c'è) questa non è appunto disponibile e non potrai né usare il monitor seriale, né caricare uno sketch.

Pure io è un sacco di tempo che non uso una Leonardo, però mi pare di ricordare che la seriale CDC è sempre presente, altrimenti non sarebbe possibile programmare la Leonardo, l'autoreset avviene aprendo la porta Vcom con cambio del baud rate a 1200 bps, quando viene chiusa la Vcom la Leonardo resetta. C'è la possibilità che uno sketch blocca l'emulazione CDC se tiene bloccati gli interrupt per troppo tempo, in questo caso è normale vedere sparire la Vcom, per ovviare potrebbe essere necessario ricaricare il bootloader tramite ISP se non si riesce a caricare un nuovo sketch premendo il tasto reset.

SukkoPera: Premesso che è molto che non uso una Leonardo e potrei dire una marea di vakkate :), credo sia normale: la Leonardo si collega al PC con la seriale CDC, ovvero quella gestita direttamente dall'ATmega32U4. Se nel tuo sketch non inizializzi la seriale (con Serial.begin(9600), ad esempio, che nel Blink NON c'è) questa non è appunto disponibile e non potrai né usare il monitor seriale, né caricare uno sketch.

Per "rimediare", ti basta premere il tasto di reset. A quel punto parte il bootloader e, come già vedi, la seriale resta disponibile per una decina di secondi, durante i quali puoi lanciare l'upload del nuovo sketch.

Grazie a tutti per le risposte! Vi informo che sono riuscito a risolvere il mio problema qualche ora fa. come mi ha suggerito SukkoPera dovevo semplicemente inserire Serial.begin(9600); dentro le parentesi graffe del void setup(). Ho fatto più tentativi resettando la scheda in modo da farla vedere al PC nel momento dell'upload fino a che non mi ha caricato il primo schetck (programma composto da Serial.begin(9600); nel void setup() e senza scrivere nulla nel void loop() ). Da li in poi il PC mi riconosce regolarmente la scheda di Arduino Leonardo.

@SukkoPera, come mai nel codice che mi hai passato nel topic degli ide non c'è Serial.begin(9600) e funziona comunque ?

Perché probabilmente ha ragione astro ;). Appena ho tempo faccio qualche test.

Ho fatto qualche test ed effettivamente la seriale sembra sempre disponibile, anche senza l'inizializzazione esplicita.

Tuttavia ho notato che quando parte il bootloader (che NON parte alla prima accensione, lì parte subito lo sketch - il bootloader parte solo dopo un reset manuale) la scheda presenta un certo PID. Dopo 8 secondi fa partire lo sketch e il PID cambia. Questo forse potrebbe voler dire che ci vogliono due driver diversi su Windows? Magari ne hai uno e non l'altro? Qua il log del kernel sulla mia fida Slackware:

[mer mar  9 22:17:42 2016] usb 1-2.3: new full-speed USB device number 54 using xhci_hcd
[mer mar  9 22:17:42 2016] usb 1-2.3: New USB device found, idVendor=2341, idProduct=0037
[mer mar  9 22:17:42 2016] usb 1-2.3: New USB device strings: Mfr=2, Product=1, SerialNumber=0
[mer mar  9 22:17:42 2016] usb 1-2.3: Product: Arduino Micro   
[mer mar  9 22:17:42 2016] usb 1-2.3: Manufacturer: Arduino LLC
[mer mar  9 22:17:42 2016] usb 1-2.3: ep 0x82 - rounding interval to 1024 microframes, ep desc says 2040 microframes
[mer mar  9 22:17:42 2016] cdc_acm 1-2.3:1.0: ttyACM1: USB ACM device

[mer mar  9 22:17:50 2016] usb 1-2.3: USB disconnect, device number 54
[mer mar  9 22:17:50 2016] usb 1-2.3: new full-speed USB device number 55 using xhci_hcd
[mer mar  9 22:17:50 2016] usb 1-2.3: New USB device found, idVendor=2341, idProduct=8037
[mer mar  9 22:17:50 2016] usb 1-2.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[mer mar  9 22:17:50 2016] usb 1-2.3: Product: Arduino Micro
[mer mar  9 22:17:50 2016] usb 1-2.3: Manufacturer: Arduino LLC
[mer mar  9 22:17:50 2016] cdc_acm 1-2.3:1.0: ttyACM1: USB ACM device

Notare il cambio di PID da 0037 a 8037.

Il doppio pid serve per dire al IDE se sta dialogando con il bootloader o con lo sketch, 0037 e 8037 sono per la micro, 0036 e 8036 per la Leonardo.

Che non si attivi mai col reset non mi pare, visto che per generare il log di cui sopra non ho fatto altro che, appunto, resettare.

Ora, però, non ho idea di quale bootloader ci sia sulla mia Micro :D.

SukkoPera: Ora, però, non ho idea di quale bootloader ci sia sulla mia Micro :D.

Visto che il PID è 0037 è quello della micro, trovi tutti i riferimenti nel file boards.txr dove sono indicati anche i vari vid/pid.

Ho trovato questo sulla pagina della Leonardo:

Rather than requiring a physical press of the reset button before an upload, the Leonardo is designed in a way that allows it to be reset by software running on a connected computer. The reset is triggered when the Leonardo’s virtual (CDC) serial / COM port is opened at 1200 baud and then closed. When this happens, the processor will reset, breaking the USB connection to the computer (meaning that the virtual serial / COM port will disappear). After the processor resets, the bootloader starts, remaining active for about 8 seconds. The bootloader can also be initiated by pressing the reset button on the Leonardo. Note that when the board first powers up, it will jump straight to the user sketch, if present, rather than initiating the bootloader.

Quindi il bootloader parte anche dopo il reset sulla Leonardo, ma immagino anche sulla Micro, come effettivamente è successo a me.