Salve ragazzi, avevo bisogno di un'informazione. Si può cambiare "dinamicamente" nel loop il PINMODE di un I/O... Ho bisogno di cambiare una porta analogica (è indifferente quale) da input (durante il quale leggerà dei valori da 0 a 5v) ad output (durante la quale passerà da LOW ad HIGH)... Ovviamente questa porta analogica è collegata su un 74HC4067 (multiplexer), il quale switcherà i segnali (quindi fisicamente non passerà da input ad output sullo stesso canale, ma su canali diversi selezionati tramite mux)...
Se è possibile farlo, ci sono accorgimenti da tenere lato HW e/o SW? (delay(), resistenze in pullDW/UP, ecc)
Ovvio che puoi farlo ... con le dovute precauzioni ... devi evitare collegamenti diretti del pin con i segnali di GND e Vcc.
Immagina che hai il pin configurato in INPUT e che lo colleghi con un interruttore direttamente a GND per dare il segnale LOW. Se in tali condizioni, per sbaglio passi ad OUTPUT e magari metti il pin HIGH ... ecco fatto un bel corto !
Quindi, pinMode() lo puoi chiamare quando ti pare ... occhio solo alle condizioni al contorno, perché si possono fare danni
Ho capito alla perfezione quello che vuoi dire Guglielmo.
Scendo un attimo nel particolare per rendere l'idea di cosa voglio fare.
Il predetto pin in condizioni di output deve muovere il wiper sull'ingresso U/D di un X9C102S. Successivamente deve leggere come input il voltaggio in uscita da LM317 tramite partitore di tensione separato (dimensionato sulla tensione massima in uscita consentita dal LM317 con il potenziometro digitale a 0, ovvero 9v)... il tutto ripetuto per 4 (LM317 x 4 X9C102S x 4)... ecco la scelta del 74HC4067 anche se in realtà bastava un 74HC4051 (che non ho :D).
Le altre condizioni di low e high per "pilotare" i 4 X9C (ovvero i segnali richiesti su INCREMENT e CS) li gestirò con un 74HC595. Anche se nella realtà, da programmazione, muoverò un solo X9C alla volta, anche perchè la scelta è dettata dal 74HC4067...
Si lo so, è un po da folli...
considera che lo faccio solo per scopo educativo...
È possibile, ma da stare attento.
Sul pin Arduino hai:
momento 1: un H o un L per pilotare il Potenziometro digitale
momento 2: Leggi una tensione si un LM317 (uscita che da fino a 1,5A) tramite un partitore resistivo. La tensione puó influenzare l' entrata del potenziometro.
Non puoi usare il potenziometro per tensioni maggiori di +/-5V. e il Commune della resistenza regge al massimo 4,4mA.
considera che lo faccio solo per scopo educativo...
Questo non vuol dire che si puó fare tutto.
Non capisco perché non vuoi aggiungere un altro 595 in cascata al primo e piloti i potenziometri totalmente da questi.
Leggi una tensione si un LM317 (uscita che da fino a 1,5A) tramite un partitore resistivo. La tensione puó influenzare l' entrata del potenziometro.
ma non leggerò il valore sul partorire a resistenza variabile del pin Adj del LM317, ne farò uno a parte a resistenze fisse che leggeranno la Vout del LM317.
Non puoi usare il potenziometro per tensioni maggiori di +/-5V. e il Commune della resistenza regge al massimo 4,4m
Ed è questo il vero limite del XC9102S. 4,4mA. sapendo che già a 5V di Vout deve reggere 7mA...
Quindi stavo pensando di passare ad un ULN2803a in modo da mettere su ogni uscita una resistenza da "attivare" singolarmente (oppure attivando più porte contemporaneamente quindi mettendo le resistenze in parallelo per variare la Vout) e gestirlo (mi riferisco al ULN2803a) con 74hc595... Considerato che se voglio mettere 4 LM317 posso sempre aggiungere i 74HC595 in cascata...
ma non leggerò il valore sul partorire a resistenza variabile del pin Adj del LM317, ne farò uno a parte a resistenze fisse che leggeranno la Vout del LM317.
Porti la tensone del paritore resistivo sul pon u/d del Potenziometro digitale. Questa interferenza dicevo.
Non puoi usare il ULN2803 perché non porta l' uscita del tutto a massa ma resta intorno ai 1-2V. Devi usare dei N-MOSFET.
Primo consiglio di tipo "pratico" ... in serie al pin, piazzaci fissa una resistenza da 510 ohm (o 680, o 470, un valore simile insomma) ... nelle letture non influisce (l'impedenza di ingresso media di un pin in lettura e' superiore a 100MOhm) ... nell'uso come output, se ci piloti una porta o il gate di un mosfet, non influisce piu di tanto (se dimensioni correttamente la R di pulldown del gate, sui 100K va bene) ... ed allo stesso tempo, in caso di corto, limita la corrente che circola nel pin a 10mA circa, valore che i pin reggono ...
Ho un solo dubbio, se colleghi fisicamente il gate del mosfet ed il partitore di lettura dal 317 allo stesso pin, non e' che poi, mentre leggi, la tensione dal partitore ti attiva il mos ?
In pratica, vorresti costruire un selettore per le tensioni di uscita, comandato dalla logica ... con l'ULN te lo sconsiglio, perche' ogni uscita ha una caduta di tensione media di 1.5V (ma varia leggermente in funzione della corrente, fino ad un massimo di 2V) ... o usi un driver con uscite a mosfet, o dei mosfet singoli pilotati direttamente dal 595 (conoscendo la RdsOn dei mosfet puoi calcolarti i valori delle resistenze per avere le tensioni che vuoi) ... se la rete resistiva deve poter variare molti valori e non solo 8 valori fissi, ti consiglio il sistema della rete "R-2R", che ti permette di cambiare a passi fissi pilotandola in binario ...
infatti avevo notato i diodi interni al ULN che ovviamente portano ad una caduta di tensione e quindi ad una variazione del risultato.
Etem mi consigli un driver con uscite a mosfet?
Non sono i diodi interni, ma proprio i darlington, che ti "mangiano" una parte della tensione, quella tipica dei transistor ... in quel caso, circa 1.5V ... dato l'uso che ne vuoi fare, usare un driver non ha molto senso, prendi 8 mosfet, anche dei banali 2N7000 (ci sono anche SMD, volendo) da pochi centesimi e 16 resistenze, 8 da 100K ed 8 da 1K, ed hai risolto il problema ... con 5V di pilotaggio di gate non possono reggere piu di 300mA circa, ed hanno una RdsON sui 6 ohm, ma dovrebbero comunque andare meglio di un ULN, e complessivamente costare di meno di un driver con uscite a mosfet ...
mi viene solo un dubbio. nel datasheet del X9Cxxx viene riportata la possibilità di pilotare l'LM317... dai calcoli che ho fatto, usando appunto la formula riportata, per rimanere nel range dei valori ammessi, dovrei usare una R1 da 3k per avere una Vout da 6,41V con IAdj = 10mA ed R2 =10k (X9C103)
Quindi avrei di conseguenza 4,94v sul X9C a 2,43mA dissipando 15,63mW... Un po a limite per la Potenza dissipata ma si potrebbe fare...