Pages: [1]   Go Down
Author Topic: SD Card Problem  (Read 1151 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
#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);
}

« Last Edit: November 28, 2012, 08:34:05 am by Lucas02538 » Logged

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2983
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Falls keiner was besseres weiss:

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

if (dataFile) {... } else { //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 smiley-wink
Das ändert aber vermutlich nichts an deinem Problem ( oder verändert es die Anzahl Zeilen bis zum Crash ? )
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
char buffer[10] = "";

wird einfach zu

Code:
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.
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 138
Posts: 2889
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: November 28, 2012, 01:23:45 pm by Lucas02538 » Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 138
Posts: 2889
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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".

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?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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".

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
« Last Edit: November 28, 2012, 03:05:38 pm by Lucas02538 » Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

dtostrf()

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

Danke an eure Hilfen.
Logged

Pages: [1]   Go Up
Jump to: