SD datalogging lento ?

Sto usando la SD library, per logare dei dati letti in maniera analogica, ho però un problema, salva i dati ad intervalli troppo lunghi, mi salva i tre dati ogni circa un secondo ma vorrei aumentare la velocità di salvataggio, avete idee di come posso fare ? la SDfat lib non posso usarla perchè il mio ATmega funziona a 8MHz e mi da dei problemi..
Grazie in anticipo..

Petit FAT FS
E' limitata nelle funzioni ma ha un ridotto impatto sulle risorse, forse è anche più veloce. Non so.

Considera comunque che molta della lentezza ce l'hai perché accedi ad un file system quindi la libreria deve scrivere i dati come file e non semplicemente riversandoli su una memoria. Potresti provare con una memoria Flash usandola proprio come... "memoria": esistono chip I2C di diversi MB.

La ricordo la Petit Fs, me l'avevi consigliata con i tiny 84 ma non mi ci son trovato molto bene... :cold_sweat:
ad ogni modo ho trovato una soluzione..
questo era il codice di prova prima:

#include <SD.h>

File file;

void setup() {
  Serial.begin(9600);
  SD.begin(10);
  file = SD.open("WR_TEST1.TXT", FILE_WRITE);

  while(millis() < 1000);  // delay so mills() is four digits

  for (uint8_t i = 0; i < 100; i++) {
    file.println(millis());
  }
  file.close();
}

void loop() {}

sostituendo il FILE_WRITE con O_CREAT | O_WRITE la velocità di salvataggio aumenta esponezialmente !!!

Pardon, non salva correttamente, ora ci lavoro e scrivo eventuali novità

A questo tuo treadh "Possibile che SDfat vada ed SD.h no ???"

ratto93:
Ve beh, poi provo e ti so dire :wink:

Aspetto ancora risposta :slight_smile:
Quindi come hai risolto?

ciao

pablos:
A questo tuo treadh "Possibile che SDfat vada ed SD.h no ???"
Possibile che SDfat vada ed SD.h no ??? - #15 by ratto - Generale - Arduino Forum

ratto93:
Ve beh, poi provo e ti so dire :wink:

Aspetto ancora risposta :slight_smile:
Quindi come hai risolto?

ciao

Mi sa che ancora non ha risolto nemmeno lì, ad occhio i problemi mi sembrano sempre gli stessi; il nostro ratto93 deve ancora prendere la giusta dimestichezza con queste lib :slight_smile:

Ho risposto al vecchio thread :slight_smile:
ora sono riuscito a farlo andare, ma non scrive ancora abbastanza velocemente...
sono sui 3Hz (inteso come frequenza di salvataggio) e sono ancora troppo pochi..
l'inghippo sta tutto qui ( con questa sintassi apre o crea il file e scrive in coda i nuovi dati) :

File dataFile = SD.open("datalog.txt", O_CREAT | O_WRITE | O_APPEND);

non usare un filesystem ma scrivi i dati raw... certo però non uoi accederci direttamente dal PC, devi fare un paio di rigiri (copiare a basso livello l'immagine e poi aprire l'immagine in formato testo)

lesto:
non usare un filesystem ma scrivi i dati raw... certo però non uoi accederci direttamente dal PC, devi fare un paio di rigiri (copiare a basso livello l'immagine e poi aprire l'immagine in formato testo)

potresti spiegarmi come funziona questa cosa ?
Io alla fine ho bisogno di un file di testo con dei numeri separati da virgole su colonne.. per poi poterli lavorare con excel e similari..

si, ma tu fregatene per ora.
allora immagina la tua SD come un array di byte. La FAT dice che i primi X byte sono riservati per la tabella partizioni, e poi bisogna fare i blocchi da 521, etc.. etc..., e ogni aggiornamento va ad aggiornare un bel pò di tabelle spase per la SD.

se invece ce ne freghiamo di essere "plug and play", allora NON usiamo un file system, ma usiamo direttamente i byte della SD, esattamente come se fosse una EEPROM.. poi dovrai usare un programma per estrarre i dati "raw" (o l'immagine), ne esistono un bel pò, e linux ha dei comandi "incorporati" (dd per esempio).
Estraendo i dati raw avrai un fine .img o senza estensione, ma se tu lo apri come se fosse un TXT, magicamente troverai tutti i tuoi dati.
Certo, richiede un passaggio in più lato PC, però non è nè troppo complicato e praticamente istantaneo se ti fai uno script apposta (farsi il programma da soli mi sa che diventa complicato)

edit: cerca "read raw data SD" su gooogle e ti escono un bel pò di discussioni in giro per vari forum

Il problema lo vedo nel come salvare il dato tramite arduino :slight_smile:

che domande... apri SD.h e ci dai un'occhiata :slight_smile:

edit: molto vecchia, ma l'ho trovatra in 2 minuti di ricerca: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1235956807

La stavo giusto guardando per capirci qualcosa :slight_smile: