I2C+W5100

Salve a tutti volevo sapere se è possibile che la ricezione di dati tramite i2c mandi in conflitto l'upload dei dati tramite shield ethernet. Grazie

Non dovrebbe dato che usano bus e pin totalmente differenti, però … c’è anche da vedere come hai scritto il programma e le tempistiche con cui usi le due cose … perché entrambe usano gli interrupt e quindi, problemi possono sempre saltare fuori … ::slight_smile:

Guglielmo

Questo è il codice del mega …considera che prendo i dati tramite nrf24 e li porto su un arduino uno che tramite i2c invia al mega i dati e quest’ultimo carica i dati sul sito.

Il problema dove potrebbe essere?

il problema “apparentemente” si presenta solo quando collego il cavo ethernet, e manda in crash l’arduino uno facendogli perdere la condizione per ricevere dati tramite nrf24

P.s. il codice è troppo lungo e l’ho dovuto allegare

_9_WebRelay.ino (8.59 KB)

ricezione nrf e invio i2c.ino (7.15 KB)

invio nrf24.ino (659 Bytes)

No, aspetta, fammi capire, hai due schede, un Arduno UNO ed un Arduno MEGA, collegate tra loro in I2C, e ok, ma poi, che hardware c'è montato su ciascuna scheda ? ? ?

Guglielmo

Dato che sia la scheda Ethernet e la NRF24 usano lo stesso Bus SPI ( pin 13, 12, 11 sulla UNO ), per poter selezionare solo uno alla volta devono avere il CS diverso
Sulla Ethernet è fisso sul pin 10, sulla NRF24 lo puoi scegliere tu, ma è chiaro che non può essere sempre il pin 10, visto che è già usato

#define CE_PIN  9
#define CSN_PIN 10
RF24 radio(CE_PIN, CSN_PIN); // Stabilisce la comunicazione

brunello22:
Dato che sia la scheda Ethernet e la NRF24 usano lo stesso Bus SPI ( pin 13, 12, 11 sulla UNO ) ...

... la mia domanda voleva capire proprio quello ... dove sta la scheda Ethernet? Sulla MEGA? e il nRF24? Solo sulla UNO? se su entrambe ... perché?

Guglielmo

Allora

Arduino uno esterno:invia tramite nrf24 i dati

Arduino uno interno: riceve i dati tramite nrf24 e lo invia tramote i2c

Arduino mega interno: riceve tramite i2c i dati e li uploada su un webserver tramite shield ethernet

Quindi avevo capito bene, NON c'è un nRF24 dove c'è la scheda Ethernet ... quindi NON ci può essere alcun conflitto sul bus SPI ...

Ricapitolando, se ho ben capito, il problema che hai è che: quando colleghi il cavo ethernet alla scheda ethernet su Arduno MEGA, si blocca Arduno UNO connesso in I2C e dove è presente un nRF24. Giusto ?

Un altra cosa (NON ho guardato i sorgenti) chi tra la UNO e la MEGA fa da I2C "master" e chi invece è "device (slave)"?

Guglielmo

Forse devo montare delle resistenze di pull-up?

Cmq il mega è slave e l'uno master

Potrebbe anche essere che arduino non riesce a caricare menre riceve?

Ah dimenticavo al mega è collegato un lcd

gpb01:
Quindi avevo capito bene, NON c'è un nRF24 dove c'è la scheda Ethernet ... quindi NON ci può essere alcun conflitto sul bus SPI ...

Ricapitolando, se ho ben capito, il problema che hai è che: quando colleghi il cavo ethernet alla scheda ethernet su Arduno MEGA, si blocca Arduno UNO connesso in I2C e dove è presente un nRF24. Giusto ?

Un altra cosa (NON ho guardato i sorgenti) chi tra la UNO e la MEGA fa da I2C "master" e chi invece è "device (slave)"?

Guglielmo

Ho un aggiornamento, in pratica, il crash della ricezione si verifica quando sulla pagina web effettuo : 1) più accessi in sequenza

  1. accendo e spengo un relè (collegato al mega)

gpb01:
Quindi avevo capito bene, NON c'è un nRF24 dove c'è la scheda Ethernet ... quindi NON ci può essere alcun conflitto sul bus SPI ...

Ricapitolando, se ho ben capito, il problema che hai è che: quando colleghi il cavo ethernet alla scheda ethernet su Arduno MEGA, si blocca Arduno UNO connesso in I2C e dove è presente un nRF24. Giusto ?

Un altra cosa (NON ho guardato i sorgenti) chi tra la UNO e la MEGA fa da I2C "master" e chi invece è "device (slave)"?

Guglielmo

Hai per caso trovato una possibile soluzione?

Falco21:
Forse devo montare delle resistenze di pull-up?

Normalmente SI, ma nel caso di Arduno MEGA ... NO perché, anche se non mi sembra sia cosa documentata nel suo reference, se si esamina lo schema di scopre che su SCL ed SDA ci sono due resistenze di pull-up da 10K !

Piuttosto, di che distanza parliamo tra le due schede (lunghezza del bus I2C)?

Guglielmo

Ora è documentata ;). Avevo aperto un issue in merito ed è stato sistemato.

Il bello è che la libreria Wire abilita SEMPRE i pull-up interni...

SukkoPera:
Ora è documentata ;). Avevo aperto un issue in merito ed è stato sistemato.

Se parliamo dello stesso reference ... io non riesco a trovare la segnalazione, mi sai indicare dove è ? :confused:

Guglielmo

gpb01:
Se parliamo dello stesso reference ... io non riesco a trovare la segnalazione, mi sai indicare dove è ? :confused:

Guglielmo

Dopo ore e ore di osservazione sono convinto al 90% che il problema sta nell'upload dei dati su webserver, in quanto nel momento in cui non posso raggiungere il webserver, il passaggio dei dati nell'i2c continua a funzionare(testato con lcd)

Hanno preferito inserire una nota qua.

SukkoPera:
Hanno preferito inserire una nota qua.

... ahhhh ... perfetto ... proprio dove tutti vanno a cercare ... :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

Guglielmo

Quindi ?! Le metto o non le metto :smiley:

Leggendo su un forum ho letto che alcune persone dicono che il blocco della shield era dovuto al fatto che essa non riusciva a gestire tutte le richieste (non dichiarate tutte le variabili usate con il pinMode) Giusto o sbagliato?