Hallo,
aus einem YouTube -Video möchte ich diesen Sketch benutzen:
/*
* Arduino SD Card Tutorial Example
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#include <SD.h>
#include <SPI.h>
File myFile;
int pinCS = 53; // Pin 10 on Arduino Uno
void setup() {
Serial.begin(9600);
pinMode(pinCS, OUTPUT);
// SD Card Initialization
if (SD.begin())
{
Serial.println("SD card is ready to use.");
} else
{
Serial.println("SD card initialization failed");
return;
}
// Create/Open file
myFile = SD.open("test.txt", FILE_WRITE);
// if the file opened okay, write to it:
if (myFile) {
Serial.println("Writing to file...");
// Write to file
myFile.println("Testing text 1, 2 ,3...");
myFile.close(); // close the file
Serial.println("Done.");
}
// if the file didn't open, print an error:
else {
Serial.println("error opening test.txt");
}
// Reading the file
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("Read:");
// Reading the whole file
while (myFile.available()) {
Serial.write(myFile.read());
}
myFile.close();
}
else {
Serial.println("error opening test.txt");
}
}
void loop() {
// empty
}
Leider ist der zugehörige Anschlussplan zu einem MEGA nicht eindeutig. Im Sketch finde ich nur, dass CS mit Pin 53 verbunden werden soll.
Wo finde ich, oder kann ich verändern, die Verbindungen zu den Pinnen MISO, MOSI und SCK für einen Arduino MEGA?
vG
freduino13
In der technischen Spezifikation des Mega: https://www.arduino.cc/en/Main/ArduinoBoardMega2560
SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS).
Oder in der SD.h doku.
Danke für die Hilfe. Aber leider reagiert das Programm trotzdem so:
"SD card initialization failed"
Ist es möglich, dass diese beiden Library-Aufrufe
#include <SD.h>
#include <SPI.h>
auf meinem PC nicht die sind, die sich auf einen MEGA beziehen?
vG
freduino13
Ein defektes Modul ist unwahrscheinlich, weil ein Zweites sich genau so verhält!
Dein Fehler kann auch eine fehlende, defekte, nicht formatierte oder falsche SD-Karte sein.
SD-Karte ist drin und laut PC als FAT32 formatiert.
Gruß freduino13
Kabel falsch gesteckt oder schlechte Steckverbindung.
kann es sein, dass eine SD 32 GB zu groß ist?
Gruß
freduino13
Nimm doch einfach mal nur ein Beispiel aus der SD.h z.B. das "Cardinfo"
wenn das funktioniert, dann kannst du weiter machen.
SDHC bis 32Gb sollten funktionieren, aber ich hab bisher nur bis 8GB ausprobiert.
Hallo,
es klappt leider auch nicht mit einem UNO und nicht mit 16 GB und nicht mit den Programmen aus der Bibliothek Datalogger, da kommt die Meldung "error opening datalog.txt"
oder
CardInfo. da kommt dann:
"Initializing SD card...initialization failed. Things to check:
is a card inserted?
is your wiring correct?
did you change the chipSelect pin to match your shield or module?"
Ich bin nun ziemlich ratlos.
Gruß
freduino13
Die Card-Reader sind normal recht einfach zu händeln.
Welchen (Link) hast du ?
Ist dein Cardreader 5V tauglich?
wie ist er verdrahtet?
an sich funktioniert das recht problemlos....
Ich habe es auch für problemlos gehalten.
Es handelt sich um dieses Modul, das die 5 auf 3,3 Volt-Anpassungen auf dem Modul haben soll:
SD Memory Card Module TE417
Der Anschluss ist so wie oben erwähnt:
SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS).
Gruß
freduino13
Sollte funktionieren. 5v und GND auch verbunden?
hast du im Beispielcode den Chip-select pin (SS) auf Pin 53 angepasst?
guntherb:
Sollte funktionieren. 5v und GND auch verbunden?
hast du im Beispielcode den Chip-select pin (SS) auf Pin 53 angepasst?
Danke, beim MEGA hatte ich das, klappte aber trotzdem nicht.
Beim UNO hatte ich das aber übersehen und nun klappt es und ich weiß wenigstens erst mal dass das Modul i.O. ist.
Beim MEGA muss ich wohl noch weiter suchen!!!!
Gruß
freduino13
Hallo,
auch mit den SD-Beispielprogrammen und dem UNO klappt es nun, wenn ich aus dem Original das
#include <SPI.h>
#include <SD.h>
const int chipSelect = 4;
in das verändere:
#include <SPI.h>
#include <SD.h>
const int chipSelect = 10;
Verstehen tue ich das leider nicht. Wieso ist das Original falsch??
Gruß
freduino13
combie
March 29, 2017, 3:41pm
17
Die meisten Shields mit Card Slot verwenden Pin 4 für /CS
freduino13:
Verstehen tue ich das leider nicht. Wieso ist das Original falsch??
Liegt vielleicht daran, dass du CS an Pin 10 angeschlossen hast?
agmue
March 29, 2017, 7:32pm
19
freduino13:
Verstehen tue ich das leider nicht. Wieso ist das Original falsch??
Ich sehe bei Dir:
int pinCS = 53;
...
pinMode(pinCS, OUTPUT);
...
if (SD.begin())
Bei mir funktioniert es so:
#define pinCS 53
...
if (SD.begin(pinCS))
aber auch so:
if (SD.begin())
weil SD_CHIP_SELECT_PIN = 53 beim Mega2560 ist, beim UNO 10. Laß Dir die Konstante mal ausgeben, es ist der Standard-Pin.
Bei einem Shield mit SD-CS an Pin4 muß man die Abweichung dann mit SD.begin(4) angeben.
Bei mir hat es sowohl mit dem UNO (int pinCS = 10;) als auch mit dem MEGA (int pinCS = 53;) funktioniert.
Es war aber eher wie ein Glücksspiel. Häufig war die SD-Karte auch vom PC nicht mehr lesbar und ich musste sie neu formatieren. Meine 32 GB SD ist nagelneu.
Ein Bekannter von mir, der auch einige Stunden mit einem SD-Modul rumexperimentiert hat, ist zu dem Schluss gekommen, dass es an der SD-Karte liegen muss, weil er nun eine gefunden hat, mit der es immer funktioniert!!
Aber welche ist die richtige?
Z.Z. geht's bei mir mal wieder gar nicht!! MIST! Das habe ich mir doch sehr viel einfacher vorgestellt.
Gruß
freduino13