Go Down

Topic: Scrivere su SD card (Read 1 time) previous topic - next topic

D4ng3R92

Ciao a tutti!
Io ho un Arduino Ethernet con SD card.
Sto facendo alcune prove di scrittura ma non riesco. Vi posto il codice:

Code: [Select]

void LoadConfig() {
 
  // Inizializzo microSD
  if (!SD.begin(4)) {
    Log("Impossibile inizializzare la microSD");
    return;
  }

  if(!SD.exists("File.cfg")) {
    Log("Salvo valori nella microSD");
    File f = SD.open("File.cfg", FILE_WRITE);
    // Se riesco ad utilizzare il file
    if(f) {
      // Salvo valori
      f.println("prova");
      // Chiudo il file
      f.close();
    }
    else {
      Log("Impossibile salvare i valori nella microSD");
      return;
    } 
  } 



La microSD la inizializza ma non riesce ad aprire il file. Ho impostato i piedini nel seguente modo:

Code: [Select]

pinMode(10, OUTPUT);


Vi ringrazio.

lesto

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

D4ng3R92

Ho un arduino Ethernet, non ho collegato niente... ho sbagliato?

lesto

non vorrei dire boiate, ma mi pare che non sia utilizzabile dall'arduino. Dovresti identificare il modello dal tuo ethernet shield e cercare un po' sul forum. comunque se non erro le SD si possono usare anche con dei collegamenti minimi, ma non so se va in conflitto con l'ethernet
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

D4ng3R92

Ma io non ho ethernet shield, almeno se ho capito bene la shield sono i moduli aggiuntivi da attaccarci sopra no?
Io ho questa scheda http://arduino.cc/en/Main/ArduinoBoardEthernet e mi sono bastato su quello che c'è scritto in questa pagina:

Quote
The onboard microSD card reader is accessible through the SD Library. When working with this library, SS is on Pin 4.

Testato

#5
Aug 25, 2011, 08:54 pm Last Edit: Aug 25, 2011, 08:59 pm by Testato Reason: 1
ma nel setup hai dichiarato anche il pin 4 ? perche' vedo che tu hai messo solo il pin10

cmq e' la nuova scheda ufficiale che comprende sia il 328 che l'ethernet, che la sd
non ho mai fatto prove ma dovrebbe funzionare.
credo l'abbiano in pochi ancora quella scheda, spero ti aiutino altri, altrimenti vedo di leggere qualcosa in merito

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

lesto

ah ho fatto confusione io, non ho letto bene e come dice testato le board sono molto recenti, quindi non ci ho pensato.

da quanto leggo negli esempi:
Quote
// 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.


quindi normalmente SS è sul pin 10, mentre in quella nuova è sul 4

Quote
When working with this library, SS is on Pin 4.


Quindi dovrai dichiarare il pin 4 come output al posto del 10, e usare un altro pin come CS
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

D4ng3R92

Ma devo fare qualche collegamento?
Ora il mio codice è così:

Code: [Select]

pinMode(4, OUTPUT);


Code: [Select]

if (!SD.begin(10)) {
    Log("Impossibile inizializzare la microSD - caricati valori di default");
    return;
  }


Ma non riesce ancora ad inizializzare la SD :(

Grazie dell'aiuto :)


lucadentella

Ciao

in realtà non è proprio così: il PIN di CS (chip select) serve quando hai più dispositivi SPI slave ad indicare con quale dispositivo vuoi "parlare".
Normalmente la SPI di arduino utilizza il PIN 10 con tale funzionalità, il problema è che su ethernet shield (o in quello integrato) SIA il modulo ethernet SIA la SD sono sullo stesso bus SPI, quindi devono avere due piedini di CS diversi, ecco perché hanno messo il CS della SD sul PIN 4.

la nota indica che comunque - anche se usi un pin diverso dal 10 per CS - devi definire il 10 output perché la libreria SD funzioni.

Tornando a D4nger92: se non ti fallisce l'inizializzazione, significa che arduino riesce a parlare con la SD... il problema dell'apertura del file è quindi causato da qualcos'altro.

Prova come prima cosa ad eseguire il semplice sketch di diagnostica della SD e vedi se è tutto ok (tipo, dimensioni...):
http://arduino.cc/en/Tutorial/CardInfo

facci sapere!
lucadentella.it

Testato

infatti io avevo scritto di aggiungere il pin4 nel setup, non ti sostituirlo al 10 :)
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

lucadentella

si si io prendevo spunto dalla risposta di lesto...  :)
non è comunque necessario definire il pinMode del PIN4, ci pensa la libreria a farlo... la nota dice che se non usi il PIN 10 come CS (e quindi la libreria non lo mette a output) comunque lo devi fare tu a mano altrimenti non funziona la periferica SPI.
bye
lucadentella.it

D4ng3R92

Ho fatto altre prove:
ora il codice è così:

Code: [Select]

// Impostazioni piedini OUTPUT
 pinMode(4, OUTPUT);
 pinMode(10, OUTPUT);
 pinMode(_LED9OUT, OUTPUT);

// Inizializzo microSD
 if (!SD.begin(10)) {
   Log("Impossibile inizializzare la microSD - caricati valori di default");
   return;
 }


ma niente solito errore: "Impossibile inizializzare la microSD - caricati valori di default"

Ho provato anche con lo sketch di diagnostica sia con CS = 4 sia con CS = 10
Mi dice:
Code: [Select]

   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?");


:( :( :(

D4ng3R92

#12
Aug 25, 2011, 11:53 pm Last Edit: Aug 25, 2011, 11:57 pm by D4ng3R92 Reason: 1
Ho provato a cambiare microSD! Ora mi dà errore nel momento in cui prova a scivere il file ma non sul begin della SD! E' stranissimo...

EDIT:
Ho riformattato la micro con master boot record e fat, ora dà errore sul salvataggio del file.
Perchè devo settare il pin10 com out? Sulla mia scheda è segnato come ethcs.


D4ng3R92

Terzo post ed ora mi uccidete...
Ho trovato il problema = nome del file troppo lungo -.-''
Maledetto FAT

Grazie del supporto :)

Testato

Grazie a te del feedback
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Go Up