Mal wieder ein Anfänger der keine EthernetCard zum laufen bekommt

Moin Zusammen, Habe ne Arduino Nano Nachbau und nen EMC28J60 für Ethernet. Hab alles richtig verkabelt (Hoffentlich da mehrfach geprüft auch mit vershciedenen Kablen) und die Library hinzugefügt. Da der Nano nicht genug Leistung für die Ethernetkarte liefert habe ich für die Stromversorgung eine externe 3,3V Quelle angeschlossen. Wenn ich eins der Besispielsketch Hochadel passiert meistens überhaupt nix im Serialmonitor, hin und wieder kommt das er die Karte nicht finden kann. Wenn ich vor der Zeile

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

Eine Testausgabe im Seriellmonitor einbaue zeigt er den Text an. Wenn ich das selbe in der Zeile danach mache kommt der Text nicht.

Kann mir jmd helfen?

Schaltplan wie du es angeschlossen hast. Links zu den Komponenten im Internet. Dein kompletter Sketch.

Damit steigen die Chancen geholfen zu bekommen. ;)

Was genau möchtest du denn mit dieser Kombination machen ? Dir ist hoffentlich klar, dass der Speicher im Nano für diese Karte sehr knapp ist.

Was bisher nur angedeutet wurde: Dieses Ethernetmodul verlagert den größten Teil der Arbeit auf den Arduino und da bleibt beim UNO kaum noch Luft zum Arbeiten. Es läuft auch nicht mit den normalen Ethernet-Libs.

Was willst Du damit machen? Evtl. bleibt dafür nicht genig RAM übrig.

Gruß Tommy

Welche Bibliothek verwendest du? Ich habe das mit dem Chip und dem Uno schon zum laufengebracht. Dabei hatt ich dann sogar noch genügend Speicher frei um eine andere große Lib parallen laufen zu lassen.

Wenn ich mich recht erinnere hieß die Lib für den 28J60er die ich verwendet habe uip oder so damit sollte es laufen

Edit:

Hier der Link: https://forum.arduino.cc/index.php?topic=178024.0

Hallo Zusammen,
vielen Dank für die Infos.
Hier meine gekauften “Schätze”
Das Board:

Die Ethernetcard:

VOrgegangen bin ich unter anderem nach folgender Anleitung:
http://www.komputer.de/wordpress/archives/497
Wobei ich die Stromversorgung über das Breadboard gelöst habe.

Genutzt habe ich diese Library von Jeelabs und auch deren Beispiele:

// Ping a remote server, also uses DHCP and DNS.
// 2011-06-12 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php

#include <EtherCard.h>

// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[700];
static uint32_t timer;

// called when a ping comes in (replies to it are automatic)
static void gotPinged (byte* ptr) {
  ether.printIp(">>> ping from: ", ptr);
}

void setup () {
  Serial.begin(57600);
  Serial.println("\n[pings]");
  
  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
    Serial.println(F("Failed to access Ethernet controller"));
  if (!ether.dhcpSetup())
    Serial.println(F("DHCP failed"));

  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);

#if 1
  // use DNS to locate the IP address we want to ping
  if (!ether.dnsLookup(PSTR("www.google.com")))
    Serial.println("DNS failed");
#else
  ether.parseIp(ether.hisip, "74.125.77.99");
#endif
  ether.printIp("SRV: ", ether.hisip);
    
  // call this to report others pinging us
  ether.registerPingCallback(gotPinged);
  
  timer = -9999999; // start timing out right away
  Serial.println();
}

void loop () {
  word len = ether.packetReceive(); // go receive new packets
  word pos = ether.packetLoop(len); // respond to incoming pings
  
  // report whenever a reply to our outgoing ping comes back
  if (len > 0 && ether.packetLoopIcmpCheckReply(ether.hisip)) {
    Serial.print("  ");
    Serial.print((micros() - timer) * 0.001, 3);
    Serial.println(" ms");
  }
  
  // ping a remote server once every few seconds
  if (micros() - timer >= 5000000) {
    ether.printIp("Pinging: ", ether.hisip);
    timer = micros();
    ether.clientIcmpRequest(ether.hisip);
  }
}

Mein Plan war noch eine Relaiskarte mit 4 Relais anzuschließen und diese dann über Lan aus einem Browser herraus zu steuern. Das sollte dann die Gartenbeleuchtung schalten.

Loki1978: Mein Plan war noch eine Relaiskarte mit 4 Relais anzuschließen und diese dann über Lan aus einem Browser herraus zu steuern. Das sollte dann die Gartenbeleuchtung schalten.

Besorge Dir einen UNO und ein "Ethernet Shield mit Wiznet W5100" Chip drauf.

Der Idiotenadapter ENC28J60 ist am besten in einer Kiste für Elektroschrott aufgehoben.

Oder in der Hand eines Fachmanns für Netzwerkprogrammierung, der jedes Bit, das über das Netzwerkkabel laufen soll, einzeln von Hand codieren kann und möchte.

Schaltet auf einem Nano mit aufgestecktem ENC28J60 Modul den Pin D5 wenn R5on oder R5Off gesendet werden via HTTP → HTTP://deineip/R5on.
Die Rückgabe ist ein JSON-String.
In diesem Sketch wird der Pin D5 nach 60 sek. wieder ausgeschaltet.
Mit Pin 3 - auf GND gezogen - kann das Relais per Taster geschaltet werden.

#include <UIPEthernet.h>

#define AUS HIGH
#define EIN LOW

#define ISRPin      3
#define Relais_Pin_5  5

unsigned long Start = 0;
unsigned long Dauer = 60000;    // Millisekunden

EthernetServer server(80);
EthernetClient client;

uint8_t mac[6] = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15};

uint8_t alarmSignal     = 0;
uint8_t Geschaltet_Pin_5  = 0;

String HTTPRead = "";



void setup()
{
	Serial.begin(115200);

	// Falls man mal mehr will
	for (byte i = 5; i <= 5; i++)
	{
		pinMode(i, OUTPUT);
		digitalWrite(i, AUS);
		Serial.print(F("Port setzen: "));
		Serial.println(i);
	}

	Serial.println(F("Ethernet starten"));

	Ethernet.begin(mac);

	Serial.print(F("IP: "));
	Serial.println(Ethernet.localIP());

	server.begin();

	Start = millis();

	attachInterrupt(digitalPinToInterrupt(ISRPin), _ISR, CHANGE);
}


void loop()
{
	client = server.available();

	if (client)
	{
		boolean currentLineIsBlank = true;
		HTTPRead.begin();

		if (client.connected())
		{

			Serial.println(F("Web-Client verbunden"));

			while (client.available())
			{
				char c = client.read();
				HTTPRead += c;

				if (HTTPRead.indexOf("R5on") > 0)
				{
					alarmSignal = 2;
					Print_Status_Page("Befehl Pin D5 ein", "R5on");
					break;
				}

				if (HTTPRead.indexOf("R5off") > 0)
				{
					alarmSignal = 3;
					Geschaltet_Pin_5 = 1;
					Start = 0; // millis() - Dauer;
					Print_Status_Page("Befehl Pin D5 aus", "R5off");
					break;
				}

				if (HTTPRead.indexOf("R5stat") > 0)
				{
					Print_Status_Page("Statusabfrage", "R5stat");
					break;
				}
			}
		}

		HTTPRead = "";
	}

	Switch_Relais();

	Ethernet.maintain();
}

void _ISR()
{
	if (digitalRead(ISRPin) == LOW)
	{
		alarmSignal = 1;
	}
}


void Switch_Relais()
{
	if (alarmSignal > 0 && alarmSignal != 3)
	{
		Serial.print(F("Alarmeingang: "));
		Serial.println(alarmSignal);

		digitalWrite(Relais_Pin_5, EIN);
		Serial.println(F("D5 EIN"));

		Start = millis();

		Serial.print(F("Start: "));
		Serial.println(Start);

		Geschaltet_Pin_5 = 1;
		alarmSignal = 0;
	}

	if (Geschaltet_Pin_5 == 1)
	{
		if (millis() > (Start + Dauer) || alarmSignal == 3)
		{
			digitalWrite(Relais_Pin_5, AUS); //Und wieder ausschalten

			Serial.println(F("D5 aus"));

			Geschaltet_Pin_5 = 0;
			alarmSignal = 0;
		}
	}
}

void Print_Status_Page(char * laststate, char * command)
{
	Switch_Relais();

	if (strcmp(command, "R5stat") == 0)
	{
		client.println("HTTP/1.1 200 OK");
		client.println("Content-Type: application/json; charset=utf-8");
		client.println("Access-Control-Allow-Origin: *");
		client.println("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");

		client.println();

		client.print(F("{"));

		for (uint8_t i = 1; i <= 13; i++)
		{
			Serial.print(F("Status D "));
			Serial.print(i, DEC);
			Serial.print(F(": "));
			Serial.print(digitalRead(i), DEC);
			Serial.print(F("\n"));

			client.print(F("\"D"));
			client.print(i, DEC);
			client.print(F("\":"));
			client.print(digitalRead(i), DEC);
			client.print(F(","));
		}

		client.print(F("\"x\":\"x\"\"}"));
	}

	client.stop();
	client.flush();
}

Man muss aber beim Nano mit dieser Lib um jedes RAM-Byte kämpfen, der Empfehlung Uno+W5100 kann ich auch nur zustimmen, insbesonders wenn es etwas mehr Code in der Summe werden soll.
Dieser Sketch ist auch nicht auf das letzte optimiert.