L'autoreset è una funzione che permette di trasferire lo sketch, una volta compilato, su Arduino senza dover premere fisicamente il tasto di reset per avviare il bootloader.
Dal punto di vista elettronico viene sfruttato il segnale standard della RS232 DTR (Data Terminal Ready) che normalmente si trova a 1 logico e va a 0 durante la trasmissione dei dati.
DTR è connesso con il pin reset dell'ATmega tramite un condensatore da 100 nf che assieme alla resistenza di pull up da 10k crea un vero e proprio circuito RC con la relativa costante di tempo che vale 100nf * 10 k = 1ms.
Rammento che la costante di tempo di un circuito RC è il tempo necessario affinché la tensione passi da 0V a 0.707 * Vmax, il tempo necessario per la carica completa del condensatore è circa 6RC.
Sa controlliamo con il DSO cosa succede al segnale DTR, in ingresso al condensatore, e cosa succede sul reset quando l'IDE inizia a programmare l'ATmega osserviamo un impulso verso 0 logico sul DTR che dura circa 120 ms e un rapido impulso verso 0 logico sul reset.
Analizzando in dettaglio solo l'impulso sul reset possiamo osservare che questo rimane a 0 logico reale, tensione minore di 0.8 V, per oltre 140 us e arriva a 3.5V in poco meno di 1 ms (5V0.707 = tensione per costante di tempo) come atteso.
Le due immagini allegate sono gli screen capture del DSO, la traccia 1 (gialla) è il reset, la traccia due (azzurra) è DTR, la prima immagine è il ciclo completo del segnale DTR, circa 120 ms, la seconda immagine è il dettaglio dell'impulso di reset.
Nel post successivo ci sono tre ulteriori immagini che illustrano nel dettaglio cosa succede collegando una resistenza da 10k tra Reset e +5V, una resistenza da 330 ohm tra Reset e +5V e un condensatore da 10 uf tra Reset e +5V.
Nel caso della resistenza da 10k l'effetto è solo quello di dimezzare la costante di tempo, si mette in parallelo alla 10k già presente su Arduino riducendola a 5k.
Nel caso della resistenza da 330 ohm c'è una drastica riduzione della costante di tempo però reset rimane a 0 logico per poco più di 1 us e questo basta per resettare l'ATmega.
Il terzo test è con il condensatore da 10 uf collegato tra reset e +5V, in pratica in parallelo alla resistenza di Pull Up, in questo caso la costante di tempo viene quasi azzerata perché il condensatore fornisce quasi istantaneamente tutta la corrente necessaria per caricare la capacità da 100 nf, bastano meno di 100 ns, impedendo il reset dell'ATmega.