Arduino e ENC28j60 e DHCP non funzionante

Salve,

ho preso da poco lo shield Ethernet ENC28J60 per arduino che è praticamente identico a quello presente in foto

con l'unica differenza che sulla mia scheda non è presente il ponte R1 ma posso con certezza sostenere che il PCB è Futura Elettronica. Ho effettuato tutte le ricerche del caso sul forum purtroppo però in nessun caso sono riuscito a risolvere. Ho utilizzato le library:

https://github.com/jcw/ethercard

ho provato ad utilizzare nello specifico lo sketch testDHCP ma il risultato è sempre lo stesso:

[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

premesso che ho il DHCP attivo quale potrebbe essere il problema?? Ho sentito parlare di pin 8 - pin 10...

Grazie

gia'.. potrebbe essere il chip select. di default quella libreria mia pare sia sul pin8 e quella scheda pare sia sul pin 10

quindi cambierei la riga

if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)

con

if (!ether.begin(sizeof Ethernet::buffer, mymac, 10))

Grazie per la risposta ma con questo codice:

// Arduino demo sketch for testing the DHCP client code
//
// Original author: Andrew Lindsay
// Major rewrite and API overhaul by jcw, 2011-06-07
//
// Copyright: GPL V2
// See http://www.gnu.org/licenses/gpl.html

#include <EtherCard.h>

static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[700];

void setup () {
  Serial.begin(57600);
  Serial.println("\n[testDHCP]");

  Serial.print("MAC: ");
  for (byte i = 0; i < 6; ++i) {
    Serial.print(mymac[i], HEX);
    if (i < 5)
      Serial.print(':');
  }
  Serial.println();
  
  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) 
    Serial.println( "Failed to access Ethernet controller");

  Serial.println("Setting up DHCP");
  if (!ether.dhcpSetup())
    Serial.println( "DHCP failed");
  
  ether.printIp("My IP: ", ether.myip);
  ether.printIp("Netmask: ", ether.mymask);
  ether.printIp("GW IP: ", ether.gwip);
  ether.printIp("DNS IP: ", ether.dnsip);
}

void loop () {}

se vado a modificare

  if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0) 
    Serial.println( "Failed to access Ethernet controller");

ottengo questo errore:

testDHCP.ino: In function ‘void setup()’:
testDHCP:27: error: no matching function for call to ‘EtherCard::begin(unsigned int, byte [6], int)’
/Users/bonavoglias/Documents/Arduino/libraries/EtherCard/EtherCard.h:131: note: candidates are: static uint8_t EtherCard::begin(uint16_t, const uint8_t*)

stranissimo.. ho verificato e a me non da' errore. e la libreria pare la stessa

Non so magari sbaglio qualcosa, considera che é il mio primo giorno con arduino. Che shield usi?

non shield, ma moduli esterni, come questo http://www.hobbycomponents.com/image/cache/data/800px/HCARDU0028_800-800x600.JPG

ma qui non e' un problema di shield o scheda, dato che nemmeno ti compila

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:

https://github.com/jcw/ethercard

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 https://github.com/jcw/ethercard

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?