ENC28j60 : Impossible de l'utiliser correctement

Hello, j’ai une interface ethernet de ce type avec ma 2560 et j’utilise ce schéma de câblage :

J’ai importer la librairie uipethernet et aussi la ethercard , j’ai tenté tous les modes possible, mais il ne m’est même pas possible d’attribuer une IP !
Je suis un peu à cour d’idée, donc si vous en avez… :slight_smile:

pour info j’ai testé ceci :

// 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.netmask);
  ether.printIp("GW IP: ", ether.gwip);
  ether.printIp("DNS IP: ", ether.dnsip);
}

void loop () {}

et la consolle sérial ne me répond que ça :

[testDHCP]
MAC: 74:69:69:2D:30:31

merci :slight_smile:

up!

Salut,

Ca doit venir de ton Chip Select. Par défaut je crois que c'est 10 mais faut regarder dans le .h de la lib

hello

j'ai regarder dans le .h, par défaut c'est 8, mais je n'ai trouvé aucune doc portant à ce sujet, j'ai testé quelque nombre a pouf, et sans plus.

par contre, j'ai vu que dans le même .h, il y a des commentaires qui dit que ça serais prévu pour une UNO ? ici j'utilise une Mega, c'est possible que ça pause problème ?

Ca marche aussi sur MEGA :wink:

Du coup même avec le CS sur 8 ça marche pas ?

nop :confused:

Je viens de regarder sur le github ici : EtherShield/enc28j60.h at master · thiseldo/EtherShield · GitHub

Visiblement la librairie s’adapte suivant la carte et c’est bien le 53 pour le CS. Toutefois ce n’est pas le top, c’est le CS de l’Atmega en esclave. J’ai déjà vu de projet foirer à cause de ça. Change le dans ton .h, mets 48 par exemple

Hello, ah? j'y regarderais, mais j'ai testé sur un arduino Nano, et ça fonctionne parfaitement :sleeping:

ça aurai un rapport ? la mega est différente ?

Non aucune différence puisque le dénominateur commun est le SPI. Que tu sois sur Nano ou mega le dénominateur commun sera toujours SPI.write()

Ce qui est d'ailleurs un peu étrange c'est qu'il fasse une différence dans la lib alors que le core Arduino s'occupe de ce genre de tâche.

Dans le .h de la lib j'avais pas vu mais on peut lire :

// If you use a pin other than 53 then you still need to define
// pin 53 as output, in similar manner to ATMega328 versions:
// pinMode(53, OUTPUT);
// digitalWrite(53, HIGH);

Donc ajoute

 pinMode(53, OUTPUT);
 digitalWrite(53, HIGH);

dans ton setup() et modifie dans le enc28j60.h :

#define DEFAULT_ENC28J60_CONTROL_CS 53
#define SPI_SS 53

en

#define DEFAULT_ENC28J60_CONTROL_CS 48
#define SPI_SS 48

En branchant évidemment le pin CS au 48

ok je tenterais ça, par contre je suis donc obligé de me créé une lib 'clone' pour que j'ai une lib pour la nano et une pour la méga quoi .. :slight_smile:

Non pas du tout, les changements que je te propose ne seront appliqué que pour la MEGA. Quand tu vois des choses comme :

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
....
#else
....
#endif

Ce sont des directives pour le pré-processeur, les définitions comme AVR_ATmega2560 sont générées par le choix de la board. Ensuite quand tu vas lancer la compilation, ces définitions seront ou non générées, et donc les parties en #if defined (LaDéfinition) seront compilées ou pas. Celà permet à partir d'une même librairie de compiler pour tel ou tel microcontrôleur.

Donc ici, quand tu sélectionneras Mega dans la liste de carte, ce sera uniquement cette partie qui sera compilé :

#define DEFAULT_ENC28J60_CONTROL_CS 53
#define SPI_SS 53
#define SPI_MOSI 51
#define SPI_MISO 50
#define SPI_SCK 52

Quand tu choisiras ta nano ça sera cette partie :

#define DEFAULT_ENC28J60_CONTROL_CS             10
#define SPI_SS                                  10
#define SPI_MOSI				11
#define SPI_MISO				12
#define SPI_SCK					13