Arduino SD card

Buona sera a tutti, vi spiego brevemente il problema, voglio usare una scheda SD per salvarci dei dati, immagini e altre cose. Dato che sto utilizzando la scheda Ethernet e un'Arduino uno ho pensato di utilizzare lo slot già predisposto, ho formattato la scheda con FAT e ho lanciato il programma base e mi esce questo messaggio di errore:

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?

Ho pensato che fosse un problema della scheda Ethernet e ho provato col modulo apposta (SD card Module) ma mi esce lo stesso messaggio di errore, allora ho provato a cambiare anche la scheda di memoria passando da 8 GB a 1GB ma ho sempre lo stesso errore. Qualcuno ha avuto lo stesso problema? Come posso risolverlo?

Buona serata a tutti :)

Se provi con gli esempi della libreria SD funziona? Cosa hai collegato ad Arduino oltre la scheda Ethernet?

Guglielmo

salve e grazie per la risposta, ho usato questo esempio della libreria SD:

/*
  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
 ** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila
 ** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila
 ** CS - depends on your SD card shield or module.
 		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 <SPI.h>
#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
// MKRZero SD: SDCARD_SS_PIN
const int chipSelect = 4;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  Serial.print("\nInitializing SD card...");

  // 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 inserted?");
    Serial.println("* is your wiring correct?");
    Serial.println("* did you change the chipSelect pin to match your shield or module?");
    while (1);
  } else {
    Serial.println("Wiring is correct and a card is present.");
  }

  // print the type of card
  Serial.println();
  Serial.print("Card 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");
    while (1);
  }

  Serial.print("Clusters:          ");
  Serial.println(volume.clusterCount());
  Serial.print("Blocks x Cluster:  ");
  Serial.println(volume.blocksPerCluster());

  Serial.print("Total Blocks:      ");
  Serial.println(volume.blocksPerCluster() * volume.clusterCount());
  Serial.println();

  // print the type and size of the first FAT-type volume
  uint32_t volumesize;
  Serial.print("Volume type is:    FAT");
  Serial.println(volume.fatType(), DEC);

  volumesize = volume.blocksPerCluster();    // clusters are collections of blocks
  volumesize *= volume.clusterCount();       // we'll have a lot of clusters
  volumesize /= 2;                           // SD card blocks are always 512 bytes (2 blocks are 1KB)
  Serial.print("Volume size (Kb):  ");
  Serial.println(volumesize);
  Serial.print("Volume size (Mb):  ");
  volumesize /= 1024;
  Serial.println(volumesize);
  Serial.print("Volume size (Gb):  ");
  Serial.println((float)volumesize / 1024.0);

  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) {
}

Non c’e altro collegato alla scheda Ethernet, non ci sono delle limitazioni di memoria per le schede?
Non riesco a spiegarmi perché con due moduli diversi e con due schede diverse mi danno lo stesso errore… Se questo sistema non funziona come posso fare per aumentare la memoria?

Devo caricarci qualcosa sulla scheda SD per fare in modo che Arduino la legga? Forse sbaglio io qualcuno può elencarmi la procedura cosi sono sicuro di fare le cose giuste... Grazie mille in anticipo :)

Ma Ethernet shield originale o una copia cinese ? Metti pure un link a quella che hai comprato.

mozzini97: Non c'e altro collegato alla scheda Ethernet, non ci sono delle limitazioni di memoria per le schede?

... strano perché dovrebbe funzionare la primo colpo. Fai una sola prova, aggiungi queste quettro righe [u]in testa nel setup()[/u]:

pinMode(4, OUTPUT);
pinMode(10, OUTPUT);
digitalWrite(4, HIGH);
digitalWrite(10, HIGH);
...

e vedi se hai un risultato differente.

Guglielmo

Salve, ho provato con la parte di codice che mi ha consigliato ma niente non ne vuole sapere. Il modulo me lo ha dato un mio amico non so da dove viene...

Guarda, ho appena provato con una UNO ed un vecchio modulo Ethernet originale Arduino e NON ho avuto alcun problema (microSD da 8GB), quindi ... ne deduco che il problema deve stare nel tuo hardware ... ::)

Guglielmo

Molto probabilmente, ne ho provato un'altro e finalmente funziona... :)

Tornando ad utilizzare il modulo Ethernet vedo che mi da ancora lo stesso problema >:( , La domanda e la seguente, io uso il modulo Ethernet per creare la mia pagina Web e fin li tutto bene, quando cerco di andare a leggere le informazioni della scheda SD si blocca la pagina web(provo con l'esempio fornito da Arduino esempi)... Ho controllato su internet e i pin per la scheda Ethernet e per la SD sono gli stessi, non e li il problema? magari non posso farli funzionare entrambi? non so come fare perché anche utilizzando la scheda Ethernet e il modulo SD separato mi da lo stesso problema.

Qualcuno sa se per caso posso usarli solo separatamente(o l'Ethernet o lo slot SD)?

La Ethernet e la SD usano il bus SPI ... sai come funziona?

Hanno alcuni pin in comune (MISO, MOSI; SCK) ed alcuni che servono a selezionare con cosa si parla (pin 4 SD, pin 10 Ethernet) ... quindi, se usi le librerie di Arduino, NON c'è problema, gestiscono loro la cosa. Ovviamnete si usano alternativamente, prima una, poi l'altra e così via, visto che i due pin di selezione NON possono essere attivati assieme.

Guglielmo

Più o meno so cosa sono ma non capisco allora perché usati separatamente funzionano e invece se collego la scheda Ethernet e il modulo SD non riesco più a caricare la pagina web. Io collego il Modulo SD ai pin 10,11,12 e 4 cosa posso provare a fare per cercare di risolvere questo problema?

>mozzini97: in conformità al REGOLAMENTO, punto 13, il cross-posting è proibito ([u]anche tra lingue diverse[/u]) per cui, il tuo post duplicato nella sezione Inglese del forum è stato segnalato e cancellato dal moderatore di detta sezione.

Ti prego, per il futuro, di evitare di aprire più post sullo stesso argomento in sezioni differenti del forum. Grazie.

Guglielmo

mozzini97: Più o meno so cosa sono ma non capisco allora perché usati separatamente funzionano e invece se collego la scheda Ethernet e il modulo SD ...

Cosa significa "se collego ..." ... sono un'unica scheda e sono SEMPRE collegati ... non capisco ... ::)

Guglielmo

Allora praticamente ho collegato il modulo SD ad Arduino Uno (senza la scheda ethernet) ai pin 13,12,11 e 4 e ho caricato il codice base che trovo negli esempi di Arduino per leggere le informazioni della scheda SD e funziona. Allora poi ho provato a mettere l'arduino Uno, la scheda Ethernet e il modulo SD collegato sempre ai pin 13,12,11 e 4 e ho caricato il codice base per leggere le informazioni della scheda SD ma non funziona. Ho fatto un'altra prova, ho collegato l'arduino Uno è la scheda Ethernet e ho caricato il codice che ho fatto per la pagina Web e funziona poi ho collegato anche la scheda SD e non mi caricava più la pagina Web. Non capisco come mai funzionano separatamente ma quando vado a unire i moduli per cercare di farlo funzionare tutti assieme non vanno...

Sto usando la scheda ethernet R3, Arduino uno è un modulo SD base

A qualcuno è già capitato un'errore simile? Che test posso fare per cercare di sistemare questo problema? Al momento sono bloccato con il mio progetto perché non riesco a memorizzare dei dati e visualizzarli nella mia pagina web... Spero che qualcuno mi possa aiutare... :confused:

Se usi la SCHEDA Arduino non capisco perché vuoi usare un modulo SD esterno, dato che un modulo SD è integrato nella scheda ethernet e NON puoi usarne un'altro con lo stesso pin di SS !

Guglielmo

Buona sera, so che e' una cosa stupida usare un'altro modulo SD dato che ho quello già integrato nella Ethernet ma caricando l'esempio che trovo tra quelli proposti da arduino non funziona quindi non so come fare... devo cambiare la scheda Ethernet? Non vedo altre soluzioni...

mozzini97: Buona sera, so che e' una cosa stupida usare un'altro modulo SD dato che ho quello già integrato nella Ethernet ...

Non si tratta di cosa stupida, è che NON puoi ovviamente usare gli stessi pin di SS poiché così i moduli vanno in conflitto. Se vuoi usare una SD esterna, DEVI forzare il pin 4 HIGH (disabilita la SD presente sulla scheda Ethernet) ed usare un altro pin come pin di SS per il modulo esterno!

Tutorial sul bus SPI ... PRIMO e SECONDO ... studiateli ... ;)

Guglielmo

okay allora faccio cosi, cerco se trovo un'altro modulo Ethernet per vedere se il problema e' quello. Se non lo trovo disattivo il pin 4 e uso il modulo SD... Penso siano le uniche possibilità che ho. Grazie mille per l'aiuto :)