Ich bekomme es nicht hin, auf die Sd card zu schreiben. Lesen kann, dir
anzeigen, geht alles.
Was mache ich falsch?
Auf der console sehe das mount mit result = 0 endet, also ok. Dann geht es
aber nicht weiter.
Hier mein Code:
#include <SDcard.h>
#include <S65Display.h>
//#define _USE_STRFUNC 1
SDcard sd;
S65Display lcd;
char text[] = "123";
ISR(TIMER2_OVF_vect)
{
static uint8_t count=1;
TCNT2 -= 250; //1000 Hz
if(--count == 0) //100 Hz
{
count = 10;
sd.service();
}
}
void schreib(){
Serial.println("Function schreib");
FATFS fs[1];
FIL fdst;
// BYTE buffer[4096];
FRESULT res;
UINT bw;
// Register a work area for logical drive 0
res = f_mount(0, &fs[1]);
Serial.print("res: ");
Serial.println(res);
Serial.println("mount");
// Create destination file
Serial.println("Vor open");
res = f_open(&fdst, "0:dstfile.dat", FA_CREATE_ALWAYS | FA_WRITE);
Serial.println("open");
int res_p = f_puts(text, &fdst);
Serial.println("put");
f_close(&fdst);
Serial.println("close");
// Unregister a work area before discard it
f_mount(0, NULL);
Serial.println("end fuction");
}
void setup(){
Serial.begin(9600);
//init SD-Card
sd.init(2); //spi-clk = Fcpu/4
//init LCD
lcd.init(4); //spi-clk = Fcpu/4
lcd.clear(RGB(0,0,0));
}
void loop (){
for (int z=0;z<20;z++) {
schreib();
Serial.print(z);
Serial.print(" * geschrieben");
Serial.println();
delay(10000);
}
}
SD Card beschreiben
Hallo,
da sind einige Fehler im Code. Hier ein Bsp:
#include <S65Display.h>
#include <SDcard.h>
S65Display lcd;
SDcard sd;
ISR(TIMER2_OVF_vect)
{
static uint8_t count=1;
TCNT2 -= 250; //1000 Hz
if(--count == 0) //100 Hz
{
count = 10;
sd.service();
}
}
void write_something(void)
{
FIL fdst; //file objects
FRESULT res; //result code
UINT wr; //file R/W count
char data[16];
res = f_open(&fdst, "xxx.txt", FA_CREATE_ALWAYS | FA_WRITE);
if(res == FR_OK)
{
strcpy(data, "test 123");
res = f_write(&fdst, data, strlen(data), &wr);
f_close(&fdst);
}
}
void setup()
{
//init LCD
lcd.init(4); //spi-clk = Fcpu/4
//init SD-Card
sd.init(4); //spi-clk = Fcpu/4
//init Timer2
TCCR2B = (1<<CS22); //clk=F_CPU/64
TCNT2 = 0x00;
TIMSK2 |= (1<<TOIE2); //enable overflow interupt
//interrupts on
sei();
if(sd.mount() == 0)
{
write_something();
sd.unmount();
}
}
void loop()
{
}
Herzlichen Dank Andreas, (mal wieder prompte Antwort) ich hatte mir das aus dem Beispiel in der Docu zur sd-card-lib unter dem Befehl f_open herauskopiert und modifiziert. Verbesserungsvorschlag für Anfänger wie mich: ein Beispielsketch für Daten schreiben in deine Lib. Vielleicht wollen ja noch mehr dau's z.B. Daten zwischenspieichern um sie dann anzuzeigen. Ich bastele am Aufzeichnen meiner Strom- und Gasverbräuche (hab ich zur Zeit im eeprom) auf der sd-card. Mit einem Menue möchte ich dann das Tages- Wochen- oder Jahresprofil auf dem s65 anzeigen.


