- LiFePO4 Speicher Test         
Ergebnis 1 bis 5 von 5

Thema: [Arduino C++] SD-Karte beschreiben / lesen

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    14.04.2012
    Beiträge
    16

    [Arduino C++] SD-Karte beschreiben / lesen

    Hallo @ Alle,
    ich arbeite gerade ein einem JugendForscht Projekt und bin damit durch den Regional- und Landeswettbewerb in den Bundeswettbewerb gekommen. Um besser überprüfen zu können, wo Fehler auftreten, habe ich mir dieses SD-Shield http://www.ladyada.net/products/microsd/ besorgt. Ich habe es an meinem Arduino MEGA mit der richtigen für den MEGA vorgesehenen Pinbelegung angeschlossen. Es gibt in der Arduino IDE Beispielcodes, welche z.B. den Zustand der SD-Karte auf dem Shield anzeigen. Wenn ich diese Beispielcodes auf meinen Arduino Flashe, funktioniert die SD-Karte einwandfrei und ich kann sie beschreiben, lesen usw. . Kopiere ich jedoch den Beispielcode, bzw. ändere ihn ein wenig ab und integriere ihn in eine Klasse vom meinem Hauptprojekt, meldet sich die SD-Karte plötzlich nicht mehr. An der Pinbelegung habe ich natürlich nichts geändert. Hier einmal der Beispielcode:
    Code:
     // 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 (53 MEGA)
    // 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
    
    
      // 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)
    {
      
    }
    Hier der Code integriert:
    Code:
    // Init - Setup Funktion
    void CP5_TBZ::init ()
    {
      // serielle Übertragung starten
      Serial.begin(9600);
      
      // I/O's  
      pinMode(53, OUTPUT);
      pinMode(13, OUTPUT);
      pinMode(10, INPUT);                  
      pinMode(2, INPUT); 
      pinMode(TASTER_PIN, INPUT);
      pinMode(TASTER_PIN2, INPUT);
        
      // SD Karte überprüfen
      checkSD();
    
    [...]
    
    // SD-checken
    void CP5_TBZ::checkSD ()
    {
      // SD-Shield
      Sd2Card card;
      SdVolume volume;
      SdFile root;
      
      Serial.print("\nInitializing SD card...");
          
    
      if (!card.init(SPI_HALF_SPEED, 53)) {
        Serial.println("initialization failed. Things to check:");
        Serial.println("- is a card  inserted?");
        Serial.println("- is the wiring correct?");
        Serial.println("- is the right SD_PIN selected?");
        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);
    }
    Hier die main:
    Code:
    void setup()                           
    {
      JuFo.init();
    }
    
    void loop() 
    {
      JuFo.start(false);              // Für Fehlerüberwachung "true" als Paramter übergeben
    }
    Die Funktion init(); wird in der main.ino in der Setup(); aufgerufen. Also sollte es quasi genau das Selbe sein.
    Info: Selbst wenn ich alle anderen Funktionen der Klasse "deaktiviere", funktioniert der Code nicht ...

    Hat Jemand eine Idee, was ich falsch mache?

    LG
    Nuke
    Geändert von NukeNoob (27.03.2013 um 15:36 Uhr)

Ähnliche Themen

  1. SD-Karte mit µC beschreiben
    Von Kampi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 16.06.2010, 07:17
  2. Externes S-RAM 62256 lesen und beschreiben mit ATMega8
    Von rogerberglen im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 04.05.2007, 23:23
  3. Probleme SD karte lesen
    Von carlos_soost im Forum C - Programmierung (GCC u.a.)
    Antworten: 11
    Letzter Beitrag: 05.02.2007, 17:21
  4. Karte auslesen + beschreiben
    Von Goblin im Forum Elektronik
    Antworten: 13
    Letzter Beitrag: 23.03.2006, 10:41
  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
  •  

12V Akku bauen