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
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...
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.
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?
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.
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.
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.
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
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
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ß
Mit itao hat alles super geklappt. Außerdem kann ich die Bücher von Stefan Frings weiterempfehlen. Danke nochmal
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.