SD karte parallel mit ethernet. geht das?

Guten Tag. Ich habe Arduino mega und Ethernet shield. Ich wollte eigener Server aufbauen und ganze werte in SD karte speichern. Leider funktioniert NUR SD karte oder Ethernet. Beides parallel wollen die nicht funktionieren. Ich vermute beide wollen in SPI zugreifen, aber wird nur einer akzeptiert. Wie kann ich am einfachsten mit weniger Aufwand das Problem lösen? Mir ist lieber wenn ich ein SD modul kaufe (5-6€) als komplett Programm umschreibe. Vielen Dank. Mit freundlichen Grüssen, eugen

Das gleichzeitige Benutzen der Ethernet-Funktion und der SD-Karte sind problemlos möglich, dafür ist jeweils ein SS-Pin reserviert, der das jeweile Gerät aktiviert bzw. deaktiviert.

Beim originalen Arduino Ethernet-Shield ist der SS-Pin für die Ethernet-Funktionalität die 10, die SD-Karte wird über Pin 4 aktiviert.

Da Du keinen Code gepostet hast, kann ich nur mutmassen, was Du falsch gemacht haben könntest.

Hey sirewgenij,
es ist egal ob du ein SD Modul benutzt oder den SD Slot von dem Ethernet, wenn du ein Ethernet mit SD Slot hast. Ich denke aber schon.

Das Ethernet und das SD Modul werden ja per SPI verbunden. Und wie schon pylon gesagt hat, ist der SS Pin wichtig. Aber da
du ja geschrieben hast, das entweder SD oder nur Ethernet geht, wirst du es schon richtig verbunden haben.

Beim initialisieren muss du nur etwas beachten. Sonst funken die sich gegenseitig dazwischen.

Wenn du SD.begin und Ethernet.begin machen möchtest, währe es sinnvoll das andere jewals zu
deaktivieren. Pin4 ist SS für das SD-Modul und Pin10 ist für das Ethernet. Natürlich kannst du auch
andere Pins benutzen. Dabei achte darauf wie du es angeschlossen hast.

Mach das doch mal so:

pinMode(4, OUTPUT);
pinMode(10, OUTPUT);
digitalWrite(4, HIGH);
Ethernet.begin(mac, ip);
digitalWrite(10, HIGH);
SD.begin(4);

Hoffe ich konnte dir helfen....

habe ich das auch probiert ,funktionier nicht
das ist nur ein teil von mein sketch, sonst sketch mehr als 500 zeilen.
Hab gelesen mann muss etheret shield hacken. weil er ist nicht für arduino Mega gemacht. Man muss der Pins von Ethernet schield 13/12/11/10 auf arduino mega pins 50/51/52/53 ändern. Auch Ethernet library muss man auch ändern. Ich weiss nicht ob ich das machen muss. Was denkt Ihr?

mein sketch

#include <SPI.h>
#include <Ethernet.h>

void setup()
{
Serial.begin(9600);
Ethernet.begin(MACAddress, IPAddress); // Ethernet initialisieren
myServer.begin();

//Serial.begin(9600);
Serial.print("Initializing SD card...");
pinMode(53, OUTPUT);

if(!SD.begin(53))
{
Serial.println("initialization failed!");
return;
}

Serial.println("initialization done.");

if(Ethernet.begin(mac) == 0)
{ //opening the Ethernet connection
Serial.println("Failed the Eth-Connection!");
while(1)
{ // Eth-connection could not be established, cannot go on in code!
;
}
}

// Now we want to print the IP addresse
Serial.print("IP addresse is: ");
for (byte ipbyte = 0; ipbyte < 4; ipbyte = ipbyte + 1)
{
Serial.print(Ethernet.localIP()[ipbyte], DEC);
Serial.print(".");
}
Serial.println();
iPadServer.begin();

void loop()
{
iPadInterface();

myFile = SD.open("temp_log.csv", FILE_WRITE);

if (myFile)
{
myFile.print(t.date);
myFile.print("/");
myFile.print(t.mon);
myFile.print("/");
myFile.print(t.year);
myFile.print("; ");
myFile.print(t.hour);
myFile.print(":");
myFile.print(t.min);
myFile.print("; ");
myFile.print((float)DHT11.temperature);
myFile.print("; ");
myFile.print((float)DHT11.humidity);//
myFile.print("; ");
myFile.println(clockNew);
myFile.close();
}
else {
Serial.println("error opening temp_log.csv");
}
}

Hab gelesen mann muss etheret shield hacken. weil er ist nicht für arduino Mega gemacht.

Nur wenn Du ein uraltes Teil hast. Die aktuellen Ethernet Shields (zumindest die Originale von Arduino in der R3) benutzen den SPI auf dem ICSP-Header.

Man muss der Pins von Ethernet schield 13/12/11/10 auf arduino mega pins 50/51/52/53 ändern.

Das stimmt nicht mal für die alten Shields. Der SS-Pin bleibt auf der 10, egal ob Mega oder UNO.

Auch Ethernet library muss man auch ändern. Ich weiss nicht ob ich das machen muss. Was denkt Ihr?

Nochmals falsch, wenn Du den SS auf der 10 lässt.

   if(!SD.begin(53))

Der SS des SD-Karten-Slots ist auf Pin 4, wieso willst Du den auf die 53 legen?

Häää....

##################################
pinMode(53, OUTPUT);

if(!SD.begin(53))
##################################

Also Pin 53 geht eigendlich nicht wenn du ein normales Ethernetshild hast. Oder hast du es umgebaut ?
Ein normals, ob original oder China, ist kürzer als das Arduino Mega und kommt da unten eigendlich nicht ran.

Versuchs mal bitte so:

###################################
pinMode(10, OUTPUT);
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
Ethernet.begin(MACAddress, IPAddress);
.
.
.
digitalWrite(10, HIGH);
if(!SD.begin(4))

###################################

Ich habe das Gefühl, dass du nicht ganz verstehst wie das ansteuern funktioniert oder ?
Also was SS und SPI oder ICSP ist....

SPI oder ICSP ist für die Komunikation und das SS zum ansprechen. Ist SS auf HIGH kann hört der Chip ( z.b. die SD Karte ) nicht zu und funk nicht
dazwischen, wenn der Arduino gerade mit einem anderen Chip ( z.b. Ethernet ) reden will.

Es gibt auch Chips wo LOW und HIGH umgedreht ist. Aber das ist gerade hier nicht wichtig.