per un prototipo sto utilizzando arduino uno con ethernet shield.
Ho fatto realizzare un PCB dove arduino e la shield vengono inserite una di fianco all'altra.
In allegato schema elettrico.
Il problema è che in alcune situazioni la shield smette di trasmettere dati, per poi riprendere correttamente.
Dopo alcune prove mi sono accorto che smette di funzionare quando il pin 4 (a cui è collegato un optoisolatore) viene attivato, nel momento in cui viene disattivato la shield riprende a trasmettere!
Facendo delle ricerche ho scoperto che il pin 4 è utilizzato dalla sd card che comunque non uso. Quindi inizio a sospettare che a prescindere quel pin non posso utilizzarlo!
Purtroppo ormai ho fatto stampare il PCB quindi devo trovare il modo di adeguarmi.
La domanda è la seguente: secondo voi se taglio fisicamente il pin 4 dalla ethernet shield (che è posta di fianco ad arduino) risolvo il problema oppure quel pin serve per forza?
Come hai visto quello è il pin di SS del bus SPI relativo alla SD ...
... lo puoi tagliare (se non usi la SD), ma lo DEVI forzare a livello HIGH sulla shield, quindi ... puoi saldarci una resistenza di pull-up.
Il primo è quello descritto sopra dell'optoisolatore che facendo dei test sembra risolversi mettendo la resistenza di pull-up.
L'altro problema è che arduino e la shield sembrano NON funzionare se messe una di fianco all'altra.
Il PCB che ho fatto stampare ha due slot distinti!
Praticamente se le incastro una sopra l'altra e le attacco al PCB "a sandwich" (con il pin 4 della ethernet shield tagliato e la resistenza di pull-up inserita da sopra) tutto funziona correttamente.
Se invece sempre con le stesse modifiche le metto una di fianco all'altra arduino funziona ma l'ethernet non comunica!.
Non so proprio cosa pensare... l'unica motivazione che mi viene in mente è che lo schema elettrico del PCB ha qualcosa che impedisce alle due schede di comunicare. Per comodità inserisco le parti che potrebbero dare problemi:
Mah, a parte ricontrollare che i pin usati non vadano in conflitto con quanto dice il reference della "Ethernet 2" (ma per la Ethernet è la stessa cosa, cambia solo il chip) :
Arduino communicates with both the W5500 and SD card using the SPI bus (through the ICSP header). This is on digital pins 10, 11, 12, and 13 on the Uno and pins 50, 51, and 52 on the Mega. On both boards, pin 10 is used to select the W5500 and pin 4 for the SD card. These pins cannot be used for general I/O. On the Mega, the hardware SS pin, 53, is not used to select either the W5500 or the SD card, but it must be kept as an output or the SPI interface won't work.
Note that because the W5500 and SD card share the SPI bus, only one at a time can be active. If you are using both peripherals in your program, this should be taken care of by the corresponding libraries. If you're not using one of the peripherals in your program, however, you'll need to explicitly deselect it. To do this with the SD card, set pin 4 as an output and write a high to it. For the W5500, set digital pin 10 as a high output.
... la cosa che normalmente da più fastidio è la lunghezza dei collegamenti SPI o dove questi passano (se questi sono fatti con fili).
Comprendo che tu abbia già fatto il PCB in questo modo, ma non capisco però perché scegliere di mettere una shield su connettore separato, riportando tutti i pin, invece di metterla dove è stata pensata, ossia sopra ad Arduino!
A quel punto invece di una shield prendevi un qualsiasi modulino con l'ENC e collegavi solo i pin che servono, senza dover fare tanti giri...
liuk88:
Alla fine la sto utilizzando a "sandwich", credo per ora adotterò questa soluzione che in fin dei conti va bene lo stesso.
Non solo va bene lo stesso, ma ti fa risparmiare un PCB inutile (almeno per questo scopo) e spazio (lo spazio totale è minore se inserisci lo shield sopra ad Arduino rispetto a metterlo "affiancato"). Ripeto, se vuoi qualcosa da mettere separato non comprare shield, prendi un modulo "semplice" che poi collegherai tu ad Arduino con appositi cavi/connettori (o a volte uso un prorotype shield come QUESTO e, dopo aver verificato che il prototipo funziona usando una breadboard, ci saldo sopra i componenti o i connettori che mi servono per gli altri elementi, che collego con qualche flat).