Buongiorno,
sono nuovo e sto sperimentando.
Prima di provarci mi stavo facendo questa domanda, principalmente teorica, giusto per comprendere. Ma anche per evitare irrimediabili stupidaggini.
Ho letto della limitazioni dei pin in oggetto.
Se uso il pin 0 o il pin 1 per scopi anche semplici e li definisco subito in SETUP come INPUT o OUTPUT e carico lo sketch, da quel momento mi sono tagliato fuori da TX e RX e quindi non sarò più in grado di usare la USB per caricare altro?
O mi taglio fuori se nel LOOP continuo a interrogare lo status o a settarlo?
Nel caso specifico volevo collegare un pulsante a 0 o 1 che porta lo status a HIGH quando premuto. A riposo il pin in uso è collegato a massa tramite una resistenza alta (diciamo 100Kohm) per essere certo dello status LOW a riposo.
Riuscirò (ovviamente senza premere il pulsante) a prendere il controllo via USB e a caricare un nuovo sketch?
E staccando tutto da 0 e 1? Anche in quel caso non mi resterà altro da fare che un reset totale?
Il bootloader verfica la presenza di una comunicazione per l'upload di un nuovo programma prima che venga eseguito il setup, quindi potrai caricare un nuovo programma a patto però di staccare dai pin qualsiasi cosa che possa interferire con la comunicazione seriale.
Per il discorso reset totale, su Arduino per caricare un nuovo programma non è che si può fare parzialmente o totalmente, ogni nuovo programma sovrascrive completamente quanto precedentemente memorizzato (EEPROM esclusa ovviamente).
La domanda è, perché devi usare quei due pin? Sei a corto di pin (Hai usato anche gli analogici?)? Pura curiosità? Descrivi bene il tuo progetto, cosa usi e perché magari ci sono alternative che ti evitano i problemi descritti
Di nuovo salve.
Dalle risposte comprendo che la domanda non era chiara e ci riprovo.
Sono a corto di pin, ma mi stavo buttando avanti per il futuro visto che devo ampliare regolatori, sensori e attuatori. In questo preciso momento è solo accademia.
E' evidente che non è possibile utilizzare contemporaneamente seriale e pin I/O.
La mia domanda è relativa a tempi differenti. Prima usare la USB per caricare lo sketch, poi usare i pin. Quindi resettare e caricare un nuovo sketch.
E' possibile definire 0 e 1 come I/O ma poi, staccando l'hardware, riutilizzare la porta USB? In questo senso fabpolli quanto tempo c'è per ripristinare un nuovo sketch prima che parta SETUP? O bisogna fare qualche procedura fisica per forzare questa cosa?
Ringrazio tutti per la pazienza.
Luca
SI, puoi tranquillamente usare il pin 0 ed 1 come pin di I/O e poi usare la USB per caricare il programma (... nel momento del caricamento del programma NULLA deve essere collegato ai pin 0 ed 1) ...
... nel momento in cui chiedi di caricare il programma, il tuo PC segnala alla USB l'apoertura della seriale. Il chip convertitore USB <-> Seriale su Arduino, a questa segnalazione effettua un reset della MCU. Al momento del reset, prima di tutto entra in funzione il bootloader che va a vedere SE arrivano dati dalla seriale (... ed, in caso positivo, carica un nuovo programma), se non arriva nulla, passa il controllo al tuo programma il quale, a questo punto, con i pin 0 ed 1 può fare quello che vuole.
Tutto questo avviene comunque ogni volta che si fa un reset.
Magari questo non è il caso, ma mai nessuno che pone domanda e dice chiaramente di quale Arduino sta parlando. Uno ? Mega ? Leonardo ? Mrk ? Che hanno MCU diverse e on board chip diversi.
Se non lo si indica e si dice solo "Arduino", è sottinteso Arduino UNO e per quello ricevi risposte. Se uno sta usando altro ... o lo specifica o ... riceve risposte che possono essere errate.
In tutto questo, se si vuole "semplificare" io sarei per la programmazione tramite icsp. Il vantaggio sarebbe spremere gli ultimi byte di flash e non si deve fare cicli "togli/metti" che potrebbero essere noiosi.
Se si usano tutti i pin, il progetto è complesso, quindi meno pasticci ci sono meglio è!
speedyant:
Se si usano tutti i pin, il progetto è complesso, quindi meno pasticci ci sono meglio è!
Eh, ma se il progetto è complesso magari usa anche i pin 11, 12 e 13 (MOSI, MISO, SCK, più magari il 10 per SS), per cui non credo che si risolva molto...
E comunque se si lasciano liberi 0 e 1 è sempre meglio per poter fare anche debug o per avere "log" delle attività, mentre se non è possibile allora si staccano solo quei due pin e si procede (oppure basta usare una shield e qundi quando si programma basta estrarla per intero, senza fare "pasticci" di connettorini).