Arduino e ENC28j60 e DHCP non funzionante

Il problema é che il codice viene compilato ma non viene assegnato l'iP in Dhcp e se provo a modificare il pin aggiungendo 10 caccia fuori l'errore citato.

e' quello lo strano... l'errore

domanda:

Che IDE e che Board usi ?

Ho provato sia con la 023 che con l'ultima versione. Arduino invece é UNO R3.

mah... sembra quasi che ci sia un'asegnazione in piu'...

pero' l'errore dovrebbe darlo sulla riga137... invece dice sulla 131. e ho reinstallato la libreria che dici tu.

che data hanno i file della libreria ?

Io utilizzo questa:

puoi dirmi che libreria stai utilizzando? E che IDE?

secondo me stai usando una libreria diversa.
Se apri il file EtherCard.h della libreria, le righe 137 e 138 sono cosi' :

static uint8_t begin (const uint16_t size, const uint8_t* macaddr,
uint8_t csPin =8);

Buon Anno!

La libreria corrisponde è la stessa, ho provato lo sketch testDHCP ma:

[testDHCP]
MAC: 74:69:69:2D:30:31
Failed to access Ethernet controller
Setting up DHCP
DHCP failed
My IP: 0.0.0.0
Netmask: 0.0.0.0
GW IP: 0.0.0.0
DNS IP: 0.0.0.0

ho contattato il venditore e mi ha confermato le libreria. Dove sbaglio??

Se invece uso le librerie sempre consigliate dal venditore ENC28J60 e ad esempio provo uno degli examples il risultato è sempre lo stesso:

Webserver

In file included from /Users/bonavoglias/Documents/Arduino/libraries/ENC28J60/Ethernet.h:5,

from WebServer.pde:7:
/Users/bonavoglias/Documents/Arduino/libraries/ENC28J60/Client.h:22: error: conflicting return type specified for 'virtual void Client::write(uint8_t)'
/Users/bonavoglias/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:48: error: overriding 'virtual size_t Print::write(uint8_t)'
/Users/bonavoglias/Documents/Arduino/libraries/ENC28J60/Client.h:24: error: conflicting return type specified for 'virtual void Client::write(const uint8_t*, size_t)'
/Users/bonavoglias/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:53: error: overriding 'virtual size_t Print::write(const uint8_t*, size_t)'
In file included from /Users/bonavoglias/Documents/Arduino/libraries/ENC28J60/Ethernet.h:6,
from WebServer.pde:7:
/Users/bonavoglias/Documents/Arduino/libraries/ENC28J60/Server.h:16: error: conflicting return type specified for 'virtual void Server::write(uint8_t)'
/Users/bonavoglias/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:48: error: overriding 'virtual size_t Print::write(uint8_t)'
/Users/bonavoglias/Documents/Arduino/libraries/ENC28J60/Server.h:18: error: conflicting return type specified for 'virtual void Server::write(const uint8_t*, size_t)'
/Users/bonavoglias/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:53: error: overriding 'virtual size_t Print::write(const uint8_t*, size_t)'

Secondo me sbaglio qualcosa.

Hai collegato l'Arduino al Router o al PC? Sicuro che il DHCP sia attivo?

Ho collegato arduino al Router (ne ho provati due differenti) chiaramente con DHCP attivo ma non viene assegnato nessun IP e anche se provo ad assegnare un IP statico ho lo stesso risultato (ip della stessa classe). Il router rileva la presenza del dispositivo solamente come presenza sulla porta, per intenderci mi si accende il numero di porta relativo sul router, il led arancoine presente sulla porta ethernet dello shield lampeggia dopo un po si spegne e periodicamente lampeggia, quello verde resta chiaramente fisso.

Ciao

prova a reinstallare la libreria seguendo questo tutorial:
http://www.lucadentella.it/2012/02/12/enc28j60-e-arduino-1/

l'errore che ottieni (failed to...) indica quasi sicuramente che devi cambiare il PIN di ChipSelect, probabilmente sul tuo modulo è il 10 e quindi usare il metodo begin() come ti hanno suggerito.

bye

In realtà la prima cosa che ho fatto prima di mettere mani sullo shield è stato quello di documentarmi, avevo già visitato il tuo sito seguendo la guida per scrupolo ho rifatto esattamente la stessa cosa ora.

Ho scaricato da questo link le librerie GitHub - njh/EtherCard: EtherCard is an IPv4 driver for the ENC28J60 chip, compatible with Arduino IDE

sistemate nell'apposita directory carico testDHCP ovviamente dopo aver preventivamente modificato:

static uint8_t begin (const uint16_t size, const uint8_t* macaddr,
uint8_t csPin =8);

in

static uint8_t begin (const uint16_t size, const uint8_t* macaddr,
uint8_t csPin =10);

monitorizzo con serial ed ottengo:

[testDHCP]
MAC: 74:69:69:2D:30:31
Setting up DHCP
DHCP failed
My IP: 0.0.0.0
Netmask: 0.0.0.0
GW IP: 0.0.0.0
DNS IP: 0.0.0.0

ciao

volendo puoi anche non modificare la libreria ma chiamare la begin() con il PIN CS corretto (10)...
comunque ora vedo che non ti da più ne l'errore in compilazione, ne il failed sul controller quindi riesce a "parlare" con il chip.

Tra queste due scritte:
Setting up DHCP
DHCP failed

dovrebbero passare circa 30 secondi, la libreria infatti fa 3 tentativi di richiesta DHCP con 10s di timeout... sicuro che ci sia un DHCP server attivo in rete? Prova a compilare lo sketch con l'IP statico e a pingarlo... ricevi risposta?

Il pcb è FuturaElettronica ma è stato assemblato e distribuito da una azienda che si occupa di elettronica quindi suppongo si tratti di un dispositivo testato e funzionante

ciao

infatti il mio dubbio non è che non funzionasse ma che per qualche motivo non riceva un IP dal dhcp server.

Allora ho provato ad utilizzare getStaticIp

// ethernet interface mac address
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
// ethernet interface ip address
static byte myip[] = { 192,168,0,200 };
// gateway ip address
static byte gwip[] = { 192,168,0,1 };
// remote website ip address and port
static byte hisip[] = { 74,125,79,99 };
// remote website name
char website[] PROGMEM = "google.com";

gli ip specificati sono in linea con la classe della mia rete ma ottengo dal ping:

PING 192.168.0.200
PING 192.168.0.200 (192.168.0.200): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3

mentre dall'output serial:

[getStaticIP]
Failed to access Ethernet controller
Server: 74.125.79.99

In modalità DHCP sono sicuro che è attivo perchè la mia rete attualmente funziona solo in DHCP sono certo che l'ip 192.168.0.200 non è stato assegnato a nessuno.

stranissimo... se riepilogo bene:

  • con lo sketch in DCHP non ti da Failed to access Ethernet controller ma non prende l'IP
  • con lo sketch in IP statico invece ti da Failed to access Ethernet controller e quindi non riesce a parlare con il chip enc28j60...

si esatto... e sono sicuro che il pin è il numero 10...che rompicapo!

In allegato ti invio la libreria che il venditore mi ha inviato via mail:

https://folders.io/get/xX3ayN

Questo invece è quello che il venditore mi ha scritto via email:

La scheda che sta impiegando è un progetto di futura elettronica. Sul loro sito sono pubblicate le librerie relative a questo progetto. A bordo è installato il chip enj2060. Su questi link può leggere
Notizie a tal riguardo :
http://www.lucadentella.it/2012/02/12/enc28j60-e-arduino-1/

Allego le librerie impiegate per questo tipo di chip,anche se installato su una scheda analoga.