Hallo.
Wie Ihr vielleicht erinnert hatte ich mich entschlossen einen GPS-Logger selbst zu bauen. Dazu habe ich mein EM406a-GPS-Modul und ein SD-Karten-Breakout mit einen Arduino Uno(der entsprechende Nano wartet bei der Post auf mich) gekoppelt.
Verwendet habe ich die, mit der IDE "mitgelieferte", SD-Bibliothek (#include <SD.h>). und SoftSerial (ursprünglich #include <SoftwareSerial.h>).
Die gelieferten Daten lese ich in einen char-Buffer von 512 Byte (+1) Größe. Nach Einlesen von 512-Zeichen wird der Puffer auf die SD-Karte geschrieben. Dabei kam es aber immer wieder zu Überläufen im seriellen Empfangspuffer von SoftSerial, weshalb ich den Puffer auf 128Byte vergrößert habe.
Aufgezeichnet werden sämtliche NMEA-Sentences, welche das Modul liefert und mein Gerät verarbeiten kann. Zur Vollständigkeit, diese Daten werden dann mit GPS-Babel ins GPX-Format gewandelt und mit QLandkarteGT betrachtet.
Das Ganze funktioniert auch ganz gut, am Donnerstag habe ich eine Fahrt von etwa 45 Minuten komplett aufgezeichnet. Bei der Weiterfahrt danach brach er aber nach etwa 15 Minuten ab. Dies führe ich noch auf das Breadborad-Equipment zurück. Heute nun hat er problemlos zweimal 25-Minuten-Fahrten aufgezeichnet.
Soweit der Status, nun zur Frage:
Bei der Fahrt am Donnerstag stellte ich besagte Überläufe fest, weshalb die Vergrößerung des Einlesepuffers der Softserial erfolgte. Allerdings reichte die anfängliche Vergrößerung auf 96 Byte noch nicht aus. Bei 128 Byte kam es dann aber schon zu Problemen beim Programmablauf, die ich auf Probleme mit der Speichergröße zurückführe. Also habe ich schon mal die Ermittlung des nächsten Dateinamens hinausgeworfen und speichere nun in immer dieselbe Datei.
Auf der Suche nach speicherplatzsparenden Alternativen zu SD stiess ich im Storage-Forum auf die Information, dass man statt SD die Bibliothek SdFat nehmen sollte. Sie sei deutlich fehlerbereinigt und wäre auch schneller.
Allerdings musste ich feststellen, dass das Schreiben meiner 512-Byte nun (trotz SPI_FULL_SPEED) etwa 1,5-mal solange dauert wie zuvor. Immerhin, RAM scheint das Teil weniger zu verbrauchen.
Daher nun meine Frage(n) (lange Rede kurzer Sinn):
- Welche Bibliothek verwendet Ihr für "schnelle" Speicherung?
- Sollte man SdFat oder SD verwenden (oder ist mittlerweile etwas ganz Anderes der Standard)?
Mit besten Grüßen
Gruaga