Lo sketch allegato, troppo lungo per essere incluso nel forum, è uno schema di datalogger e ha un problema di scrittura su SD.
Il test di scrittura crea il file ma dentro non c'è nulla. E' vuoto, zero byte.
Ho provato a cambiare SD ma il risultato non cambia.
Se uso il programma di esempio ReadWrite funziona, trovo il file con il testo di esempio.
Uso la libreria SDfat ma anche con la libreria SD standard accade esattamente la stessa cosa. Ma la SDfat dovrebbe essere un aggiornamento della SD, secondo il suo autore.
Se elimino la parte dell'RTC DS1307, funziona.
Uso la libreria DS1307new, se la cambio con RTClib di Adafruit accade esattamente la stessa cosa. Inoltre la libreria Adafruit mi da una serie di 165 invece di data e ora, Ma questo l'ho scritto in un altro post
http://forum.arduino.cc/index.php?topic=166715Come ho scritto in un altro post (
http://forum.arduino.cc/index.php?topic=165088.0), se è presente una piccola parte che ha a che fare con il Timer1, il programma va in reset anche se quella parte non viene attivata ancora prima di arrivare ad aprire il file oppure subito dopo averlo aperto.
Sembra un problema di RAM ma i controlli sulla RAM usata danno sempre oltre 700 byte liberi.
Lo sketch gira su Arduino UNO R3 con uno shield per il DS1307 e uno per la SD. Uso le librerie SDfat e DS1307new.
La libreria DS1307new è questa
https://code.google.com/p/ds1307new/La libreria SDfat è questa
http://code.google.com/p/sdfatlib/downloads/listUso Arduino 1.0.4 dove l'unico cambiamento sta nella libreria java che fa la scansione delle seriali.
Il programma mostra un menù autoesplicativo (più o meno) sulla console seriale. Se premete 9 parte il test di scrittura su SD. Questo stampa su seriale la quantità di RAM subito dopo l'apertura del file e subito dopo la chiusura. Il quantitativo è sempre 897. I test K e k li ho eliminati anche se nel menù appaiono ancora. Qualsiasi comando non riconosciuto, ma anche il semplice invio, fa apparire il menù.
Questo è il codice estratto dallo sketch
void SDwriteTest(){
Serial.println(F("SD write test1"));
if (!card.init(SPI_HALF_SPEED, CHIPSELECT)) {
Serial.println(F("SD init failed."));
return;
}
Serial.println(F("opening"));
if (!MioFile.open("test.txt", O_WRITE | O_CREAT | O_APPEND)) {
sd.errorHalt("Failed");
}
Serial.println(freeRam());
ciccio=MioFile.println(F("ProvaF"));
Serial.println(ciccio, DEC);
MioFile.close();
Serial.println(freeRam());
Serial.println(F("done!"));
}
Io credo lo stesso che sia un problema di RAM, se avessi un Mega farei subito la prova.
Credo anche che sto facendo qualche grossolano errore nel codice perché in giro vedo programmi ben più grossi di questo (ad esempio
http://forum.arduino.cc/index.php?topic=132746.0) che non hanno affatto problemi di questo genere. Ecco il motivo per cui ho incluso tutto lo sketch.