Hallo,
ich bin dabei einen Datenlogger zu entwerfen.
Dieser speichert mir Beschleunigung, Himmelsrichtung und die Uhrzeit
alle 10 Sekunden in einem Eeprom (15byte pro log).
Nach 12h möchte ich die Daten gerne auf einen PC übertragen und in Excel
öffnen können.
Ich verwende: uC LPC936 (8051), RTC DS1307, Himmelsrichtung u.
Beschleunigung LSM303dlh, Speicher 24xx512.
Kann mir jemand einen einfachen, leichtbzu realisierenden Vorschlag
machen wie ich die Daten auf den PC im Excel Format bekomme?
USB oder Seriell? Vielleicht mit FT232? Vielleicht noch ein paar
Grundsätzliche Tips?
Grüsse.
Wahrscheinlich am einfachsten vom MC aus per RS232.
Weil es kaum noch Rechner mit echter RS232 gibt, kann man dort einen
USB-RS232-Wandler nehmen, der als virtueller COM-Port erscheint.
Als Datenformat ist wahrscheinlich am einfachsten CSV (comma separated
values), das kann ziemlich jede BWL-Software verwursten und ist am MC
leicht zu erzeugen.
Moritz schrieb:> Kann mir jemand einen einfachen, leichtbzu realisierenden Vorschlag> machen wie ich die Daten auf den PC im Excel Format bekomme?
Wenn Du auf den PC übertragen willst bruachst Du ohnehin eine
Schnittstelle, USB oder seriell.
Mach das seriell und übertrage die Daten mit jeweils einem Komma
separiert in lesbarer Form. Die Daten speicherts du am PC mit einem
Terminalprogramm. Die Komma-separierten daten kann Excel direkt einlesen
(CSV Datei).
Beispiel:
Uhrzeit, Wert1, Wert2, Wert3
Uhrzeit, Wert1, Wert2, Wert3
Uhrzeit, Wert1, Wert2, Wert3
rgds
Klaus Wachtler schrieb:> Als Datenformat ist wahrscheinlich am einfachsten CSV (comma separated> values), das kann ziemlich jede BWL-Software verwursten und ist am MC> leicht zu erzeugen.
Seh ich auch so. Excel-Format ist komplizierter und bringt keinen
Vorteil. Nimm lieber CSV, du beschränkst dich dann nicht unnötig auf
eine bestimmte Auswertungssoftware.
Moritz schrieb:> USB oder Seriell? Vielleicht mit FT232? Vielleicht noch ein paar> Grundsätzliche Tips?
Vielleicht wärs noch geschickt, jede übertragene Zeile mit einer
Prüfsumme zu ergänzen. Die lässt sich dann im Tabellenprogramm (egal
welches du am Ende einsetzt) relativ leicht gegenprüfen.
Aus welchen Grund nimmst noch etwas aus der alten 8051 Linie? Du musst
jetzt wahrscheinlich Treiber für deine Sensoren entwickeln.
Nimm den Arduino und vergiss die Unkenrufe.
Wenn Du bereit bist auf einen Arduino zu wechseln, kann man dort den
1307 anschließen und einen SD-Karten Reader, dann kannst Du unabhängig
vom PC die Daten schreiben und später die SD-Karte in den PC stecken.
Fertige Programme gibt es schon dafür (Datalogger).
Wenn man einen Arduino Nano und einen Reader in China kauft, dauert das
zwar 2 bis 3 Wochen, kostet aber weniger als 10 €.
Excel kann leider keine richtigen CSV-Dateien importieren. Typisch MS.
Die Kommas (CSV=Comma-seperated-values) müssen stattdessen ein Semikolon
ersetzt werden. Der Dezimalpunkt muß auch richtig gewählt werden.
Ansonsten gibt der uC einen Text aus, den man am PC speichert und mit
Excel öffnet (Endung .CSV).
das ist so nicht ganz richtig. es ist beim Datenimport sehr wohl möglich
Excel unterschiedliche Komma, Trennzeichenkombinationen beizubrigen -
sowohl beim manuellen Import, wie auch in Makros.
Korrekt ist allerdings, dass Excel per default die Ländereinstellungen
verwendet und entsprechend *.csv dateien interessant interpretiert ;)
Was das Projekt angeht...
kennst du OpenLog (Sparkfun)
kennst du LogView/Openformat (www.logview.info)
Hallo,
wenn du eine rs232 Schnittstelle verwendest willst, kannst du eigentlich
auch direkt aus excel über VBA auf den com Port zugreifen und dir die
empfangenen Daten in ein Tabellenblatt einfügen. Dann kannst du die
Datei in jedem beliebigen Format abspeichern welches von excel
unterstützt wird.
Gruß mophzk
6A66 schrieb:> Die Daten speicherts du am PC mit einem> Terminalprogramm. Die Komma-separierten daten kann Excel direkt einlesen> (CSV Datei).>> Beispiel:> Uhrzeit, Wert1, Wert2, Wert3> Uhrzeit, Wert1, Wert2, Wert3> Uhrzeit, Wert1, Wert2, Wert3
Viel Spaß auf einem PC mit deutscher Zahlendarstellung (speziell
Dezimalkomma), falls die Werte als Floatingpoint übertragen werden
sollen ;-)
Bernd Rüter schrieb:> Excel kann leider keine richtigen CSV-Dateien importieren.
Natürlich kann es das. Wenn der Benutzer die entsprechenden
Möglichkeiten von Excel richtig benutzt.
> Typisch MS.
Nö, typisch DAU. Wenn Doppelklick nicht funktioniert, ist er schon
völlig überfordert.
Das Problem ist einfach, daß Excel standardmäßig die systemweiten
Locales benutzt. Will man was anderes, muß man das Excel einfach nur
sagen.
c-hater schrieb:> Will man was anderes, muß man das Excel einfach nur sagen.
Danke für den Hinweis. Hast du für OpenOffice auch einen entsprechenden
Tip zum Überschreiben der Systemeinstellungen?
Meine shell Scripte generieren einfache html table, tr,td, Daten.
Dieses html Dokument nenne ich allerding einfach *.xls.
Excel erkennt das und ist glücklich.
Vorteil, einfache Formatierungen wie rotfärben von Grenzwerten und
Überschriften habe ich so gleich mit.
Bernd Rüter schrieb:> Excel kann leider keine richtigen CSV-Dateien importieren. Typisch MS.>> Die Kommas (CSV=Comma-seperated-values) müssen stattdessen ein Semikolon> ersetzt werden. Der Dezimalpunkt muß auch richtig gewählt werden.> Ansonsten gibt der uC einen Text aus, den man am PC speichert und mit> Excel öffnet (Endung .CSV).
Das C bei CSV darf man nicht ernst nehmen. Das Komma als Trennzeichen
ist denkbar ungeeignet. Das Semikolon ist schon besser.
Noch besser ist ein <TAB> als Trennzeichen. Wenn man das Ganze dann
einfach mit der Endung .XLS versieht, geht es auch mit einem
Doppelklick.
Uwe K. schrieb:> Noch besser ist ein <TAB> als Trennzeichen. Wenn man das Ganze dann> einfach mit der Endung .XLS versieht, geht es auch mit einem> Doppelklick.
Gerade mal probiert, Excel murmelt dann zwar etwas über eine
"beschädigte Datei", schluckt das Ganze dann aber doch.
Ich empfehle aber auch eine CSV mit Semikolon als Trenner. Das wird von
Excel (und auch von vielen anderen Programmen) anstandslos verarbeitet.
Heinz L. schrieb:> Nano ist klar, welchen Reader kannst du vorschlagen?
Was meinst Du mit "Reader", den Editor oder die IDE ?
Als IDE gibt es beim Arduino erst mal nur einen Standard, zur Zeit
Arduino Version 1.6.1.
Einfach nur die .exe datei ausführen und installieren, ist in Sekunden
passiert. Der eingebaute Editor ist recht sparsam ausgestattet, reicht
aber für kleine Projekte.
Wers komfortabler haben will nimmt den Notepad++
Gerald K. schrieb:> Heinz L. schrieb:>> Nano ist klar, welchen Reader kannst du vorschlagen?>> Was meinst Du mit "Reader", den Editor oder die IDE ?>> Als IDE gibt es beim Arduino erst mal nur einen Standard, zur Zeit> Arduino Version 1.6.1.> Einfach nur die .exe datei ausführen und installieren, ist in Sekunden> passiert. Der eingebaute Editor ist recht sparsam ausgestattet, reicht> aber für kleine Projekte.>> Wers komfortabler haben will nimmt den Notepad++
war ein Versehen von mir, der SD-Reader war gemeint.
Wolfgang schrieb:> Viel Spaß auf einem PC mit deutscher Zahlendarstellung (speziell> Dezimalkomma), falls die Werte als Floatingpoint übertragen werden> sollen ;-)
Das kann man dem Excel alles richtig sagen :)
Auch dass er den Delimiter als Komma nehmen soll und der Dezimalpunkt
als Punkt.
Aber man kann auch mit Delimiter Semikolon übertragen und mit
Dezimaltrenner Komma, dann muss man beim import nicht extra denken.
Kannst Du alles einstellen.
Am einfachsten wahrscheinlich mit Semikolon und Komma.
Aber das kann man ja in der Source schön definieren :)
rgds
Danke für die vielen Antworten.
Muss ich dann jewels ein Komma, also ein zusatzliches byte mit im Eeprom
anlegen? Also nach jedem datenlog? Oder schlimmer: nach jedem seperatem
wert also x koordinate KOMMA y Koordinate KOMMA usw... Das währen ja
dann zusatzlich 14 byte
moritz schrieb:> Muss ich dann jewels ein Komma,
Semikolon, s.o.
> also ein zusatzliches byte mit im Eeprom anlegen?
Nein, Du streust die zusätzlichen Semikolons erst beim Senden über den
UART ein, also so:
Sende Wert 1
Sende Semikolon
Sende Wert 2
Sende Semikolon
...
Sende Wert N
Sende CR + LF ("\r\n")
Das ganze programmierst Du am besten als Schleife. Dann musst Du nicht
jedes Byte einzeln im Programm senden - auch wenn ich es jetzt hier so
angedeutet habe.
6A66 schrieb:> Am einfachsten wahrscheinlich mit Semikolon und Komma.
Diese Philosophie hat den klitzekleinen Nachtteil, dass einem ein
Großteil der PC-Nutzer auf dieser Welt ins Gesicht springen, weil bei
ihnen ein Komma absolut nichts mit Floating Point Zahlen zu tun hat. Und
die Anzahl der C-Compiler für µCs, die freiwillig z.B. bei printf()
bereit sind, eine Dezimalkomma zu verwenden, kann man wahrscheinlich an
einem Finger abzählen.
Sorry,
muss hier nochmal nachfragen. Ist dass bloedsinn die 15byte
abzuspeichenrn?
Soll ich die daten vom accelerator und bearing sensor nicht erst
auswerten und dann ablegen? Die daten waeren dann doch viel kleiner
oder?