Salve a tutti. Questo è il mio primo post su questo forum che leggo molto spesso per risolvere problematiche relative ad Arduino, ma su questo problema che vi riporto qui di seguito non sono
riuscito a trovare nulla.
Come da titolo, ho acquistato un modulo Ethernet ENC28J60 e uno Shield Nokia 6100 Sparkfun Compatibile (con controller Philips).
Purtroppo non sono riuscito a farli funzionare assieme, con il codice sotto riportato il Display viene inizializzato correttamente (lo sfondo diventa bianco) ma poi non riesco più a scriverci nulla, mentre l’Ethernet funziona regolare (Arduino prende un IP e riesco a pingarlo):
#include <gLCD.h>
#include <EtherCard.h>
#define BUFFER_SIZE 400
byte Ethernet::buffer[BUFFER_SIZE];
const char RST = 8;
const char CS = 9;
const char Clk = 13;
const char Data = 11;
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
gLCD graphic(RST,CS,Clk,Data,HIGH_SPEED); //High speed
void setup () {
// Inizializzo LCD
graphic.begin(0,0,0,PHILLIPS_0);
graphic.setBackColour(GLCD_WHITE);
graphic.Contrast(0x3F);
graphic.Clear();
// Inizializzo l'interfaccia Ethernet ENC28J60
ether.begin(sizeof Ethernet::buffer, mymac, 10);
ether.dhcpSetup();
// Scrivo qualche cosa a Display
graphic.setFont(12);
graphic.setForeColour(15,0,0);
graphic.print("TEST");
}
void loop (){
ether.packetLoop(ether.packetReceive());
delayMicroseconds(100);
}
Se inverto i “ruoli”, quindi inizializzo prima il modulo ethernet, il Display rimane scuro, mentre l’ethernet funziona regolarmente.
Entrambi i moduli usano il Bus SPI per poter comunicare con Arduino:
l’ENC28J60 usa i Pin 13, 12, 11 e il CS che ho impostato sul 10, mentre il Display Nokia 6100 i Pin 13, 11, il 9 come CS e l’8 il Reset.
Quindi i due moduli condividono la linea MISO/MOSI e CLK, mentre il pin di abilitazione CS è separato.
Ho provato anche a settare il CS per ogni modulo manualmente facendo un digitalWrite LOW o HIGH sul pin CS dell’eth o del display per escluderli alternatamente (LOW sul Display e HIGH sull’eth per escludere l’ETH, viceversa per escludere il Display), ma purtroppo senza successo.
Se li utilizzo separati, cioè tolgo dal codice la parte relativa all’inizializzazione del modulo ethernet, il display funziona correttamente, stessa cosa per l’ethernet.
Le librerie che uso sono la EtherCard per l’ENC28J60 (https://github.com/jcw/ethercard) e la ColorLCDShield per il display (https://github.com/sparkfun/ColorLCDShield/tree/master/firmware/Arduino/libraries/ColorLCDShield)
Potete darmi una mano?
EDIT: mi sono accorto che la libreria riportata nell’esempio non è la ColorLCDShield ma la gLCD-Library (GitHub - TCWORLD/gLCD-Library: Arduino Nokia 128x128 Graphic LCD Library.), comunque il problema si presenta anche con l’altra libreria.