Pin prima come input e poi come output

Il topic è a livello di curiosità ma neanche troppo :grin:
Mettiamo di aver finito i pin e che ne rimanga uno solo analogico, sarebbe possibile leggere in input un valore variabile e poi usare lo stesso pin come output?

L’idea sarebbe quella di impostare un timer in base alla lettura del pin analogico sul setup e poi non variarlo più o anche se variato non deve essere preso in considerazione fino al prossimo riavvio.

Eventualmente come dovrebbe essere fatto il circuito?

Grazie

Ho fatto la stessa domanda un anno fa circa ... vediamo come ti rispondono : :D

pablos: vediamo come ti rispondono : :D

sqr(1764) :D

Non l’ho capita chissà pablos?

sqr(1764)=42 ;)

@erpomata: teoricamente è possibile, il pinMode puoi farlo in qualunque punto del codice. Il problema è però questo: mettiamo che hai un segnale in ingresso su un pin di Arduino impostato come input. Se ora quel pin lo commuti su output e lo imposti a LOW fai un corto a massa. Viceversa, se hai su un pin una linea collegata a massa e metti il pin come output con un segnale HIGH: bruci il GPIO.

Infatti teoricamente immaginavo fosse possibile, ma non riuscivo a spiegarmi il circuito.

Grazie

Una risposta tipo RND(1764) :) che risultato darà ... ambarabacicicocò

Si potrebbe provare con un line buffer I/O http://www.onsemi.com/pub_link/Collateral/MC74AC244-D.PDF (link di esempio) questi dispositivi hanno un pin di controllo della direzione.... non trovo uno schema completo adesso, un po' di tempo fa ne avevo trovato uno che poteva addattarsi, comunque con un po' di resistenze di pull up-down e qualche diodo si dovrebbe riuscire a evitare un corto secco :blush:, cercare di rimanere nei limiti di corrente nel caso un pin output in high sia connesso a gnd

Salvo tutti i link di interesse, da qualche parte l'ho messo se lo trovo lo posto, il casino è che ne ho troppi e mal organizzati :)

pablos: Una risposta tipo RND(1764) :) che risultato darà ... ambarabacicicocò

Continuo a non capire cosa centri la radice di 1764 in questa discussione

Continuo a non capire cosa centri la radice di 1764 in questa discussione

va bene, ma per quello che riguarda un ipotetico utilizzo di un line buffer bidirezionale? nessuna opinione visto che hai fatto la domanda? http://www.petervis.com/Raspberry_PI/The_Cambridge_Boffin_Raspberry_Pi_GPIO_Buffer_Project/Boffin_Raspberry_Pi_GPIO_Buffer_Circuit_Reference.html

pablos: nessuna opinione visto che hai fatto la domanda?

Bè sembra interessante ma non sono in grado di dare opinioni, dovrei vedere un' applicazione pratica.

erpomata:

pablos: Una risposta tipo RND(1764) :) che risultato darà ... ambarabacicicocò

Continuo a non capire cosa centri la radice di 1764 in questa discussione

C'entra per questo:

leo72: sqr(1764)=42 ;)

Non hai letto la "Guida galattica per autostoppisti" ;) Leggi qui

Effettivamente l'avevo sentito e mail letto(o approfondito). Più tardi lo leggo. ;)

Nel ArduTester i pin analogici vengono usati sia come ingressi analogici che come uscite digitali.

Grazie per l’indicazione, purtroppo quel progetto è un pò troppo complesso per le mie conoscenze.
Potresti fare un estratto che faccia solo quello che serve?

PaoloP:
Nel ArduTester i pin analogici vengono usati sia come ingressi analogici che come uscite digitali.

Ma in quel progetto la cosa ha un senso.

erpomata: Grazie per l'indicazione, purtroppo quel progetto è un pò troppo complesso per le mie conoscenze. Potresti fare un estratto che faccia solo quello che serve?

Un esempio? vuoi attivare/disattivare il segnale PWM di un pin agganciato ad un timer. Puoi semplicemente passare da output ad input:

while (1) {
  pinMode(pin, OUTPUT); //segnale sul pin
  delay(500);
  pinMode(pin, INPUT); //segnale assente
  delay(500);
}

Si ok ma questo problema:

leo72: @erpomata: teoricamente è possibile, il pinMode puoi farlo in qualunque punto del codice. Il problema è però questo: mettiamo che hai un segnale in ingresso su un pin di Arduino impostato come input. Se ora quel pin lo commuti su output e lo imposti a LOW fai un corto a massa. Viceversa, se hai su un pin una linea collegata a massa e metti il pin come output con un segnale HIGH: bruci il GPIO.

Come si risolve?

Si risolve prevedendo il problema in fase di scrittura del codice e con alcuni accorgimenti hardware. Ad esempio aggiungendo una resistenza di limitazione sul pin in modo che se metto il pin in output con segnale High e lo collego a massa, la resistenza mi limiti la corrente per impedire di fare un corto.

Poi io non so che stai facendo per cui sto solo dando dei suggerimenti. ;)

Non sto facendo assolutamente nulla. Sto solo indagando se la via è percorribile. :D