Fehlersuche Ethernet -> Relais

Hallo werte Gemeinde,

ich verzweifle gerade an einem seltsamen Phänomen. Definiere ich 2 Outputs, lassen sich diese nur solange ansteuern, bis ich eine Ethernet-Verbindung definiere. Danach passiert nichts mehr:

Mein Setup: Arduino Mega + Ethernet-Shield, an Port 50+51 sind je 1 Relais angeschlossen.

Mein Code (Auszüge, gekürzt auf die relevanten Parts)

Main.ino:

#include <Ethernet.h>


//IO Pin setup
int ioPin[]={50,51};
int ioSize=2;  


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); // DEBUG only
  Serial.println("Setup initialized...");
  
     //initialize IO_Pins
    for (int i=0;i<ioSize;i++){
     pinMode(ioPin[i], OUTPUT); 
    }
  fEthernet_setup();      

}

Die Loop:

void loop() {
  Serial.println("Aus");
  // Let's turn on the relay...
  digitalWrite(50, LOW);
  digitalWrite(51, LOW);
  delay(2000);
  Serial.println("An");
  // Let's turn off the relay...
  digitalWrite(50, HIGH);
   digitalWrite(51, HIGH);
  delay(2000);
}

Die Ethernet-Initialisierung (externe <Ethernet.cpp>):

// Ethernet shield attached to pins 10, 11, 12, 13
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 177);
IPAddress gateway(192,168,1, 1);
IPAddress subnet(255, 255, 0, 0);
EthernetServer server(23);

void fEthernet_setup()
{
    Ethernet.begin(mac, ip, gateway, subnet);  //<-------- DEAKTIVIERE ICH DIESEN ZEILE, schalten die Relais
    Serial.println("fEthernet_setup -> OK");
    Serial.print("IP_ADRESS is ");
    Serial.println(String(ip[0]) + String(".") +\
                   String(ip[1]) + String(".") +\
                   String(ip[2]) + String(".") +\
                   String(ip[3]) ) ; 
}

Solange ich NICHT das Ethernet.begin ausführe, schalten die Relais. Ist die Zeile aktiv, kommt nur das AN/AUS über den Monitor, die Relais schalten nicht.

Ich ging erst von einem HW-Defekt aus, da das ganze mal lief... durch schrittweises Herantasten, kann ich es aber auf diese eine Zeile eingrenzen.
Seht ihr hier einen Logikfehler?

Danke für jeden Tip!
VG
Steffen

Schau Dir mal das Pinout vom MEGA an. 50/51 gehören zu SPI, was die Netzwerkkarte belegt.

Gruß Tommy

Hi Thommy,

mmmh... Mist, OK. Getestet...läuft...

DANKE !

VG
Steffen

Bißchen längere Erklährung:
Der Ethernet-Controller wird über die SPI Schnittstelle angesteuert.
Beim Arduino MEGA 2560 ist die SPI Schnittstelle an den Pins 50-51-52 und 53
Also darfst Du diese Pins nicht für die Relais benutzen.

Grüße Uwe

[Verbesserungsmode]

[/off]
Das Ethernetshield wird über den SPI-Header gefüttert, darum funktioniert das sowohl auf dem UNO als auch auf dem MEGA, im Gegensatz zu den RTC/SD-Kombishields, bei denen die SD an 10-13 hängt.

Vielen Dank euch allen..!

VG
Steffen

Die SPI Schnittstelle wird auch für ICSP verwendet ( In Circuit System Programming) und auf den 2x3 Header herausgeführt. Damit Shields die den SPI Bus benutzen auf allen Arduinos funktionieren wird der ISCP Anschluß verwendet.
Die "orginal"-Pins sind aber nicht extra gekennzeichnet daß sie doppelt herausgeführt sind. Gleiches gilt für die i2C Schnittstelle.
Grüße Uwe

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.