SD Card Problem

Hallo,
Es geht um einen einfachen SD Datelogger. Nur habe ich das Problem ,dass die Messung immer nach 120kb oder 3819 Zeilen abbricht bzw. nicht mehr Datenloggt.
In der Suchfunze habe ich nichts gefunden. Bzw. Memory Overflow ??

Danke schon mal im Voraus

#include <SD.h>

#define chipSelect  53
#define led 13
#define Temperatur A14
#define Input1  A2
#define Input2 A3
#define Input3 A4

char charTmp[10]="",charWert1[10]="",charWert2[10]="",charWert3[10]="",charWert4[10]="";
double constant=0;
const double ref = 0.004888,Tempkoeff=50.400,V=0.3333;   
unsigned long timeStart;

File dataFile;

void setup()
{
   // Serial.begin(115200);
    constant=ref*Tempkoeff*V;
    pinMode(led,OUTPUT);
    digitalWrite(led,LOW);
    SDInit();
    if(!SD.begin(chipSelect)) digitalWrite(led,HIGH);
    timeStart=millis();
 
 }

void loop()
{   
//if (millis()-timeStart>3000){
 // timeStart=millis();
double IstTemp=analogRead(Temperatur)*constant-19.3;  
 Logging(millis()*0.001,IstTemp,analogRead(Input1)*ref,analogRead(Input2)*ref,analogRead(Input3)*ref);
}




//}
  
 void Logging (unsigned long time,double tmp,double Wert1,double Wert2,double Wert3){
 char dataString[100] = "";
 dtostrf(tmp,6,3,charTmp);
 dtostrf(Wert1,6,3,charWert1);
 dtostrf(Wert2,6,3,charWert2);
 dtostrf(Wert3,6,3,charWert3);

sprintf(dataString,"%lu:%s:%s:%s:%s",time,charTmp,charWert1,charWert2,charWert3);     
  dataFile = SD.open("Test.txt", FILE_WRITE);

 if (dataFile) {
 dataFile.println(dataString);
 dataFile.close();
  //Serial.println(dataString);
  }  

      }

void SDInit(){
   pinMode(chipSelect, OUTPUT);
    pinMode(48, OUTPUT);  
    digitalWrite(48,HIGH);
}

Hmm, keine Ahnung. Für Memory overflow geht es eigentlich ziemlich lange gut.

Falls keiner was besseres weiss:

[b]static [/b] char dataString[100]; // kann nicht schaden

if (dataFile) {... } [b]else[/b] { //sehen ob der sketch hängt oder ein SD Card Problem hat }

und, ich fürchte, die zwei Zeilen

 unsigned long result = millis() * 0.001;
 unsigned long result = millis() / 1000;

machen evtl. einen kleinen Unterschied --- die zweite find ich besser :wink:
Das ändert aber vermutlich nichts an deinem Problem ( oder verändert es die Anzahl Zeilen bis zum Crash ? )

Nimm bei allen Puffer-Arrays die Zuweisungen zu leeren Strings weg. Damit hängst Du den char-Pointer gleich bei der Initialisierung um.

char buffer[10] = "";

wird einfach zu

char buffer[10];

Ich denke, dass Du nach einer gewissen Zeit einen kritischen Bereich (z.B. eine Rücksprungadresse) überschreibst und er dann in einer Endlos-Schleife gefangen ist.

Lucas02538:
Nur habe ich das Problem ,dass die Messung immer nach 120kb oder 3819 Zeilen abbricht

Definiere bitte mal Dein exaktes Verständnis des Begriffs "immer"!

Meint das "immer mit derselben SD-Karte" oder "mit immer anderen SD-Karten"?

Könnte ja auch eine SD-Karte mit defekten Sektoren sein, wenn es "immer" nur mit derselben SD-Karte an derselben Stelle passiert.

jurs:

Lucas02538:
Nur habe ich das Problem ,dass die Messung immer nach 120kb oder 3819 Zeilen abbricht

Definiere bitte mal Dein exaktes Verständnis des Begriffs "immer"!

Meint das "immer mit derselben SD-Karte" oder "mit immer anderen SD-Karten"?

Könnte ja auch eine SD-Karte mit defekten Sektoren sein, wenn es "immer" nur mit derselben SD-Karte an derselben Stelle passiert.

1 Sd karte Class4 Kingston

UPDATE:

2te Sd Karte probiert Auch wieder Class 4 Hersteller Samsung.

30 Testversuche:
17x 120kb oder 3819 Zeilen
4x 473kb
restlichen 9x Durcheinander.

Vielleicht genauer Testaufbau: Arduino Versorgung mittel USB und zum Testen konstante Spannungsquellen an den ADC-Eingängen.

Lucas02538:
30 Testversuche:
17x 120kb oder 3819 Zeilen
4x 473kb
restlichen 9x Durcheinander.

Verstehe.
Also " immer nach 120kb oder 3819 Zeilen" heißt soviel wie "meistens, manchmal aber auch anders".

Lucas02538:
Vielleicht genauer Testaufbau: Arduino Versorgung mittel USB und zum Testen konstante Spannungsquellen an den ADC-Eingängen.

Und die Stromversorgung der SD-Karte?

Hast Du den Kartenschacht auf einem gekauften Shield (z.B. Ethernet-Shield), auf einem fertig gekauften Breakout-Board mit fertiger Beschaltung, oder auf einer Platine mit eigener Beschaltung?

jurs:

Lucas02538:
30 Testversuche:
17x 120kb oder 3819 Zeilen
4x 473kb
restlichen 9x Durcheinander.

Verstehe.
Also " immer nach 120kb oder 3819 Zeilen" heißt soviel wie "meistens, manchmal aber auch anders".

Lucas02538:
Vielleicht genauer Testaufbau: Arduino Versorgung mittel USB und zum Testen konstante Spannungsquellen an den ADC-Eingängen.

Ja die Testreihe wurde nach dem ersten Post gemacht.

Versorgung durch Netzgerät und sdramps Modul

Hast du meinen Post (Reply #2) schon umgesetzt? Was waren denn da die Resultate?

pylon:
Hast du meinen Post (Reply #2) schon umgesetzt? Was waren denn da die Resultate?

Ja alles gemachjt nur da gibt es Probleme mit der cast von double zu String. und auch wieder der Abbruch

Ja alles gemachjt nur da gibt es Probleme mit der cast von double zu String. und auch wieder der Abbruch

Da waren nirgends Casts von Double nach String drin. Sprichst Du immer noch vom Code, den Du gepostet hast? Vielleicht wäre es an der Zeit, wieder mal den aktuellen Code, den Du verwendest, zu posten.

dtostrf()

Problem wurde gelöst -> Versorgungsspannung hat das Problem verursacht. Durch Zufall entdeckt.Strombegrenzung(durch anderes Gerät verursacht)......

Danke an eure Hilfen.