Consigli I2C SPI Alimentazione e Distanze

Salve ho sviluppato un progetto alquanto macchinoso.
Ho utilizzato una scheda Arduino Mega.
Visto che alla mia scheda sono connessi varie schield il buon Guglielmo mi ha consigliato di alimentare parte dei dispositivi con un DC-DC Stepper Down così da non gravare tutto sulla scheda.

Dato che ho alcuni dispositivi sono connessi attraverso I2C (una Keypad con PCF8574, una RTC) +
un lettore SD connesso attraverso SPI che dovrebbero stare a circa 1m di distanza ho pensato di portare i due fili per SDA ed SCL più i 5 fili per SPI e prelevare l'alimentazione per tali dispositivi direttamente dal mio DC-DC Stepper Down visto che supporta fino a 3A.

Ora girovagando in rete ho trovato una cosa a cui non avevo pensato.... distanze di I2C anche se per SPI non ho trovato nulla di specifico.
Ho letto alcuni thread e mi sono sorti dei dubbi di natura tecnica, perciò prima di collegare il tutto e alimentare volevo chiedere dei consigli.

  1. Posso alimentare una shield connessa ad arduino attraverso I2C con un'alimentazione separata dalla scheda arduino?

  2. Anche in questo caso devo usare le resistenze di pull-up? Il valore mi sembri essere 1,5k dovrei posizionarle in prossimità della scheda arduino o del dispositivo I2C visto la distanza?

  3. la distanza di 1 mentro potrebbe crearmi problemi per I2C e SPI?

Vi ringrazio anticipatamente per il vostro aiuto.

  1. SI, a patto che i GND siano in comune

  2. SI, le resistenze di pull-up sono obbligatorie e le metti su Arduino

  3. SI, sono bus per corte distanze, 10 ~ 20 cm ... oltre potresti avere problemi. L'SPI poi che è più veloce del I2C è fatto per collegamneti "locali" (qualche cm) non certo mt. di distanza.

Guglielmo

gpb01:

  1. SI, a patto che i GND siano in comune

Perdonami la domanda molto stupia ma quindi devo collegare insieme il pin GND di arduino con il pin GND che alimenta le varie Shield?

gpb01:
2. SI, le resistenze di pull-up sono obbligatorie e le metti su Arduino

Ok. Perfetto. Ma se le resistenze di pull-up sono già presenti sulle Shield questo potrebbe crearmi problemi?
Potrei utilizzare le resistenze interne di pull-up utilizzando il codice pinMode(pin, INPUT_PULLUP)?

gpb01:
3. SI, sono bus per corte distanze, 10 ~ 20 cm ... oltre potresti avere problemi. L'SPI poi che è più veloce del I2C è fatto per collegamneti "locali" (qualche cm) non certo mt. di distanza.

Ok per il lettore SD (che sfrutta SPI) posso avvicinarlo e metterlo anche direttamente sulla scheda. Per l'IC2 ho visto varie proposte per allungare un pò le distanze, tipo cavo schermato particolare o altro....voi cosa mi consigliereste?

Avevo pensato anche a due schede arduino connesse tramite Bluethoot o wifi ma poi non saprei come gestire l'intrepput dalla prima scheda sulla seconda?
es. Premo il pulsante sul Keypad il pcf8574 genera un interrupt che gestisco. Ma tramite Bluethoot, seriale, Wifi o altro come faccio a generare l'interrupt sul'altra scheda??

Grazie per il vostro aiuto.

  1. Si, hai capito bene.

  2. Se già sono presenti sulle Shiled, non aggiungerne altre

  3. Il problema non è tanto la schermatura o meno, il problema è la capacità in pF/mt del cavo oltre una quale il segnale I2C viene irrimediabilmente distorto. L’unica è che fai qualche prova.
    Per distanze lunghe esistono degli integrati (es. P82B715) che permettono di estendere il bus I2C … ma non sono banali da usare.

Guglielmo

Ok. Grazie per le tue risposte molto esaustienti.

Grazie per l'auito.