Arduino Due mit Ethernetshield

Hallo,

ich habe mir ein Arduino Due zugelegt und versuche gerade damit meinen Arduino Mega zu ersetzen. Mit dem Mega habe ich einen Datenlogger betrieben der aus dem Ethernetshield mit SD Karte und einer RTC besteht. Das Programm, welches auf dem Mega ohne Probleme läuft habe ich auf das Due gespielt über den Programming Port.

Wenn ich Das Programm über den Seriellen Monitor bei Starten beobachte, stelle ich fest, dass es immer an der selben Stelle hängen bleibt.

Gibt es in dem Bereich grundlegende Unterschiede zwischen dem Mega und dem Due? Muss ich auf irgendwas achten?

Die Ethernetschnittstelle ist per Ping zu erreichen.

Klar gibt es Unterschiede. Es sind völlig verschiedene Prozessoren.

Ohne den Code, in dem es hängt und die Info wo es hängt, wird Dir wohl keiner helfen können.

Gruß Tommy

Ethernetshield

Ist das für den DUE geeignet?

Probieren Sie dieses Beispiel aus, um festzustellen, ob Ihre Ethernet-Karte funktioniert:

https://forum.arduino.cc/index.php?topic=619395.0

Tommy56:
Klar gibt es Unterschiede. Es sind völlig verschiedene Prozessoren.

Ohne den Code, in dem es hängt und die Info wo es hängt, wird Dir wohl keiner helfen können.

Ok da muss ich mal eben gucken wie ich den einfach reproduzieren kann den Fehler.

Das ist schon mal mein Ethernetshield mit dem Mega

https://eckstein-shop.de/HIMALAYA-basic-Mega-2560-Ethernet-Shield-w5100-mit-Cable?curr=EUR&gclid=EAIaIQobChMI1uy2y6Wv4wIVxOF3Ch3GoAkXEAQYASABEgLNePD_BwE

Tommy56:
Klar gibt es Unterschiede. Es sind völlig verschiedene Prozessoren.

Ohne den Code, in dem es hängt und die Info wo es hängt, wird Dir wohl keiner helfen können.

Gruß Tommy

Habe jetzt mal versucht es ein bisschen zu verschlanken. Weiß nicht ob ich wirklich alles bauche aber so geht es und der Fehler tritt auf.

Auf der SD Karte befindet sich die Datei INI.txt mit den interessanten Werten.

Also die Ausgabe bricht bei Intervallkri einfach ab.

Danke schon mal.

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

#define SIGNALLEDPIN 8

//Pin an dem CS Port der SD || UNO->4
const int _iChipSelect = 4;

//Aus der INI-Datei ausgelesen Werte. Wie define's.
int NTC = 0, MOD = 0, HMD = 0;
int Intervall = 0, Intervallkri = 1;
int _iMaxTemp = 0, _iMinTemp = 0, _iMaxLuft = 0, _iMinLuft = 0;
double _dMaxLicht = 0, _dMinLicht = 0, _dMODUmrech = 0;

String _sInit;
String _sLegende;

//----------------------------------------Ethernet--------------------
// Mac-Adresse muss einzigartig sein
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x59, 0x67 };

// Netzwerkeinstellungen vom Arduino
IPAddress ip( 169, 254, 155, 2 );
IPAddress gateway( 169, 254, 155, 1 );
IPAddress subnet( 255, 255, 255, 0 );

// IP-Adresse vom Computer
IPAddress server( 169, 254, 155, 167 );

EthernetClient client;
EthernetClient dclient;
EthernetServer Eserver(3363);

char outBuf[128];
char outCount;

// change fileName to your file (8.3 format!)
String fileName = " ";

//SD Karte mit der INI-Datei
File myFile;

void setup()
{
  //Startet die Serielle Verbindung zum Computer
  Serial.begin(9600);
  Serial.print("Initialisierung der SD Karte...");

  //----------------------Ethernet----------------------------------------------

  //Um die SD-Karte und die Ethernetverbindung trennen zu können
  //digitalWrite(10, HIGH);

  //Fehlermeldung wenn die Karte nicht gefunden wurde + LED daueran
  if (!SD.begin(_iChipSelect)) {
    Serial.println("Karte konnte nicht gefunden werden!");
    digitalWrite(SIGNALLEDPIN, HIGH);
    // don't do anything more:
    while (1);
  }
  Serial.println("Karte initialisiert.");

  Ethernet.begin(mac, ip, gateway, gateway, subnet);
  digitalWrite(10, HIGH);
  delay(1000);
  Serial.println(F("Bitte Datum +.txt eingeben: (z.b. 20190428.txt)"));

  //---------------------------------------------------------------------------

  //Auslesen der INI-Datei und setzt die Anzahl der Sensoren
  fINITDATEI();
}
void loop()
{
}
//Initialisierungsdatei
void fINITDATEI()
{
  int i = 0;
  int j = 1;
  char *ptr;
  char Init [400];

  for (int z = 0; z <= 400; z++)
    Init[z] = NULL;

  Serial.println("-------");
  Serial.println(Init);
  Serial.println("-------");

  myFile = SD.open("INI.txt");

  if (!myFile)
  {
    Serial.println("SD Fehler");
    //return 0;
  }
  else
    Serial.println("INI.txt, gefunden:");

  while (myFile.available())
  {
    char ltr = myFile.read();
    if (ltr == ',')
      ltr = '.';

    Init [i++] = ltr;
  }
  Serial.println(Init);
  _sInit = Init;
  ptr = strtok(Init, "\n");
  while (ptr != NULL)
  {
    ptr = strtok(NULL, "=");
    //Serial.print(ptr);
    j++;
    if (j == 6)
      NTC = atoi(ptr);
    if (j  == 7)
      MOD = atoi(ptr);
    if (j == 8)
      HMD = atoi(ptr);
    if (j == 9)
      Intervall = atoi(ptr);
    if (j == 10)
      Intervallkri = atoi(ptr);
    if (j == 11)
      _dMODUmrech = atof(ptr);
    if (j == 12)
      _iMaxTemp = atoi(ptr);
    if (j == 13)
      _iMinTemp = atoi(ptr);
    if (j == 14)
      _iMaxLuft = atoi(ptr);
    if (j == 15)
      _iMinLuft = atoi(ptr);
    if (j == 16)
      _dMaxLicht = atof(ptr);
    if (j == 17)
      _dMinLicht = atof(ptr);

    Serial.print("j=");
    Serial.print(j);
    Serial.print("=");
    Serial.println(ptr);
    //delay(100);
  }

  j = 0;
  myFile.close();
  Serial.println();
  Serial.print("NTC = " );
  Serial.println(NTC);
  Serial.print("MOD = " );
  Serial.println(MOD);
  Serial.print("HMD = " );
  Serial.println(HMD);
  Serial.print("Zeit Intervall = " );
  Serial.println(Intervall);
  Serial.print("Zeit Intervallkri = " );
  Serial.println(Intervallkri);
  Serial.print("_dMODUmrech = " );
  Serial.println(_dMODUmrech);
  Serial.print("_iMaxTemp = " );
  Serial.println(_iMaxTemp);
  Serial.print("_iMinTemp = " );
  Serial.println(_iMinTemp);
  Serial.print("_iMaxLuft = " );
  Serial.println(_iMaxLuft);
  Serial.print("_iMinLuft = " );
  Serial.println(_iMinLuft);
  Serial.print("_dMaxLicht = " );
  Serial.println(_dMaxLicht);
  Serial.print("_dMinLicht = " );
  Serial.println(_dMinLicht);

  //Erste Zeile /Legende erzeugen
  _sLegende = "Time";
  for (int i = 0; i < NTC; i++)
  {
    _sLegende += "\t";
    _sLegende += "NTC ";
    _sLegende += i + 1;
    _sLegende += "[°C]";
  }
  for (int i = 0; i < MOD; i++)
  {
    _sLegende += "\t";
    _sLegende += "MOD ";
    _sLegende += i + 1;
    _sLegende += "[V]";
  }
  for (int i = 0; i < HMD; i++)
  {
    _sLegende += "\t";
    _sLegende += "HMD ";
    _sLegende += i + 1;
    _sLegende += "[%]";
  }
  _sLegende += "\t RTC_Temp[°C]";

}
Initialisierung der SD Karte...Karte initialisiert.
13:54:12.763 -> Bitte Datum +.txt eingeben: (z.b. 20190428.txt)
13:54:12.830 -> -------
13:54:12.830 -> 
13:54:12.830 -> -------
13:54:12.863 -> INI.txt, gefunden:
13:54:12.963 -> 
13:54:12.963 -> [Sensoren]
13:54:12.997 -> NTC = 3    
13:54:12.997 -> MOD = 2    
13:54:12.997 -> HMD = 1    
13:54:13.030 -> Intervall [s] = 10    
13:54:13.063 -> Intervall kritisch [s] = 2    
13:54:13.063 -> MOD Umrechnungsfaktor = 8.25    
13:54:13.133 -> 
13:54:13.133 -> [Grenzwerte]
13:54:13.133 -> Max. Temperatur = 38    
13:54:13.168 -> Min. Temperatur = 15    
13:54:13.203 -> Max. Luftfeuchte = 80    
13:54:13.203 -> Min. Luftfeuchte = 20    
13:54:13.238 -> Max. Lichtleistung = 1.00    
13:54:13.272 -> Min. Lichtleistung = 0.01    
13:54:13.307 -> j=2=Erzeugungs Datum 
13:54:13.342 -> j=3= "21.06.2019 07:40:12"
13:54:13.410 -> 
13:54:13.410 -> [Sensoren]
13:54:13.443 -> NTC 
13:54:13.443 -> j=6= 3    
13:54:13.443 -> MOD 
13:54:13.476 -> j=7= 2    
13:54:13.476 -> HMD 
13:54:13.476 -> j=8= 1    
13:54:13.476 -> Intervall [s] 
13:54:13.509 -> j=9= 10    
13:54:13.509 -> Intervall kritisch [s] 
13:54:13.543 -> j=10= 2    
13:54:13.543 -> MOD Umrechnungsfaktor 
13:54:13.577 -> j=11= 8.25    
13:54:13.610 -> 
13:54:13.610 -> [Grenzwerte]
13:54:13.610 -> Max. Temperatur 
13:54:13.645 -> j=12= 38    
13:54:13.645 -> Min. Temperatur 
13:54:13.678 -> j=13= 15    
13:54:13.678 -> Max. Luftfeuchte 
13:54:13.712 -> j=14= 80    
13:54:13.712 -> Min. Luftfeuchte 
13:54:13.745 -> j=15= 20    
13:54:13.745 -> Max. Lichtleistung 
13:54:13.779 -> j=16= 1.00    
13:54:13.779 -> Min. Lichtleistung 
13:54:13.812 -> j=17= 0.01    
13:54:13.846 -> j=18=
13:54:13.846 -> 
13:54:13.846 -> NTC = 3
13:54:13.846 -> MOD = 2
13:54:13.846 -> HMD = 1
13:54:13.881 -> Zeit Intervall = 10
13:54:13.881 -> Zeit Intervallkri

Das ist schon mal mein Ethernetshield mit dem Mega

Das sieht nicht so aus, als wäre das mit dem DUE kompatibel.

Bitte prüfe das!

Herrx:
Das ist schon mal mein Ethernetshield mit dem Mega

Der Mega arbeitet mit 5V-Signalen an den Pins (also das Shield für diesen wohl auch), der DUE mit 3,3V! Die 5V können den Due zerstören.

Gruß Tommy

Habe hier ein Beispiel gefunden, indem es auch mit den gleichen Komponenten augebaut ist, wie bei mir.

Wenn das Shield nicht kompatiebel wäre, würde doch der Chip ganz kurzen Prozess machen und einfach kaputt gehen auf dem Due oder?

Das ist ein anderes Shield.
Das sieht aus wie ein R3 Shield

Du zeigst also 2 verschiedene Shields, und sagst, dass deins so aussieht.
Was ist jetzt richtig?

Das anfangs gezeigte, sieht wie ein R1 Nachbau aus. Und ein R1 Shield tuts ganz sicher nicht an 3,3V Systemen.

Und zu deinem letzt gezeigtem Shield steht bei den Ebay Händlern "Das Shield ist kompatibel mit UNO und Mega Arduinos". Keiner sagt: Auch für den DUE.

OK, einer sagt das Gegenteil, der ist sich aber nicht mit sich selbst einig, ob da jetzt ein W5100 oder ENC28J60 Chipsatz zum Einsatz kommt.

Soweit mir bekannt, ist erst das "Arduino Ethernet Shield 2" vollständig und zuverlässig mit dem DUE nutzbar.

Die älteren Nachbauten haben teilweise Spannungsteiler vor den SD Slots.
Das mag an 5V noch angehen, aber beim Betrieb an 3,3V ist da Ende,

alles ohne jede Gewähr

Herrx:
Habe hier ein Beispiel gefunden, indem es auch mit den gleichen Komponenten augebaut ist, wie bei mir.

Wenn das Shield nicht kompatiebel wäre, würde doch der Chip ganz kurzen Prozess machen und einfach kaputt gehen auf dem Due oder?

Wie was genau kaputtgeht, wenn es kaputtgeht, ist nicht (immer) vorhersehbar.
Das die SD Karte funktioniert bedeutet daß die Pin des SPI Busses nicht kaputt sind und darum auch das Ethernet-IC über den Bus angesprochen werden könnte.

Außerdem ist der Due auf den Fotos im Artikel meiner Meinung nach eine Fälschung.
https://social.technet.microsoft.com/wiki/contents/articles/31354.arduino-due-development.aspx

Grüße Uwe

combie:
Du zeigst also 2 verschiedene Shields, und sagst, dass deins so aussieht.
Was ist jetzt richtig?

Habe mal die Bilder von meinen Platinen in den Anhang getan. Habe noch ein zweites Ethernetshield gefunden, daher die Verwirrung. Sorry.

uwefed:
Außerdem ist der Due auf den Fotos im Artikel meiner Meinung nach eine Fälschung.

Ok das glaube ich auch.

eth.jpg

eth2.jpg

Laut R3 sollten Shields die IoRef Leitung auswerten um zwischen 5V und 3,3V unterscheiden zu können.
Deine Shields machen das nicht.
In wieweit das ein Problem ist, weiß ich nicht.

daher die Verwirrung. Sorry.

Beide sehen anders aus, als das im Posting #4

combie:
Beide sehen anders aus, als das im Posting #4

Ja habe es dort bestellt und das schwarze geliefert bekommen. Naja...

Hier hat noch jemand einen ganz interessanten Ansatz gehabt. Muss mir nur noch überlegen, ob ich das Board dann für die anderen Arduinos unbrauchbar mache.

https://forum.arduino.cc/index.php?topic=183676.0