Forum: Mikrocontroller und Digitale Elektronik Problem mit Schreiben von Daten auf eine SD-Karte


von jürgen (Gast)


Lesenswert?

Hallo, ich habe einen Datenlogger gebaut, der z.B. AD-Werte, die alle 
20ms abgetastet werden, chronologisch in eine Textdatei speichert. 
Soweit funktioniert das auch, aber an eingen Stellen der Textdatei 
befinden sich Pausen von genau immer 677ms. Diese Pausen treten 
sporadisch auf, manachmal 10sek nach Messungsstart, manchmal 2 Minuten 
nach Messungsstart. Mal folgen direkt 3 von diesen Pausen im Abstand von 
6 Sekunden hintereinander.

Ein paar Daten zum Logger: AT90CAN128, 16Mhz,
Ich nutze die SD-Schreibfunktion von Holger Klabunde

Ich habe schon probiert die Abtastzeit zu ändern -> gleiches Ergebnis
Ich habe leider sonst überhaupt keine Idee, woran es noch liegen könnte.
Vermutungen: irgendeine Funktion die Fehlerhaft abläuft, jedoch ist es 
hierbei sehr schwer heraus zu finden welche es sein könnte, da der 
Fehler ja sporadisch auftritt.
Oder könnte es Prinzipiell ein Problem mit der SD-Karte sein, dass zum 
Beispiel die Daten nicht schnell genug übertragen werden oder die 
SD-Karte irgend eine Funktion aufruft, die solange den SPI Bus 
blockiert.
Ich bin für Tipps und Anregungen sehr dankbar.

von Ich (Gast)


Lesenswert?

677ms ist schon lang.
Aber kann es sein, dass der Controller durch die Karte in den Reset 
gebracht wird?
Wie sieht Deine Schaltung aus?
Die meisten Lösungen die ich bisher gesehen haben waren freundlich 
ausgedrückt ein wenig gewagt.

Genauso wie die Anpassung von 5V auf 3,3V die Du ja haben musst, sonst 
würde Dein 90CAN128 nicht auf 16 MHz laufen.

von R. W. (quakeman)


Lesenswert?

Ich habe keine Ahnung, wodran dein Problem liegen könnte.
Aber als Tip wie du selber das Problem finden kannst, würde ich dir 
raten debug Ausgaben per RS232 einzubauen. Somit weißt du immer genau, 
an welcher Stelle das Programm sich gerade befindet und ob das so 
korrekt ist oder nicht. Insofern du die Debug Ausgaben mit einem 
Zeitstempel versiehst siehst du auch, an welcher Stelle der Controller 
wie lange hängt.
Solche debug Ausgaben haben mir schon des öfteren geholfen dem Fehler 
auf die Spur zu kommen. ;)

Ciao,
     Rainer

von jürgen (Gast)


Lesenswert?

danke für die Tips. Falls der Controller sich Reseten würde, würde eine 
neue Log-Datei erstellt. Das würde ich schon merken.
Die 3,3V werden mit einem LM317 geregelt. Die Signalpegel werden mit 
Spannungsteilern verwirklicht

von R. W. (quakeman)


Lesenswert?

jürgen schrieb:
> Die 3,3V werden mit einem LM317 geregelt. Die Signalpegel werden mit
> Spannungsteilern verwirklicht

Es wurde schon des öfteren hier im Forum erwähnt, dass Spannungsteiler 
keine gute Wahl sind um SD-Karten stabil zu betreiben.

von Randy (Gast)


Lesenswert?

> dass Spannungsteiler
> keine gute Wahl sind um SD-Karten stabil zu betreiben.

Für die Wandlung von 5V auf 3,3V Pegel spricht nichts gegen 
Spannungsteiler. Sinnvoll konstruiert mit kurzen Leitungen und 
induktivitätsarmen (ungewendelten) Widerständen funktioniert das leicht 
bis in den zweisteligen MHz Bereich.

Randy

von R. W. (quakeman)


Lesenswert?

Ich sag ja nur, was die Erfahrung von einigen Usern hier im Forum ist. 
Und dort wurden die Probleme mit dem Betreib der SD-Karte durch richtige 
Level-Shífter gelöst. Aber eventuell waren es auch nur die "falschen" 
Widerstände. ;)

von jürgen (Gast)


Lesenswert?

Ich kann mir aber irgendwie nicht vorstellen, dass falsche Widerstande 
für eine Pause von exakt 677ms verantwortlich sind. Aber ich werde es 
mal ausprobieren.

von R. W. (quakeman)


Lesenswert?

Ich meine damit ja auch nur, dass die Signalqualität nicht unbedingt die 
beste ist bei einem Spannungsteiler im Vergleich zu einem Level-Shifter. 
Somit könnte mancher Befehl nicht korrekt übertragen werden. Aber das 
ist ja auch nur ein Hinweis und muss nicht die Ursache des Problems 
sein.

Wie ich vorher schon sagte, mach RS232 debug Ausgaben an sinnvollen 
Stellen in deinem Code und versuche so die Stelle zu finden, wo er 
hängt.

von holger (Gast)


Lesenswert?

>Oder könnte es Prinzipiell ein Problem mit der SD-Karte sein, dass zum
>Beispiel die Daten nicht schnell genug übertragen werden oder die
>SD-Karte irgend eine Funktion aufruft, die solange den SPI Bus
>blockiert.

Wenn sonst alles läuft wird es das WearLevelling sein.
300ms habe ich da auch schon gesehen. 677ms ist aber schon
ganz schön deftig.

von jürgen (Gast)


Lesenswert?

Vielen Dank für die vielen Tipps. Ich werde mal das RS232 Debugging 
ausprobieren. Was ich bis jetzt gemessen habe waren unteranderem die 
Interrupt Routine, welche die Daten empfängt, und die Funktion, welche 
die Daten auf die SD-Karte schreibt. Dort gab es bis jeztzt keine 
Verzögerung.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.