Forum: Mikrocontroller und Digitale Elektronik FAT32 Int-Werte auf SD-Karte schreiben mit ATmega2560


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Eduard R. (ed721ron)


Angehängte Dateien:

Bewertung
-2 lesenswert
nicht lesenswert
Hallo zusammen,

ich arbeite mit ATMEL-Studio7 und möchte in C einen kleinen Datenlogger 
programmieren.
Hierbei sollen in festen Abständen verschiedene Werte in eine Textdatei 
geschrieben werden und zwar in folgendem Format:

1.Zeile: Variable , Wert
2.Zeile: Variable , Wert
3.Zeile: Variable , Wert

So könnte ich das im nachhinein in eine Exceldatei importieren.
Mit meinem ATmega2560 und einem Datalogging-Shield von Adafruit hab ich 
mittlerweile den Beispielcode vom AVR FAT32 zumlaufen bekommen.

Leider kann ich nur Strings schreiben. Sobald ich einen int mit 
ffwrite() schreibe zeigt es mir in der Textdatei das jeweilige 
ASCI-Zeichen an.
Zudem nimmt er Befehle wie Zeilenumbruch ffwrite('\n'), ffwrite('\v') 
oder ffwrite('\r') nicht an. Andere Befehle wie ffwrite ('\t') (TAB) 
hingegen funktioniern.
Ich hatte es auch einfach mal mit einer .csv-Datei probiert. Hierbei 
funktioneren die Umbrüche, aber die TABs nicht.
Was mache ich falsch?

Desweiteren möchte ich später mal noch eine Uhrzeit zu den jeweilegen 
Zeilen hinzufügen, weil das Datenlogging-Shield eine eigene RTC enthält.
Ich hatte bei ELM-CHAN gesehen, dass das diese Funktion bei ihm 
beinhaltet.
Sollte ich lieber gleich auf seine Programmierung umsteigen?
Gibt es hierfür ein schönes Beispiel wie man das anwendet? Am besten mit 
vielen Kommentaren.

Ich danke euch schonmal

Gruß Eduard

von c-hater (Gast)


Bewertung
3 lesenswert
nicht lesenswert
Eduard R. schrieb:

> Leider kann ich nur Strings schreiben.

OMG

Dann baue halt einen String mit enthaltenen Zeilenumbrüchen...

Die geistige Insuffizienz von "Programmierern" nimmt wirklich echt 
bedrückende Ausmasse an...

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht lesenswert
Lies mal ein Buch über die Programmiersprache C. Die ist nicht grade 
einsteigerfreundlich oder selbsterklärend.

Um Zahlen in Strings umzuwandeln gibt es "sprintf()" oder "itoa()". 
Letzteres ist nicht portabel AFAIK.

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
Verstehe ich dich richtig?

Du schreibst Zahlen in die Datei, öffnest dann die Datei mit einem 
Text-Editor und wunderst dich dann darüber, dass er Text (Zeichen) 
anzeigt?

Falls das der Fall ist, dann beschäftige dich mal ganz grundsätzlich 
damit, wie Computer Zahlen und Texte speichern. Ich denke, danach 
erübrigen sich all deine Fragen.

Excel Makros können übrigens nicht nur Text Dateien lesen, sondern jedes 
beliebige Dateiformat. Du musst nur die Interpretation der Byte-Folgen 
dazu passend programmieren.

> Zudem nimmt er Befehle wie Zeilenumbruch ... nicht an.

Was meinst du mit "nimmt nicht an"? Wie teilt er Dir das mit?

: Bearbeitet durch User
von Eduard R. (ed721ron)


Bewertung
-2 lesenswert
nicht lesenswert
Danke schon mal für die ersten Lösungshinweise.
Ich habe zuvor schon verschiedene Regelungen in C geschrieben.
Leider hab ich bis heute nur mit Zahlenwerten gearbeitet und bin ich mit 
Strings nie in Verbindung gekommen.
Sollte es doch noch andere, freundlichere Hinweise geben, bin ich 
dankbar.

von Stefan ⛄ F. (stefanus)


Bewertung
1 lesenswert
nicht lesenswert
Ich denke, du hast alles Hinweise bekommen, die an dieser Stelle 
hilfreich sein könnten. Die Grundlagen musst Du Dir schon selbst 
aneignen, sonst kannst Du nicht mit reden.

Gewöhne Dir auch an, Rückfragen zu beantworten, anstatt weitere 
alternative Antworten zu erbitten.

von c-hater (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Eduard R. schrieb:

> Danke schon mal für die ersten Lösungshinweise.
> Ich habe zuvor schon verschiedene Regelungen in C geschrieben.
> Leider hab ich bis heute nur mit Zahlenwerten gearbeitet und bin ich mit
> Strings nie in Verbindung gekommen.

Dann wäre für jeden echten Programmierer das nächstlegende gewesen: sich 
darüber zu informieren, welche Möglichkeiten die selbstgewählte(!) 
Sprache für strings bietet und wie man sie korrekt nutzt.

Alles andere ist absolut armselig und vollkommen inakzeptabel.

von Eduard R. (ed721ron)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Stefanus F. schrieb:
> Was meinst du mit "nimmt nicht an"? Wie teilt er Dir das mit?

Ich schaue nach dem Beschreiben auf meine SD-Karte und da steht 
Folgendes

von Stefan ⛄ F. (stefanus)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Eduard R. schrieb:
> Ich schaue nach dem Beschreiben auf meine SD-Karte und da steht
> Folgendes

Du hast den Satz nicht zu Ende geschrieben. Egal, ich zeige Dir mal, was 
ich in der Datei sehe. Fangen wir mal damit an, dass du der Datei die 
Endung TXT gegeben hast. Also möchtest du sie vermutlich mit einem 
Text-Editor öffnen (das hast du immer noch nicht bestätigt, wie oft soll 
ich noch nachfragen?).

Text Editoren zeigen aber nur Text an. Ich zeige Dir mal einen 
Screenshot vom Midnight Commander, der kann Sowohl Text als auch Daten 
anzeigen. Windows User kennen ein ähnliches Programm: Total Commander.

Hinter "position , " sehe ich die Zahlen 09 und 01 (Hexadezimal). Falls 
das ein 16-Bit Wert sein soll, dann eben 0109 (Hexadezimal), was in 
dezimaler Schreibweise 265 ist. Kommt dir da etwas bekannt vor?

Dahinter sehe ich 0A 0D, das entspricht dezimal 10 13 oder in 
C-Schreibweise "\n\r". Ein Zeilenumbruch im Dos/Windows Format muss aber 
"\r\n" lauten.

Wo ist jetzt das Problem? Dass du in einer Datei Text und Daten 
vermischt hast. Wie gesagt, beschäftige Dich damit, wie Computer Zahlen 
speichern und benutze dann printf() oder itoa() um dein Problem zu 
lösen.

Schau Dir mal 
http://stefanfrings.de/mikrocontroller_buch/Einstieg%20in%20die%20Elektronik%20mit%20Mikrocontrollern%20-%20Band%201.pdf 
Kapitel 4
und 
http://stefanfrings.de/mikrocontroller_buch/Einstieg%20in%20die%20Elektronik%20mit%20Mikrocontrollern%20-%20Band%202.pdf 
Kapitel 11.2 an.
Wenn Dir diese Bücher gefallen, dann lade Dir gleich auch noch den 
letzten band 3 herunter: 
http://stefanfrings.de/mikrocontroller_buch/Einstieg%20in%20die%20Elektronik%20mit%20Mikrocontrollern%20-%20Band%203.pdf

: Bearbeitet durch User
von Eduard R. (ed721ron)


Bewertung
0 lesenswert
nicht lesenswert
OK, danke für die ausführliche Erklärung und die Links werde ich mir 
auch ansehen.
Mit dem Total Commander werde ich es auch probieren. Bis jetzt hab ich 
mir immer nur sämtliche Werte auf das H-Term ausgeben lassen
Ich werde das ganze nochmal checken und umschreiben. Dann melde mich 
gern nochmal.

Danke schon mal und sonnigen Gruß

von Eduard R. (ed721ron)


Bewertung
0 lesenswert
nicht lesenswert
Mit itao hat alles super geklappt.

Außerdem kann ich die Bücher von Stefan Frings weiterempfehlen.

Danke nochmal

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]
  • [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.