Go Down

Topic: SD datalogging lento ? (Read 568 times) previous topic - next topic

ratto93

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..
Se corri veloce come un fulmine, ti schianterai come un tuono.

leo72

http://elm-chan.org/fsw/ff/00index_p.html
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.

ratto93

La ricordo la Petit Fs, me l'avevi consigliata con i tiny 84 ma non mi ci son trovato molto bene...  :smiley-roll-sweat:
ad ogni modo ho trovato una soluzione..
questo era il codice di prova prima:
Code: [Select]
#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 !!!
Se corri veloce come un fulmine, ti schianterai come un tuono.

ratto93

Pardon, non salva correttamente, ora ci lavoro e scrivo eventuali novità
Se corri veloce come un fulmine, ti schianterai come un tuono.

pablos

#4
Jun 03, 2012, 10:50 pm Last Edit: Jun 04, 2012, 12:06 am by pablos Reason: 1
A questo tuo treadh "Possibile che SDfat vada ed SD.h no ???"
http://arduino.cc/forum/index.php/topic,107093.msg805469.html#msg805469


Ve beh, poi provo e ti so dire  ;)


Aspetto ancora risposta :)
Quindi come hai risolto?

ciao


no comment

Michele Menniti


A questo tuo treadh "Possibile che SDfat vada ed SD.h no ???"
http://arduino.cc/forum/index.php/topic,107093.msg805469.html#msg805469


Ve beh, poi provo e ti so dire  ;)


Aspetto ancora risposta :)
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 :)
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

ratto93

Ho risposto al vecchio thread :)
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) :
Code: [Select]
File dataFile = SD.open("datalog.txt", O_CREAT | O_WRITE | O_APPEND);
Se corri veloce come un fulmine, ti schianterai come un tuono.

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)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

ratto93


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..
Se corri veloce come un fulmine, ti schianterai come un tuono.

lesto

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
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

ratto93

Il problema lo vedo nel come salvare il dato tramite arduino :)
Se corri veloce come un fulmine, ti schianterai come un tuono.

lesto

che domande... apri SD.h e ci dai un'occhiata :)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

lesto

edit: molto vecchia, ma l'ho trovatra in 2 minuti di ricerca: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1235956807
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

ratto93

La stavo giusto guardando per capirci qualcosa :)
Se corri veloce come un fulmine, ti schianterai come un tuono.

Go Up