Info alimentazione, auto switch e reset

La versione UNO dell'Arduino include un componente che fa l'autoswitch a seconda dal tipo di alimentazione che viene applicata alla scheda, usb oppure tramite jack.

E se sono presenti entrambi? Da quello che ho capito l'alimentazione sul Vin è presente solo se si alimenta la scheda da jack, il mio dubbio riguarda invece l'alimentazione della scheda, se in caso di doppia alimentazione prenda la corrente dalla usb o dal Vin.

Ho inoltre come la pressione del tasto reset interrompe l'alimentazione della scheda (che avvenga sia da usb che da jack), ma non quella della Vin, con conseguente "non riavvio" delle periferiche collegate a tale pin.

A questo punto introduco anche la possibilità del reset via software. Argomento trito e ritrito, lo so, però a quanto pare non mi è abbastanza chiaro :cold_sweat:

Se non sbaglio è necessario collegare il pin Reset al prin Ground, cosa che accade alla pressione del bottoncino.

Ho letto qualche cosa qua http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1242921510/all Citando Massimo Banzi

. Chiudere e riaprire la porta seriale , questo fa resettare il processore. e' la tecnica che usiamo per caricare i programmi sull'arduino quando premi "Upload to IO Board"

Mi pare questo sia il miglior metodo per effettuare un reset che sia equivalente alla pressione dell'apposito tasto, ma in ogni caso non resetterebbe la Vin.

Pensavo, per risolvere ciò, di fare uso di un transistor (fulminatemi se dico castronerie!!): colleghiamo il transistor tra il Vin e la periferica che prende corrente da tale pin, e l'altro polo al pin 3,3V o 5V. Resettando da pulsantino, questi 2 pin non dovrebbero ricevere più tensione, e quindi il transistor chiuderebbe il collegamento tra Vin e periferica. Terminato il reset il transistor dovrebbe ricevere nuovamente corrente e quindi verrebbe erogata nuovamente la corrente alla periferica collegata al Vin. Ovviamente anche il reset software raggiungerebbe lo stesso risultato.

Ho detto così tante fesserie? :D

GianfrancoPa: La versione UNO dell'Arduino include un componente che fa l'autoswitch a seconda dal tipo di alimentazione che viene applicata alla scheda, usb oppure tramite jack.

Vale anche per la 2009.

E se sono presenti entrambi? Da quello che ho capito l'alimentazione sul Vin è presente solo se si alimenta la scheda da jack, il mio dubbio riguarda invece l'alimentazione della scheda, se in caso di doppia alimentazione prenda la corrente dalla usb o dal Vin.

Vin è collegato subito dopo il diodo di protezione in serie all'ingresso da jack, quindi non importa se colleghi l'alimentazione esterna al jack o al connettore Vin, il comportamento è lo stesso, cioè l'eventuale alimentazione da USB viene interrotta se presente l'alimentazione esterna. Attenzione che collegando al contrario Vin si possono fare danni fisici ad Arduino perché non c'è la protezione del diodo contro le inversioni di polarità, in realtà Vin è più da intendersi come uscita per prelevare la tensione di alimentazione esterna che come ingresso.

Ho inoltre come la pressione del tasto reset interrompe l'alimentazione della scheda (che avvenga sia da usb che da jack), ma non quella della Vin, con conseguente "non riavvio" delle periferiche collegate a tale pin.

Il tasto reset non interrompe in nessun modo l'alimentazione, non importa da dove proviene, si limita a chiudere verso GND la linea di reset di Arduino che è collegata sia al pin reset dell'ATmega che all'omonimo contatto sul connettore. Se una shield, o altro dispositivo elettronico, è collegato alla linea di reset, e deve essere prevista esplicitamente sulla shield, premendo il tasto viene resettato il tutto, altrimenti si resetta solo l'ATmega.

Mi pare questo sia il miglior metodo per effettuare un reset che sia equivalente alla pressione dell'apposito tasto, ma in ogni caso non resetterebbe la Vin.

In realtà il fatto che Arduino resetti ogni volta che si apre la comunicazione sulla seriale virtuale è un'arma a doppio taglio, da un lato fa comodo perché non si deve premere il tasto reset ogni volta che si deve programmare, dall'altro è un problema proprio perché si resetta e interrompe l'esecuzione del programma, cosa che può risultare una grossa scocciatura.

colleghiamo il transistor tra il Vin e la periferica che prende corrente da tale pin, e l'altro polo al pin 3,3V o 5V.

E' una cosa inutile, se una shield, o altra elettronica, collegata ad Arduino ha bisogno di essere resettata assieme ad Arduino possiede già il contatto reset da collegarsi a quello di Arduino, ovvero in fase di progetto è stata prevista la funzionalità di reset.

uhm, faccio un esempio specifico.

L'usb host shield della sparkfun si alimenta dal Vin, per cui e' necessario fornire corrente dal jack (fornisco corrente esterna sempre e solo dal jack, mai dal vin direttamente!). Al suo interno possiede anche un pulsante di reset, collegato al pin reset e si comporta in maniera tale e quale a quello presente sull'usb. Diciamo che l'unica nota positiva di questo pin e' che utilizzando tale scheda, il pulsante reset sull'arduino risulta poco accessibile.

Tale reset però non resetta la scheda stessa (che si alimenta dal Vin), ma solo l'arduino... Così com'è un reset totale non è possibile se non staccando/riattaccando la corrente aggiuntiva fornita dal jack.

Se tra il vin dell'arduino e quello corrispondente di tale shield, ponessi questo fantomatico transistor, collegato come detto nel primo post, otterrei un riavvio totale?

La USB Host shield deve essere alimentata tramite Vin, e di conseguenza da una sorgente esterna, perché per poter espletare la sua funzione di porta USB Host deve essere in grado di alimentare un device USB esterno fornendo fino a 500 mA come da specifiche USB. L'USB Host ha un suo comando di reset specifico collegato a D7 (pin 7) di Arduino, serve solo ed esclusivamente per inizializzare su comando la shield, non è necessario resettarla ogni volta che si resetta l'ATmega, anche perché viene fatto, se necessario, dallo sketch caricato su Arduino che utilizza questa shield, la relativa libreria contiene un apposito comando per il reset.

Eppure ti assicuro che dopo un pò che la scheda funziona comincia a ricevere solo errori, con la necessità di riavviare tutto quanto per ricominciare a far funzionare tutto correttamente. Solo che il semplice reset non basta, è necessario staccare/riattacare l'alimentazione esterna dal jack.

Possibilmente le istruzioni di inizializzazione dello shield non sempre riescono a resettare a dovere. Non saprei sinceramente.

In ogni caso, un transistor posto in quella maniera, consentirebbe alla Vin di interrompersi per un attimo?

Se ricevi errori vuol dire che c'è un problema nel software, non è che risolvi col reset :) Se ti vai a vedere la libreria e gli esempi puoi vedere da solo che esiste lo specifico comando per il reset e che tale comando viene usato all'interno dello sketch quando necessario. Se una shield necessità realmente di essere resettata premendo il relativo pulsante stai pur certo che tale funzione è già implementata, nel caso il reset serva a comando per particolari condizioni, come nel caso della shield in oggetto, questo è sempre controllato da un pin di Arduino. In tutti i casi sulla shield hai uno switch che serve per accenderla e spegnerla, se proprio dovesse risultare necessario un resettone di questo tipo, ma è molto improbabile, allora puoi usare questo switch.

Farò sicuramente un controllo più approfondito, e ovviamente vi informerò dei risultati.

Grazie mille in ogni caso!