-         

Ergebnis 1 bis 7 von 7

Thema: ArduinoMega2560 und SD-Card Modul bringen mich zur Weissglut... ;)

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1

    ArduinoMega2560 und SD-Card Modul bringen mich zur Weissglut... ;)

    Anzeige

    Hallo Freunde !

    Bestimmt hat wer von Euch auch schon von diesem Problem gehört, vielleicht selber gehabt und es gelöst. Ich hatte mich im Web glaube ich ausreichend belesen. So habe ich das Modul bei ebay erstanden

    Ageschlossen am Arduino ist es über einen Sparkfun 4Ch-PegelShifter BOB 12009.

    Die Pins sind wie folgt beschaltet

    Code:
    SD        Arduino Mega
    CS    =  53
    SCK   =  52
    MOSI  =  51
    MISO  =  50
    Ich habe zwei Module getestet und auch mehrere SD Karten, aber nur Fehlermeldungen, das die SD Card nicht Initialisiert werden kann...

    Hat wer noch nen Tip für mich ??

    Ich werde die Module nochmals am Arduino UNO testen, denn da ging es ja ...komisch

    Gruss und Danke

    Gerhard

    Nachtrag :

    Arduino UNO

    Initializing SD card...Wiring is correct and a card is present.

    Card type: SD2

    Volume type is FAT16

    Volume size (bytes): 1977286656
    Volume size (Kbytes): 1930944
    Volume size (Mbytes): 1885

    Files found on the card (name, date and size in bytes):
    LOGGER00.CSV 2000-01-01 01:00:00 1293
    APPEND.TXT 2000-01-01 01:00:00 341100
    LOGGER01.CSV 2000-01-01 01:00:00 147
    LOGGER02.CSV 2000-01-01 01:00:00 1359
    LOGGER03.CSV 2000-01-01 01:00:00 18
    LOGGER04.CSV 2000-01-01 01:00:00 169
    LOGGER05.CSV 2000-01-01 01:00:00 71
    LOGGER06.CSV 2000-01-01 01:00:00 18
    LOGGER07.CSV 2000-01-01 01:00:00 578
    LOGGER08.CSV 2000-01-01 01:00:00 45
    LOGGER09.CSV 2000-01-01 01:00:00 4763


    ArduinoMega:

    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?

    Hier der geänderte Source von Arduino Beispielen (Cardinfo)
    Code:
    /*
      SD card test 
       
     This example shows how use the utility libraries on which the'
     SD library is based in order to get info about your SD card.
     Very useful for testing a card when you're not sure whether its working or not.
         
     The circuit:
      * SD card attached to SPI bus as follows:
     ** MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila  51 ArduMega
     ** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila  50 ArduMega
     ** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila   52 ArduMega
     ** CS - depends on your SD card shield or module.      53 ArduMega
             Pin 4 used here for consistency with other Arduino examples
    
     
     created  28 Mar 2011
     by Limor Fried 
     modified 9 Apr 2012
     by Tom Igoe
     */
     // include the SD library:
    #include <SD.h>
    
    // set up variables using the SD utility library functions:
    Sd2Card card;
    SdVolume volume;
    SdFile root;
    
    // change this to match your SD shield or module;
    // Arduino Ethernet shield: pin 4
    // Adafruit SD shields and modules: pin 10
    // Sparkfun SD shield: pin 8
    const int chipSelect = 53;    
    
    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
      }
    
    
      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);
    
      // we'll use the initialization code from the utility libraries
      // since we're just testing if the card is working!
      if (!card.init(SPI_HALF_SPEED, chipSelect)) {
      
        Serial.println("initialization failed. Things to check:");
        Serial.println("* is a card is inserted?");
        Serial.println("* Is your wiring correct?");
        Serial.println("* did you change the chipSelect pin to match your shield or module?");
        return;
      } else {
       Serial.println("Wiring is correct and a card is present."); 
      }
    
      // print the 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");
      }
    
      // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
      if (!volume.init(card)) {
        Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
        return;
      }
    
    
      // print the type and size of the first FAT-type volume
      uint32_t volumesize;
      Serial.print("\nVolume type is FAT");
      Serial.println(volume.fatType(), DEC);
      Serial.println();
      
      volumesize = volume.blocksPerCluster();    // clusters are collections of blocks
      volumesize *= volume.clusterCount();       // we'll have a lot of clusters
      volumesize *= 512;                            // SD card blocks are always 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 the card (name, date and size in bytes): ");
      root.openRoot(volume);
      
      // list all files in the card with date and size
      root.ls(LS_R | LS_DATE | LS_SIZE);
    }
    
    
    void loop(void) {
      
    }
    Geändert von oderlachs (15.03.2015 um 11:27 Uhr)
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    2.448
    hallo,
    auch ich hatte Probleme mit einigen dieser oder ähnlicher Module.
    Es gibt allerdings unterschiedliche Hardware-Ausführungen.

    Bislang gab es Probleme mit AVR (Megas), mit ARM (Due) funktionierte es immer. Ich habe immer die SPI-Header von Mega und Due verwendet, Uno habe ich nicht getestet.

    Woran es früher gelegen haben mag, weiß ich nicht.

    Ich habe jetzt auf Sketch 1.6.1 aktualisiert, dabei wurden auch die AVR- und ARM-Treiber aktualisiert - es funktioniert nun.

    Hier ist der Testcode, der auch gleich andere Funktionen testet - er wartet auf eine korrekt eingesetzte SD-Karte, man kann auch eine bereits eingesetzte kurz rausnehmen und wieder einsetzen.
    Bislang aber keine Probleme mehr.

    ps,
    edit:
    ich habe die SD-Karten nun auch wieder über Windows formatiert, obwohl teilw. etwas anderes empfohlen wird - ich habe den Eindruck, auch deswegen könnte es jetzt zuverlässiger arbeiten.
    Getestet habe ich eine 1 GB SD mit FAT- und eine 16GB SD mit FAT32-Formatierung: beide OK.
    FATex funktionert NICHT.

    Code:
    /*
    SD card: fprintf_() und fgets_()
    ver 1.01
    */
    #include <stdarg.h>
    #include <stdio.h>
    #include <SPI.h>
    #include <SD.h>
    
    
    // SD Card
    #define SD_CSpin 4
    File myFile;
    char fname[64];
    
    char sdata[128];
    char sbuf[128];
    
    
    
    //*******************************************************************************************
    char * fgets_ ( char * str, int32_t num, File * stream ) {
      int32_t i = 0;
      int16_t   chr;
     
      strcpy(str, "");
      while (i < (num - 1)) { // got room for newline and terminating null?
        chr = stream->read();
        if (chr < 0) // end of file
          break;
        str[i++] = chr;
        if ('\n' == chr) // end of line
          break;
      }
     
      if (i) { // room in buffer for terminating null
        str[i] = 0;
        return str;
      }
      else
      return NULL; // buffer too small or immediate end of file
      // { strcpy(str, ""); return str; } // alternative
    }
    //*******************************************************************************************
    
    
    
    //******************************************************************************************* 
    int32_t  fprintf_ ( File * stream, const char fmtstr[], ... ) {
       char      str[1024];
       va_list   arguments;
       int16_t   num;
       
       va_start( arguments, fmtstr);
       num = vsnprintf(str, sizeof str, fmtstr, arguments);
       // #debug
       // Serial.println( "string to write to file="); Serial.println( str);   
       stream->print(str);
       va_end( arguments );
    
       return num;
    }
    //******************************************************************************************* 
    
    
    void setup()
    {
      int16_t  p, i, cnt;
      float    x;
      char     sval[20];
      int16_t  ival;
      double   fval;
     
      pinMode(SD_CSpin, OUTPUT); 
      Serial.begin(9600);
       
      sprintf(sbuf,"#: SD Initializing... ");
      Serial.println(sbuf); 
    
      while(!SD.begin(SD_CSpin) ) {
        sprintf(sbuf,"#: ...SD init failed ");
        Serial.println(sbuf);
        delay(1000);
      }
     
      sprintf(sbuf,"#: ...SD OK !      ");
      Serial.println(sbuf); 
      strcpy(fname,"test.txt");
     
      if (SD.exists(fname) ) {
        sprintf(sbuf,"#: %s exists     ",fname);
        Serial.println(sbuf); 
       
        sprintf(sbuf,"#: Removing %s      ",fname);   
        Serial.println(sbuf);
       
        SD.remove("test.txt");
        // removed: success ?
        if (SD.exists(fname) ) {
           sprintf(sbuf,"#: %s  exists     ",fname); 
           Serial.println(sbuf); 
        }
        else {
           sprintf(sbuf,"#: %s  N/A     ",fname); 
           Serial.println(sbuf); 
         }
      }
       
     
      // open the file. note that only one file can be open at a time,
      // so you have to close this one before opening another. 
      myFile = SD.open(fname, FILE_WRITE);
     
      if (myFile) {
        // if the file opened okay, write to it, then close file:
        sprintf(sbuf,"#: Writing strings to %s ",fname);
        Serial.println(sbuf);
       
        //---------------------------------------------------------------------------------
        // write data to file
        fprintf_(&myFile, "%s\n%d\n%d\n%f\n%f\n", "Teststring", 1, 2, PI, 4.567890);   
        //---------------------------------------------------------------------------------
       
        // close the file:
        myFile.close();
        sprintf(sbuf,"#: %s closed.   ",fname);
        Serial.println(sbuf); 
      } 
      else {
        // if the file didn't open, print an error:
        sprintf(sbuf,"#: error opening %s   ",fname);
        Serial.println(sbuf);     
      }
     
      Serial.println();
      // re-open the file for reading:
      myFile = SD.open(fname);
      if (myFile) {
        sprintf(sbuf,"#: reading %s ",fname);
        Serial.println(sbuf); 
       
        // read from the file until there's nothing else in it:
        i=0;
        cnt=1;   
       
        while (myFile.available()) {
          strcpy(sdata, "");
          fgets_ ( sdata, 20, &myFile ); 
          Serial.print(cnt); Serial.print(": string raw="); Serial.println(sdata);
          Serial.println("rueckformatiert:");
          if (cnt==1) {Serial.print("str  ="); Serial.println(sdata); }
          if (cnt==2) {Serial.print("int  ="); Serial.println(atoi(sdata) ); }
          if (cnt==3) {Serial.print("int  ="); Serial.println(atoi(sdata) ); }
          if (cnt==4) {Serial.print("float="); Serial.println(atof(sdata) ); }
          if (cnt==5) {Serial.print("float="); Serial.println(atof(sdata) ); }
          ++cnt;
        } 
       
        // close the file:
        myFile.close();       
        sprintf(sbuf,"#: %s closed. ",fname);
        Serial.println(sbuf);     
      } else {
        // if the file didn't open, print an error:
        sprintf(sbuf,"#: error opening %s   ",fname);     
        Serial.println(sbuf);
    
      }
    }
    
    void loop()
    {
      // nothing happens after setup
    }
    Geändert von HaWe (15.03.2015 um 20:28 Uhr)
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1
    Danke HaWe !!

    Zu Pindaten zum ArduinoMega sind selbst auf arduino.cc sehr widersprüchlich...also Würfeln was richtig ist ...und richtig ist jedenfalls der ISP Header !!

    Gruss
    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    2.448
    funktioniert es denn jetzt?

    BTW, ich verwende keine Levelshifter, meine Module sehen aus wie deine, sind aber 3.3 und 5V kompatibel.
    Allerdings hat der SPI-Header immer 5V, auch auf dem Due.

    ps,
    Pinouts sind hier auf dieser Seite, habe ich gerade gegoogelt:
    http://forum.arduino.cc/index.php?topic=146511.0

    die Pinnummern sind forlgendermassen zugeordnet:

    Code:
    // SPI header                        |--|
    // SPI pins Due           -----------|  |------------
    //#define MISO     74 //  |  RES   76_SCK   74_MISO |
    //#define MOSI     75 //  | -GND   75_MOSI   Vc+5V  |
    //#define SCK      76 //  ---------------------------
    
    // SPI pins Mega
    //#define MISO     50
    //#define MOSI     51
    //#define SCK      52
    
    //#define SS       53
    Geändert von HaWe (16.03.2015 um 10:31 Uhr)
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1
    Danke HaWe !!
    es läuft und läuft jetzt...warum ????? Das mit den Widersprüchen bei den Pinangaben in Sachen IRQs habe ich lösen können...mit Probieren , nicht nach den Angaben auf dem Pinout

    Nun ja ich bin erst mal ein grosses stück weitergekommen. Das war für mich am Wichtigsten...

    Vielen Dank allen für Ihre Hilfe !!!

    Gruss Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.01.2014
    Beiträge
    398
    Blog-Einträge
    3
    Was sind denn deine durch Probieren herausgefundenen Pin-Zuordunungen?

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1
    Muss ich mal Raussuchen..in Verbindung mit den verschiedenen Angaben macht es erst Sinn das hier aufzulisten.

    Das wäre dann was für einen neuen Beitrag..würde hier nicht so ganz in de Ramen passen..hatte das auch nur nebenbei erwähnt.

    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

Ähnliche Themen

  1. Int zu String bringt mich zur Weissglut
    Von oderlachs im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 30.06.2013, 21:12
  2. Fragen zu AVR Dos und schreiben auf SD Card und Zwischenspei
    Von Lordcyber im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 29.04.2008, 15:19
  3. Microchip's TCP/IP Stack und SD/MMC-Card
    Von EinsamerUser im Forum PIC Controller
    Antworten: 2
    Letzter Beitrag: 24.05.2006, 22:49
  4. IS471- Modul?????? macht mich fertig
    Von nana33sy im Forum Sensoren / Sensorik
    Antworten: 17
    Letzter Beitrag: 24.01.2006, 14:39
  5. SD Card mit Pic beschreiben und lesen
    Von Obi Wan im Forum PIC Controller
    Antworten: 2
    Letzter Beitrag: 12.03.2005, 22:39

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •