Utilizzare shift register

Buongiorno a tutti, ho una perplessità che sicuramente voi saprete sicuramente risolvere: per un progetto che sto realizzando utilizzo delle ldr collegate ad arduino e le leggo attraverso i pin digitali utilizzando questo codice:

int RCtime (pin){
  measurement = 0;
  pinMode(pin, OUTPUT);
  digitalWrite(pin, LOW);
  delay(60);

  pinMode(pin, INPUT);
  while (digitalRead(pin) == LOW){:
    measurement += 1;
  }
  return measurement;
}

e collegando la fotoresistenza in questo modo https://www.circuitlab.com/circuit/hpwha3/screenshot/540x405/
E fin qui tutto bene. Il problema sorge quando devo controllare piu dei canonici 20 pin digitali di arduino uno. Per poter espandere il progetto infatto avrei bisogno di utilizzare 50-60 ldr ma non so come allargare i pin. Shift register possono essere la soluzione? Se si, posso impostare in pin input e output da sofware senza avre ritardi eccessivi?

No. non sono una soluzione per l' uso che vuoi fare. Dei shift-register non possono essere entrate e uscite, ma a secondo del modello sono entrate o uscite.

Puoi usare dei port expander con interfaccia I2C o SPI oppure dei multiplexer analogici tipo 74HC4067.

Non capisco perché non misuri la tensione del partitore resistivo?

Ciao Uwe

Scusami è vero per poter utilizzare 20 entrate al posto delle 6 analogiche ho scelto di usare quelle digitali

Concordo con Uwe: il circuito non può funzionare poiché il condensatore blocca il passaggio della corrente.

Cyberhs non ho capito scusa

O meglio ho capito cosa intendi ma il circuito è fatto apposta per misurare il tempo che impiega il condensatore a riempirsi e in base a quello sai quanto è la resistenza

Cybers, questa è una soluzione per usare ingressi digitali al posto degli analogici, si imposta il come OUT-low e si scarica il cap, si commuta come IN e si misura il tempo aspettando fino a che l'ingresso diventerà High,

per non avere ritardi eccessivi simonenascivera non usare pinMode(....) e digitalWrite(....) ma i comandi diretti ai bits ad esempio porta a high pin0 di portb: portb |= _BV(0);

Comunque questo sistema non funziona bene con gli i/o expander digitali perchè non hanno gli ingressi con soglia a scatto (trigger schmitt) , meglio che usi i multiplexer analogici 3X cd4051, o 2x cd4067 + 1 solo ingresso analogico + 6 pin per la selezione canale analogico

Icio, adesso ho compreso.

cyberhs:
Concordo con Uwe: il circuito non può funzionare poiché il condensatore blocca il passaggio della corrente.

Non é quello che ho detto. Un ciclo prevede mettere in corto il condensatore e poi caricarlo attraverso la resistenza /LDR. Il tempo é in qualche modo proporzionale alla resistenza del LDR.

Il "NO" era riferito al uso di Shiftregister per quel circuito.

@simonenascivera
Usa dei multiplexer analogici e entrate analogiche.
Per esempio SparkFun Analog/Digital MUX Breakout - CD74HC4067 - BOB-09056 - SparkFun Electronics

Ciao Uwe

@uwefed grazie per il consiglio! è la soluzione più rapida e semplice :wink: