Ciao a tutti
Per un mio progetto di home automation avrei necessità di far convivere, su una stessa scheda Arduino, gli shield Arduino Ethernet (la prima versione, con lettore SD) e Mamba di Linksprite (Mamba - Narrow Band Powerline Communication Shield for Arduino - LinkSprite Playgound)
In base alla documentazione delle due schede, il primo problema che mi sono posto è stato quello di separare i pin SS, dal momento che entrambe sfruttano il protocollo SPI sui pin 'base' (SS=10, MOSI=11, MISO=12, SCK=13)
Ho ritenuto più semplice cambiare il comportamento dello shield Ethernet (avendo trovato più documentazione a riguardo) passando dal pin 10 al pin 7.
Per fare questo ho cambiato il file 5100.h in questo modo
*inline static void initSS() { DDRD |= _BV(7); }; *
inline static void setSS() { PORTD &= ~_BV(7); };
inline static void resetSS() { PORTD |= _BV(7); };
Dal punto di vista hardware ho usato dei cavetti 'jumper' per collegare il pin 7 di Arduino direttamente con il pin 10 dello shield Ethernet e mantenere il collegamento 'naturale' tra i pin 10 di Arduino e Mamba
Provando a caricare uno sketch di prova con le istruzioni minime di gestione di entrambi gli ambienti, dal punto di vista elettrico le due schede sembra che vengano inizializzate correttamente (i rispettivi led 'ready' danno un feedback corretto) ma, in realtà, il server HTTP esposto non risponde alle richieste del browser (l'indirizzo IP non viene riconosciuto come valido all'interno della LAN).
Lo shield Mamba sembra invece funzionare correttamente.
Vi riporto le istruzioni di inizializzazione delle due schede presenti all'interno dello sketch
byte mac[] = {
-
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };*
IPAddress ip(192,168,1,177);
EthernetServer server(80);
void setup() { -
// Mamba Shield*
-
PIN_OUTPUT(MOSI);*
-
PIN_OUTPUT(SCK);*
-
PIN_OUTPUT(nPLM_RESET);*
-
PIN_OUTPUT(PLM_CS);*
-
PIN_INPUT(MISO);*
-
spi_init( SPI_SPEED_F32 );*
-
// Ethernet shield*
-
Ethernet.begin(mac, ip);*
-
server.begin();*
Ovviamente ho provato anche a commentare le istruzioni relative alla inizializzazione della scheda Mamba, lasciando solo quelle relative alla Ethernet e mantenendo inalterata la configurazione hardware; in questo caso il server HTTP risponde correttamente.
In particolare la parte relativa a Mamba che sembra 'bloccare' il funzionamento della parte Ethernet (indipendentemente dalla sequenza con la quale inizializzo le due schede) è riconducibile all'istruzione
SPCR = _BV( MSTR ) | _BV( SPE ) | ( speed & SPI_SPR_MASK ) | _BV(CPHA);
presente all'interno dela funzione spi_init()
Per le mie conoscenze attuali non sono in grado di capire esattamente il significato di tutte le assegnazioni descritte ma sembrerebbe un conflitto nella gestione degli interrupt...
Rispetto a quanto ho fatto, manca qualche passaggio logico che ignoro?
I miei dubbi sull'argomento sono aumentati dal fatto che, relativamente alla scheda Ethernet in mio possesso, la documentazione in rete fa spesso riferimento ad un 'bug' che affligge le schede che montano il chip W5100 (e che dovrebbe generare proprio problemi di coesistenza tra shield SPI)
Al momento non sono però riuscito a mettere insieme 'i pezzi' per capire se le caratteristiche di questo bug possano affliggere una configurazione come la mia e se, quindi, i problemi che sto avendo siano causa del bug stesso (e quindi, potenzialmente, di un limite non superabile) o di un mio errore/passaggio mancante
Grazie in anticipo per qualsiasi suggerimento in merito
Carlo