Salve, è la prima volta che scrivo sul forum visto che è circa 2 giorni che ho un arduino 1 r3.
In pratica dovrei usare l'arduino per comandare dei led sulle uscite digitali, e fin qui nessun problema, li comando tramite porta usb/seriale e fanno quello che devono fare, il problema nasce quando mi scollego da HyperTerminal e mi ricollego, in pratica se accendo per esempio il led sull'uscita 13(quello onboard per intenderci) quando mi scollego rimane acceso e questo ovviamente mi fa pensare che il programma continua a girare, ma non appeno mi ricollego viene resettato, io vorrei che rimanesse nello stato in cui l'ho lasciato e non che mi si spenga. Ma lui interpreta un collegamento in seriale/usb come una pressione del tasto di reset?
grazie
ps: lo sto alimentando dalla porta usb, mi viene il dubbio che con una fonte esterna questo possa non succedere, illuminatemi vi prego.
edit: penso di aver scoperto il problema, sull'arduino c'è un RESET-EN che dovrebbe essere ponticellato e questo in pratica scatena un reset ad ogni nuovo collegamento in seriale/usb, se lo elimino in che rischi corro? posso comunque riprogrammare arduino oppure è necessario per la sua programmazione?
L'Arduino è strutturato in modo che ogni volta che viene aperta la connessione seriale venga spedito un comando di reset all'Atmega328. Questo modo di fare serve per come è strutturato l'invio degli sketch: sull'Atmega328 esiste un bootloader, un programma che viene eseguito al reset. Esso controlla se è in arrivo un nuovo sketch sulla seriale: in caso affermativo, scrive il programma nella memoria, in caso negativo avvia il programma già memorizzato.
Per disattivare questo comportamento, puoi interrompere la pista RESET-EN che trovi sulla schedina ma in questo modo la modifica ti impedirà di sfruttare l'autoreset per programmare il micro e sarai costretto a premere a mano il pulsante di reset (fino a quando non ricomponi la pista con una goccia di stagno). Alternativamente puoi disattivare il segnale DTR che viene spedito sulla porta seriale al momento in cui viene aperta la connessione: su Windows mi pare di aver capito che si possa fare dal pannello delle risorse, modificando le impostazioni della COM (non so di più, non uso Win), su Linux è più difficile e va usato uno script apposito per spedire solo i comandi che si desiderano (anche qui ne so poco perché è una cosa che non ho mai approfondito).
... o, ancora più semplice, puoi collegare il negativo di un condensatore elettrolitico da 10 uf o meno sul pin Reset ed il terminale positivo sui +5V: questo disabilita l'auto reset.
cyberhs:
... o, ancora più semplice, puoi collegare il negativo di un condensatore elettrolitico da 10 uf o meno sul pin Reset ed il terminale positivo sui +5V: questo disabilita l'auto reset.
Vero. Era passato così tanto tempo dall'ultima volta che avevo usato il C anti-autoreset che non mi ricordavo neanche di questa tecnica.
Grazie siete stati gentilissimi e molto esaustivi, userò il condensatore per impedirne il reset.
Anche se questo non è troppo comodo, ipotizziamo che io monti un'arduino in una locazione remota collegato a un pc su cui gira vnc, sul pc faccio girare un soft che mi controlla arduino e la connessione con il soft non è perenne, uso il condensatore e risolvo e qua ci siamo, ma se per esempio volessi cambiare sketch da remoto? Potrei usare un relè passo-passo collegato a un pin per aprire o chiudere il circuito del condensatore? Qualcuno ha gia attuato soluzioni simili? Oppure esistono sistemi migliori?
L'idea di un relé con memoria (passo-passo) non è malvagia, ma forse basterebbe un relé normale.
Arduno parte con relè non attivo (condensatore non inserito): in qualsiasi momento posso sostituire lo sketch.
Da remoto posso attivare il relé (consensatore inserito): ora non posso più sostituire lo sketch, ma posso ricollegarmi quante volte voglio senza fermare l'esecuzione del programma.
Se desidero ripristinare la situazione iniziale, non faccio altro che disattivare il relé
uwefed:
Non puoi avere la moglie ubriaca e la botte piena.
ciao Uwe
E invece si. Basta comprare due botti.
Nel senso che dovresti mettere un circuito secondario per abilitare o disabilitare il condensatore per disabilitare o abilitare la programmazione di Arduino.