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
Wäre toll wenn da jemand en Tipp hätte wie ich da weiter vor gehen könnte
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...
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?
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!
Der /CS Pin des ENC28J60 geht auf Pin 10 der Arduino Steckleiste.
Oha, mein Fehler... Den /CS Pin hab ich total übersehen.
Danke
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
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.
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)