Ciao a tutti, dopo aver cercato per giorni finalmente ho trovato una soluzione decente per il problema dell'auto-reset che non implica modifiche hardware, condensatori, resistenze, ne gestioni di flag particolari lato software prima di effettuare la connessione seriale...
Si avete capito bene: il funzionamento più logico di tutti cioè che il reset non avviene quando mi collego normalmente alla seriale ma solo quando flasho sketch dall'arduino ide (o anche da linea di comando) senza che debba fare nulla di particolare! Sembra incredibile che questa possibilità non esista già di default e sembra incredibile che non sia neppure scritta nella documentazione ufficiale!
In ogni caso io ho solo trovato il trucco è lo voglio condividere con voi, il merito è di questo blogger "Rob":
che ha modificato il firmware del ATmega8u2 che gestisce la porta USB
qui il link diretto ai file (per Uno e Mega 2560):
https://github.com/giseburt/Arduino/downloads
io ho provato la versione per l'Arduino Uno sul mio Arduino R2 e funziona! con un paio di anomalie (non gravi) che riporto sotto
La modifica apportata da Rob consiste semplicemente nell'effettuare il reset solo nel caso in cui l'ATmega8u2 rilevi un collegamento seriale che viene aperto e subito chiuso dopo mezzo secondo (cosa che l'arduino-ide fa già automaticamente prima di caricare gli sketch, mentre da linea di comando si può fare con uno script perl di una riga), se il collegamento seriale dura di più ovviamente non viene fatto nessun reset.
ATTENZIONE la procedura per caricare il firmware dell'ATmega8u2 sulla revisione R2 di Arduino Uno è diversa, e molto più semplice rispetto alla revisione R1 (dove era necessario saldare una resistenza), il firmware comunque va bene anche per la R1, sulla documentazione ufficiale c'e' solo la procedura per la R1 (la trovate qui: http://arduino.cc/en/Hacking/DFUProgramming8U2 )
io vi riporto quella per la R2 che ho testato personalmente (su Windows 7)
Scaricate il programma FLIP dal sito della Atmel
entrare nella modalita di aggiornamento firmware dell'ATmega8u2:
Con l'arduino acceso mandare e mantenere a terra il piedino di reset dell'ATmega8u2, si tratta del piedino maschio più in alto a sinistra di tutti come potete vedere dall'immagine.
poi mandare brevemente a terra il lato sinistro del condensatore che si vede nell'immagine, si tratta di quello più in basso dei due condensatori fra RX e RESET-EN.
scollegate il piedino reset che avevate mandato a terra prima
in gestione dispositivi di windows vedrete una nuova periferica, sicuramente non vi troverà automaticamente i driver quindi dovete farglieli trovare voi nella cartella di FLIP, nel mio caso C:\Program Files\Atmel\Flip 3.4.3\usb
ora potete aprire FLIP (per sicurezza fatelo come amministratore)
cliccare "select a target device"
selezionare AT90USB82
cliccare "select a communication medium"
scegliere "usb"
cliccare "open"
cliccare "load hex file" e selezionare il file da caricare
cliccare "run" in basso a sinistra
se tutte le lucine diventano verdi siete a posto
(a me una volta si era bloccato sulla "programazione" ho chiuso e riaperto flip e la seconda volta è andato tutto liscio)
cliccate "start application" (non so se questo passaggio serve o meno ma io l'ho fatto) e chiudete FLIP
scollegate e ricollegate l'usb per far rilevare l'arduino
PRIMA ANOMALIA (solo per utenti windows)
Noterete che i driver non vengono caricati automaticamente
il motivo è che questo firmware modificato cambia il VID/PID della periferica dall'originale
USB\VID_2341&PID_0001&REV_0001
a
USB\VID_03EB&PID_204B&REV_0001
sembra essere un bug nel source ufficiale arduino che imposta un VID PID di test... avrei anche trovato dove cambiare il codice ma non riesco a fare la build del firmware, se qualcuno è in grado mi faccia sapere!
La soluzione comunque è molto semplice: andate nuovamente in gestione dispositivi e forzate il driver di arduino prendendolo dalle cartelle dell'arduino-ide, non basta dirgli di cercare nella cartella dovete proprio forzare il driver scegliendo l'opzione "carica driver da disco" o qualcosa di simile.
SECONDA ANOMALIA
quando vi collegherete all'arduino con il serial monitor dell'arduino-ide potreste notare che l'arduino riceve sulla seriale uno o più caratteri "strani" come questo:
ð
io l'ho notato utilizzando uno sketch che ripete in output l'input ricevuto sulla seriale
la mia teoria è che l'arduino-ide durante la connessione seriale di mezzo secondo che attiva il reset tenti di inviare anche qualche dato, sostengo questo perchè non ho notato questi caratteri in altri collegamenti seriali diversi dal serial monitor dell'arduino-ide, probabilmente conoscendo la baud rate si potrebbe capire anche cosa invia esattamente (ma a 115200 si vedono solo caratteri strani)
Spero di esservi stato utile! Ciao