www.mikrocontroller.net

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


Autor: jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: R. W. (quakeman)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: R. W. (quakeman)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Randy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: R. W. (quakeman)
Datum:

Bewertung
0 lesenswert
nicht 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. ;)

Autor: jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: R. W. (quakeman)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.