Sensordaten in TXT.Datei auf SD Karte speichern


hallo ihr da draußen,

ich hätte da mal ein problem. meine arduino-erfahrungen beschränken sich auf das und ausschalten von led`s. jetzt versuche ich mich neuem und zwar sensordaten auf eine txt.datei auf einer sd karte speichern. der sd karten slot sitz auf einem ethernet shield von aukru. mein arduino ist ein noname nachbau vom mega 2560. und ja ich weiß originalteile sind besser. aber für den anfang und zum zerstören.... da kann ich gut.... sollte das günstige board reichen.

für den anfang habe ich erstmal mit den beispiel dateien aus der software angefangen.

sd  cardinfo.

code: [select]

/*
  sd card test
 this example shows how use utility libraries on the'
 sd library based in order info sd card.
 very useful testing card when you're not sure whether working or not.
 the circuit:
  * sd card attached spi bus follows:
 ** mosi - pin 11 on arduino uno/duemilanove/diecimila
 ** miso - pin 12 on arduino uno/duemilanove/diecimila
 ** clk - pin 13 on arduino uno/duemilanove/diecimila
 ** cs - depends on sd card shield or module.
   pin 4 used here consistency other arduino examples

 created  28 mar 2011
 by limor fried
 modified 9 apr 2012
 by tom igoe
 */
// include sd library:
#include <spi.h>
#include <sd.h>
// set variables using sd utility library functions:
sd2card card;
sdvolume volume;
sdfile root;
// change match sd shield or module;
// arduino ethernet shield: pin 4
// adafruit sd shields , modules: pin 10
// sparkfun sd shield: pin 8
// mkrzero sd: sdcard_ss_pin
const int chipselect = 4;
void setup() {
  // open serial communications , wait port open:
  serial.begin(9600);
  while (!serial) {
    ; // wait serial port connect. needed native usb port only
  }

  serial.print("\ninitializing sd card...");
  // we'll use initialization code utility libraries
  // since we're testing if card working!
  if (!card.init(spi_half_speed, chipselect)) {
    serial.println("initialization failed. things check:");
    serial.println("* card inserted?");
    serial.println("* wiring correct?");
    serial.println("* did change chipselect pin match shield or module?");
    return;
  } else {
    serial.println("wiring correct , card present.");
  }
  // print type of card
  serial.print("\ncard type: ");
  switch (card.type()) {
    case sd_card_type_sd1:
      serial.println("sd1");
      break;
    case sd_card_type_sd2:
      serial.println("sd2");
      break;
    case sd_card_type_sdhc:
      serial.println("sdhc");
      break;
    default:
      serial.println("unknown");
  }
  // try open 'volume'/'partition' - should fat16 or fat32
  if (!volume.init(card)) {
    serial.println("could not find fat16/fat32 partition.\nmake sure you've formatted card");
    return;
  }

  // print type , size of first fat-type volume
  uint32_t volumesize;
  serial.print("\nvolume type fat");
  serial.println(volume.fattype(), dec);
  serial.println();
  volumesize = volume.blockspercluster();    // clusters collections of blocks
  volumesize *= volume.clustercount();       // we'll have lot of clusters
  volumesize *= 512;                            // sd card blocks 512 bytes
  serial.print("volume size (bytes): ");
  serial.println(volumesize);
  serial.print("volume size (kbytes): ");
  volumesize /= 1024;
  serial.println(volumesize);
  serial.print("volume size (mbytes): ");
  volumesize /= 1024;
  serial.println(volumesize);

  serial.println("\nfiles found on card (name, date , size in bytes): ");
  root.openroot(volume);
  // list files in card date , size
  root.ls(ls_r | ls_date | ls_size);
}

void loop(void) {
}


das ergebnis ist folgendes:
quote
initializing sd card...wiring correct , card present.
card type: sd2
volume type fat16
volume size (bytes): 1018413056
volume size (kbytes): 994544
volume size (mbytes): 971
files found on card (name, date , size in bytes):
was mich hier schon wundert ist das er die dateien und ordner nicht auflistet. sollte er das nicht?
die karte ist im fat (standard) formatiert und enthält 1 txt datei und ein ordner mit einer txt datei.

als weiteres habe ich versuche das sd read/write auszuführen.

code: [select]
/*
  sd card read/write
 this example shows how read , write data , sd card file
 the circuit:
 * sd card attached spi bus follows:
 ** mosi - pin 11
 ** miso - pin 12
 ** clk - pin 13
 ** cs - pin 4 (for mkrzero sd: sdcard_ss_pin)
 created   nov 2010
 by david a. mellis
 modified 9 apr 2012
 by tom igoe
 this example code in public domain.
 */
#include <spi.h>
#include <sd.h>
file myfile;
void setup() {
  // open serial communications , wait port open:
  serial.begin(9600);
  while (!serial) {
    ; // wait serial port connect. needed native usb port only
  }

  serial.print("initializing sd card...");
  if (!sd.begin(4)) {
    serial.println("initialization failed!");
    return;
  }
  serial.println("initialization done.");
  // open file. note 1 file can open @ time,
  // have close 1 before opening another.
  myfile = sd.open("test.txt", file_write);
  // if file opened okay, write it:
  if (myfile) {
    serial.print("writing test.txt...");
    myfile.println("testing 1, 2, 3.");
    // close file:
    myfile.close();
    serial.println("done.");
  } else {
    // if file didn't open, print error:
    serial.println("error opening test.txt");
  }
  // re-open file reading:
  myfile = sd.open("test.txt");
  if (myfile) {
    serial.println("test.txt:");
    // read file until there's nothing else in it:
    while (myfile.available()) {
      serial.write(myfile.read());
    }
    // close file:
    myfile.close();
  } else {
    // if file didn't open, print error:
    serial.println("error opening test.txt");
  }
}
void loop() {
  // nothing happens after setup
}

da bekomme ich folgende meldung im seriellen monitor

code: [select]
initializing sd card...initialization done.
error opening test.txt
error opening test.txt


jetzt meine frage.
wo könnte mein fehler liegen?
ich habe auch schon probiert die karte in anderen formaten zu formatieren hat aber auch keine verbesserung gebracht.

hier nochmal die daten von den benutzten geräten:

arduino nachbau
quote
the sainsmart mega 2560 microcontroller board based on atmega2560. has 54 digital input/output pins (of 14 can used pwm outputs), 16 analog inputs, 4 uarts (hardware serial ports), 16 mhz crystal oscillator, usb connection, power jack, icsp header, , reset button. contains needed support microcontroller; connect computer usb cable or power ac-to-dc adapter or battery started. mega compatible shields designed arduino duemilanove or diecimila.

summary:

 microcontroller: atmega2560
 operating voltage: 5v
 input voltage (recommended): 7-12v
 input voltage (limits): 6-20v
 digital i/o pins: 54 (of 14 provide pwm output)
 analog input pins: 16
 dc current per i/o pin: 40 ma
 dc current 3.3v pin: 50 ma
 flash memory: 256 kb of 8 kb used bootloader
 sram: 8 kb
 eeprom: 4 kb
 clock speed: 16?mhz
ethernet shield -
quote
aukru w5100 ethernet schild shield mit micro-sd kartensteck für arduino uno mega 2560 1280 328
 this ethernet shield based on wiznet w5100 ethernet chip , gives easy way arduino online. directly supported official arduino ethernet library. includes additional micro-sd card slot.
 kontroller: w5100
 konpatibel mit arduino main board, 2009 , uno, mega 1280, mega 2560 usw.

 lieferumfang
 1 x ethernet-shield

 arduino-compatible;hinweis: diese ist nicht original arduino product.it ist nur ein ersatz-zubehör aus aukru.
es wäre ganz toll wenn sich da jemand mal der sache annehmen könnte und mir ein tip geben wo evtl. der fehler liegt.
bitte wenn es geht in normaler sprache. bin 39 jahre und des gui/api/cpu/mfg slang nicht mächtig. ich bin auch eher ein anwender der fertigen programme und sehe mir die sehe mir die .h und .cpp dateien eher mit knoten in den augen an.

grüße aus dem rodgau

fabian

quote
das ergebnis ist folgendes:was mich hier schon wundert ist das er die dateien und ordner nicht auflistet.
prüfe mal nach, ob alle auf der sd-karte angelegten ordnernamen und dateinamen der 8.3. konvention für kurze dateinamen entsprechen.

die standardmäßige sd-library kann nur 8.3 dateinamen.

mit einem alter von 39 jahren kennst du ja wohl kein ms-dos-betriebsssystem der achtziger jahre, hier mal ein crash-kurs in 8.3 ordner und dateinamen:

ein ordner oder dateiname kann bis zu acht(!) zeichen lang sein!
kürzer ist erlaubt, länger nicht!

also gültige ordnernamen wären beispielsweise "2016", "2017", "texte" oder "bilder".

ungültig sind im fat-system namen, die länger sind, zum beispiel "meine texte".
wobei "meine texte" auch noch aus einem zweiten grund ein ungültiger 8.3 dateiname ist: da ist ein (nicht erlaubtes) leerzeichen drin!

außerdem darf ende des namens ein punkt folgen, und weitere drei zeichen als dateiendung, wovon man hauptsächlich bei dateinamen und nicht bei ordnernamen gebrauch macht.

also checke deine sd-karte nochmal nach:
- entsprechen alle(!) datei- und ordnernamen auf der karte der 8.3 namenskonvention?

wenn nicht, dann kannst du sie mit der sd-library, die mit der arduino ide mitgeliefert wird, nicht lesen.


Arduino Forum > International > Deutsch (Moderator: uwefed) > Sensordaten in TXT.Datei auf SD Karte speichern


arduino

Comments

Popular posts from this blog

DHT11 Time out error using v0.4.1library

Sketch upload fails with Java error (___REMOVE___/bin/avrdude)!

Arduino Uno + KTY81/210 temperature sensor