Pages: [1]   Go Down
Author Topic: SainSmart Mega 2560 + EthernetShield - Zugriff auf SD Karte  (Read 2211 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Leute,

ich suche schon zwei Tage vergebens nach einer Lösung und muss - obwohl es dazu wirklich schon einige Threads gibt - einen neuen aufmachen!

Ich habe wie schon erwähnt das SainSmart Mega 2560 und habe mir dazu ein EthernetShield gekauft. Nun heißt es, dass man das Shield einfach aufstecken soll und bei dem Mega den Pin 53 auf High setzen soll. Das alles habe ich gemacht und trotzdem bekomme ich keine Verbindung über USB auf die SD-Karte hin. Mein Code sieht im Moment wie folgt aus ...

Code:
const int chipSelect = 4;   
void setup()
{
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  Serial.print("\nInitializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output
  // or the SD library functions will not work.
  pinMode(53, OUTPUT);     // change this to 53 on a mega
  digitalWrite(53, HIGH);
....
....

Ich bekomme immer die Information aus dem BeispielCode, dass keine Verbindung zur SD-Karte hergestellt werden konnte! Was mach ich falsch????

Quote
Initializing SD card...initialization failed. Things to check:
* is a card is inserted?
* Is your wiring correct?
* did you change the chipSelect pin to match your shield or module?
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 59
Posts: 3071
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wird denn dein
const int chipSelect = 4;
im weiteren verwendet, oder ist da irgendwo eine feste 10 oder so... ?
Quote
....
....
steht bestimmt so nicht im Code, sondern ersetzt das worauf es ankommt.

Du hast ja nicht das Aduino Ethernet Shield, sondern ein "Ethernet Schild shield Ethernet-Shield für Arduino mega 2560 w5100" von 999vista aus HongKong.
Gibt naürlich keinen Grund, warum das nicht 100% gleich sein sollte, zumal sicher auch keine eigene Dokumentation dabei war.
Aber schauen sollte man schon mal:
Stimmt CS=4 auch für dein Shield ?
Kriegt der SD-Adapter auch die anderen Signale ( MISO, MOSI, SCK) richtig?

Geht deine SD Card mit einem anderen Arduino ?

Quote
Things to check:
* is a card is inserted?
* Is your wiring correct?
* did you change the chipSelect pin to match your shield or module?
... sind die besten Tips die man zu deiner Fehler-Beschreibung geben kann, fürchte ich.

Du kannst natürlich noch die Fehlerbehandlung der SD Library erweitern, um zu sehen, wo es in der Initialisierung hängt,
und/oder ausprobieren, ob ganz ohne SD Card überhaupt einen Unterschied macht.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Desert-Fox,

hab auch das Shield und den Mega im Einsatz... mein Code nutzt aber diese Basis aus der der SD-Lib:

Code:
#include <SD.h>
const int chipSelect = 4;

void setup()
{
 Serial.begin(9600);
 }


  Serial.print("Initializing SD card...");
  pinMode(10, OUTPUT);
 
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    return;
  }
  Serial.println("card initialized.");
}

void loop()
{
  String dataString = "";

  for (int analogPin = 0; analogPin < 3; analogPin++) {
    int sensor = analogRead(analogPin);
    dataString += String(sensor);
    if (analogPin < 2) {
      dataString += ",";
    }
  }

  File dataFile = SD.open("datalog.txt", FILE_WRITE);

  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    Serial.println(dataString);
  } 
  else {
    Serial.println("error opening datalog.txt");
  }
}


Also auch auf dem Mega wird der PIN4 genutzt.

Viele Grüße

Tom
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Leute,

vielen Dank für die schnelle Rückmeldung.

Ich habe schon einiges ausprobiert und div. Pins getestet und mit keinem hat es funktioniert! Auch dein Code @Tom ist leider erfolglos  smiley-sad

Quote
Initializing SD card...Card failed, or not present

Hab vorhin gesehen, dass die Karte in NTFS formatiert war! Das hab ich wieder alles auf die Default-Einstellungen (FAT und Standardgröße) zurückgesetzt. Aber auch das leider ohne Erfolg. Ein anderes Board zum testen hab ich leder nicht. Bei der SD-Karte handelt es sich um eine MicroSD SanDisc 1GB. Die Größe sollte doch eigentlich auch keine Schwierigkeiten bereiten -_-
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 59
Posts: 3071
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Probier mal das CardInfo Beispiel und/oder schau dir in der library an, was SD.begin(4); macht, bis es false zurückliefert.
Sind nur wenige Funktionen...

Und ja, eine frisch formatierte (FAT16) "kleine" 1GB Karte sollte eigentlich gut sein !
Kontaktprobleme im micro - Adapter ?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Oh man! Es klappt einfach nicht! Hab mich nun 3 Tage mit dem F**K rumgeärgert und es will einfach nicht funktionieren!

Bin nun den ganzen Code durchgegangen, dabei ist mir aufgefallen, dass in der Sd2PinMap.h der folgende Code steht .... weiter unten im Code nochmal das gleiche!

Code:
...
|| defined(__AVR_ATmega2560__)
// Mega

// Two Wire (aka I2C) ports
uint8_t const SDA_PIN = 20;  // D1
uint8_t const SCL_PIN = 21;  // D0

// SPI port
uint8_t const SS_PIN = 53;    // B0
uint8_t const MOSI_PIN = 51;  // B2
uint8_t const MISO_PIN = 50;  // B3
uint8_t const SCK_PIN = 52;   // B1
...

Dabei steckt das Shield nicht auf diesen Pins! Das kann doch nicht sein, dass nur bei mir das Teil nicht funktioniert ;-(
« Last Edit: January 09, 2013, 07:16:50 pm by desert-fox » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo zusammen,

nachdem ich immer noch kein Schritt weiter gekommen bin, fange ich nun an das Shield auf Funktion zu prüfen und möchte einen "einfachen" Netzzugriff über mein Netzwerk realisieren.

Im Internet kursieren so manche Verdrahtungsanweisungen zum Thema Mega2560 + EthernetShield. Ich habe mich daher auf diese hier bezogen und den Aufbau mal nachgebaut. Die 4 Pinns sind nach hinten weggebogen und haben keine Verbindung zum Mega. Bei dem Code handelt es sich um den BeispielCode "Webclient". Da ich jedoch ohne DHCP arbeite, hab ich ihm die IP-Adresse statisch zugewiesen. Meine Netzwerkkarte am PC ist wie im "ipconfig /all" Bild zu sehen konfiguriert.

Und ... es klappt nix. Ich kann das Shield noch nichtmal anpingen nachdem ich die IP-Konfiguration vorgegeben habe. Jemand noch eine Idee wie ich irgendwie das Teil auf Funktion prüfen kann?

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

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(173,194,44,87); // Google
IPAddress ip(192,168,178, 15);
IPAddress gateway(192,168,178, 1);
IPAddress subnet(255, 255, 255, 0);

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  Ethernet.begin(mac, ip,gateway, gateway); //Kein DHCP und daher hab ich die IP's vorgegeben
  // start the Ethernet connection:
//  if (Ethernet.begin(mac) == 0) {
//    Serial.println("Failed to configure Ethernet using DHCP");
//    // no point in carrying on, so do nothing forevermore:
//    for(;;)
//      ;
//  }
  // give the Ethernet shield a second to initialize:
  delay(10000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /search?q=arduino HTTP/1.0");
    client.println();
  }
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop()
{
  // if there are incoming bytes available
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    for(;;)
      ;
  }
}


* IMG_2256.jpg (394.31 KB, 640x427 - viewed 57 times.)

* IMG_2257.jpg (293.83 KB, 640x427 - viewed 51 times.)

* netzwerk.png (10.15 KB, 671x215 - viewed 42 times.)
Logged

Germany
Offline Offline
Jr. Member
**
Karma: 1
Posts: 98
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ne ganz blöde frage....

Warum brauchst du die Verbindungen? Mein Shield läuft mit dem Mega über den ISP problemlos. Oder hat das SainSmart Mega kein ISP-Konnector? Was mir aufgefallen war, das die SD-funktion immer nur ging, danchdem ich erfolgreich ne anfrage über das Ethernet Teil geschickt habe, also Z.b. nen DHCP request. Ohne Ethernet zu starten geht bei mir, warum auch immer, die Karte auch net...
Achso und die Pins habe ich auch nicht weggebogen. smiley-grin
« Last Edit: January 13, 2013, 04:21:13 pm by Chaos_Lord » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Nun wenn man am Rande des Wahnsinns ist, dann versucht man alles um es ans Laufen zu bekommen :-)

Ich bin ein absoluter Anfänger und versuche mich hier durchzuboxen. Die "einfachen" Beispiele nur mit dem Board alleine funktionieren alle einwandfrei. Bei dem SD-Shield hat bisher nocht garnichts funktioniert und alles was man dazu im Netz findet sieht auf jeder Seite irgendwie anders aus. Genug geheult! smiley-grin

Ja das Board hat ISP. Schreib mal nen Beispielcode für mich bitte. Werde es direkt ausprobieren.
Logged

Germany
Offline Offline
Jr. Member
**
Karma: 1
Posts: 98
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bieg die pins wieder zurück, dann steck die Platine hinten druf und probier mal irgendwas von den Vorgeschlagenen Beispielen. Muß auf 2 Sachen achten:

1. Die Mac Adresse ändern (die steht auf dem schield hinten drauf)
2. Das NTP Beispiel läuft bei mir nicht mit dem dort eingetragenem Nameserver (nachdem ich meinen lokalen hier eingetragen habe klappts wunderbar)

Ansonsten sollte das mit den Beispielen gehen. nicht die SPI include vergessen smiley-grin
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich könnte vor Freude auf dem Tisch tanzen smiley-grin

Code:
Initializing SD card...Wiring is correct and a card is present.
Card type: SD2
Volume type is FAT32
Volume size (bytes): 1011351552
Volume size (Kbytes): 987648
Volume size (Mbytes): 964
Files found on the card (name, date and size in bytes):

Ich habe mir vor einigen Tagen ein neues Shield bestellt. Das ist heute geliefert worden und ich habe es natürlich gleich ausprobiert und siehe da! Läuft!
Als Anfänger kann man sich da ganz schön die Zähne dran ausbeißen! Hoffentlich funktionieren nun auch noch die anderen Beispiele ;-)
Erstmal besten Dank für den Support!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 33
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
Ethernet.begin
connecting...
connected
GET /search?q=arduino HTTP/1.0
disconnecting.
Alles läuft! Hammer!  smiley
Logged

Pages: [1]   Go Up
Jump to: