Problema SPI con 74HC165

Salve, in un sistema composto da Mega2560, Ethernet + SD, TFT, RFID più vari sensori, ho aggiunto una schedina (OUT) composta da quattro 74HC595 in cascata per avere più uscite ed un’altra schedina (IN) composta da quattro 74HC165, sempre in cascata, per più ingressi (prima usavo un multiplexer). Mentre con i 74HC595 non ho alcun problema ad usare SPI, con i 74HC165 mi succede che non mi funziona più il MISO in Ethernet, in SD ed in RFID mentre mi funziona normalmente con i 74HC165. Per adesso ho ovviato usando la shiftIn() e, naturalmente, pin diversi. Premetto che ho già testato il funzionamento SPI su un altro sketch connettendo tra loro i 32 pin delle schedine IN e OUT.
Metto qui la parte di codice che uso, la enableGen(-1) è usata per mettere a HIGH i Latch di tutti i dispositivi che usano SPI.

//---------------------------------
void sh_reg_IN::refresh()
{
  digitalWrite(LoadPin, LOW);
  delayMicroseconds(5);
  digitalWrite(LoadPin, HIGH);
  delayMicroseconds(5);

#ifdef USE_SPI_SHIFT_REG_IN
  #ifdef BEGIN_TRANSACTION
  SPI.beginTransaction(settings);
  #endif
  enableGen(-1);
  digitalWrite(LatchPin, LOW);
  for(int i = 0; i < SR_CASCADE; ++i) 
    Values[i] = SPI.transfer(0);
  digitalWrite(LatchPin, HIGH);
  #ifdef BEGIN_TRANSACTION
  SPI.endTransaction();
  #endif
#else
  digitalWrite(ClockPin, HIGH);
  digitalWrite(LatchPin, LOW);
  for(int i = 0; i < SR_CASCADE; ++i) 
    Values[i] = shiftIn(DataPin, ClockPin, MSBFIRST);
  digitalWrite(LatchPin, HIGH);
#endif
}
//---------------------------------
void sh_reg_OUT::tranferValues()
{
#ifdef USE_SPI_SHIFT_REG_OUT
  #ifdef BEGIN_TRANSACTION
  SPI.beginTransaction(settings);
  #endif
  enableGen(-1);
  digitalWrite(LatchPin, LOW);
  for(int i = SR_CASCADE - 1; i >= 0; --i)
    SPI.transfer(Values[i]);
  digitalWrite(LatchPin, HIGH);
  #ifdef BEGIN_TRANSACTION
  SPI.endTransaction();
  #endif
#else
  digitalWrite(ClockPin, HIGH);
  digitalWrite(LatchPin, LOW);
  for(int i = SR_CASCADE - 1; i >= 0; --i)
    shiftOut(DataPin, ClockPin, MSBFIRST, Values[i]);
  digitalWrite(LatchPin, HIGH);
#endif
}

Buongiorno e benvenuto, :slight_smile:
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione … possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO … Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nel rispetto del suddetto regolamento nessuno ti risponderà, quindi ti consiglio di farla al più presto. :wink:

Risolto :slightly_smiling_face: dopo vari sbattimenti … pullup … pulldown … ho messo una resistenza in serie tra l’uscita dai 74HC165 ed il MISO … il primo valore che mi è capitato in mano, 4.7K ohm (non so se è troppo o poco … comunque così va)