Leonardo und Velleman Ethernet Shield

Hallo Arduino Freunde,

ich bin ganz neu im Arduino-Bereich und kann mein Ethernet Shield auf einem Leonardo Board
(Ehternet Shield: https://www.reichelt.de/Erweiterungsboards/ARDUINO-SHDBENET/3/index.html?ACTION=3&GROUPID=6669&ARTICLE=153062&OFFSET=16&)

nicht ins Netzwerk einbinden. Bekomme keine Adresse, bzw überwiegend auch keinerlei Anzeige im Seriellen Monitor.

Ich arbeite mit Arduino 1.06, habe die Lib bei den Downloads des Artikels eingebunden. Alles läuft auch ohne Fehler durch, ich bekomme aber keine Adresse (wenn was angezeigt wird dann 0.0.0.0).

Könnte es an den PinOuts liegen? Scheinbar hab ich einen unvorsichtigen kauf getätigt denn die beiden Platinen scheinen nicht von Haus aus füreinander geschaffen :frowning:

Wäre toll wenn da jemand en Tipp hätte wie ich da weiter vor gehen könnte :slight_smile:

Gruß, kinglazee

Habe keinen Leonardo, auch nicht den Adapter...

Aber durch anpassen der enc28j60.h und enc28j60.cpp kann das was werden.
Das Problem sind die SPI Pins... das haben die bei der Lib für den Leonardo total verpatzt...

Also reparieren, oder andere Lib suchen.

Vielen Dank erstmal combie,

ich habe mich mal weiter informiert und versucht durch zu boxen...

Beim Arduino Uno sind tatsächlich die Pins 10, 11, 12, 13 verwendet wie es auch in der Lib vorgesehen ist (gefunden in enc28j60.cpp).

Nun sind beim Leonardo Board die Pins MOSI, MISO und SCK auf dem ICSP-Header (laut Schaltplänen), allerdings sind das doch auch ganz andere Pins als die IO 10 - 13 Pins...

Hier mal der Schaltplan vom Leonardo:

Und hier noch vom Ehternet Shield (Velleman KA04):

Zum abgleich habe ich auch den Plan vom Uno Board herausgesucht:

Könnte mir jemand behilflich sein beim herausfinden welche Pins ich nun zu ändern habe?

Nachtrag: Wie bezeichne ich denn die Pins die auf den ICSP-Header gehen in der Datei enc28j60.cpp? Gibt es dafür auch eine Nummerzuordnung?

Gibt es dafür auch eine Nummerzuordnung?

Nein.
Miso,Mosi und Clk sind keiner Arduino Pin Nummer zugeordnet.

Der einzige SPI Pin mit einer Zuordnung ist SS.

SS könnte (muss aber nicht) zum CS des Shields verbunden werden.
Aber auf jeden Fall solltest du SS zum Output machen. (sonst tuts SPI vermutlich nicht)
Verwenden kannst du weiterhin Pin 10 als CS, das ist kein Problem.
Auch kann SS ansonsten beliebig verwendet werden

Also, Hardwaretechnisch wirst du nichts ändern müssen. Alles OK.
Nur die Lib umschreiben.
Oder eine verwenden, welche das richtig abhandelt.
Ja, such dir eine andere!

Verwenden kannst du weiterhin Pin 10 als CS, das ist kein Problem.

Aber mein Shield hat doch gar keine Hardwareverbindung zu diesem IO-Pin 10?
Hast du in die Pläne mal reingeschaut?

Hast du in die Pläne mal reingeschaut?

Habe ich getan!

:slight_smile: Solltest du vielleicht auch nochmal machen.. :slight_smile:
Der /CS Pin des ENC28J60 geht auf Pin 10 der Arduino Steckleiste.

Der /CS Pin des ENC28J60 geht auf Pin 10 der Arduino Steckleiste.

Oha, mein Fehler... Den /CS Pin hab ich total übersehen.
Danke :smiley:

Also ich habe mal die wichtigste Stelle aus der ENC28J60 rauskopiert

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)

#define SPI_SS         2 
#define SPI_MOSI      51
#define SPI_MISO      50
#define SPI_SCK         52

#else

// Default CS pin is 10, for the unmodified shield.
// Can be changed in init function to use another pin
// But SPI_SS needs to be setup correctly too

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

#endif

Ich frage mich nun bloß wie ich die anderen Pin's umbelegen soll wenn die Pin's die ich brauche keine Nummerzuweisung haben, sondern auf dem ICSP-Header liegen?

Ich hab mir auch seit 2 Tagen schon einen Wolf gesucht um ne fertige Lib in Verbindung mit dem Leonardo zu finden. Es ist leider echt etwas frustrierend :frowning:

#define SPI_SS 2

Der muss auf 10 angepasst werden
Der Rest kann in die Tonne.
Zusätzlich SS auf Output stellen.

Das ist der falsche Prozessor. Wenn der Leonardo da fehlt musst du den hinzufügen:

#if defined(__AVR_ATmega32U4__) 
...
#else

Es geht nehme ich mal an um diese Library:

Das einzige wo MOSI/SCK/MISO Pins relevant sind ist bei der Initialisierung:

    pinMode(SS, OUTPUT);
    digitalWrite(SS, HIGH);
    pinMode(MOSI, OUTPUT);
    pinMode(SCK, OUTPUT);
    pinMode(MISO, INPUT);

    digitalWrite(MOSI, HIGH);
    digitalWrite(MOSI, LOW);
    digitalWrite(SCK, LOW);

Der Rest ist Hardware. Das einzige was wirklich in Software gesteuert wird ist der CS Pin. Also vielleicht CS angeben und für den Rest den gleichen Dummy Pin nehmen damit es kompiliert?

Nachtrag:
Die Lib sieht bei den Bezeichnungen etwas anders aus, aber das Prinzip sollte gleich sein. Man kann wahrscheinlich SPI_MOSI, SPI_MISO und SPI_SCK alle z.B. auf 3 setzen (wenn der Pin frei ist) damit es kompiliert.

Oder Alternativ die Verwendung dieser Konstanten - wahrscheinlich nur einmal am Anfang - auch per Compile-Schalter für den Leonardo abschalten. Das wäre sauberer.

Vielen, vielen Dank für eure bisherige Hilfe!

Jetzt kann ich erste erfolge verzeichnen... Der ENC hat nun eine DHCP Adresse bekommen, ist anpingbar und ich sehe Text im seriellen Monitor (funze bis lang auch nicht)

Erfolg hatte ich jetzt in dem ich mir die neueste Lib runtergeladen hab, keinerlei Änderungen an der ENC28J60 machte und in den Beispielsketches lediglich die Zeile:

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

mit einem dritten Parameter versehen hab

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

Seit her läuft mal jedenfalls der Hauptteil

Nochmal's vielen Dank

Siehste!
Kaum macht man es richtig... dann tuts sofort!