Forum: Mikrocontroller und Digitale Elektronik Datenspeicherung mit ESP32


von Andreas S. (define_andreas)


Lesenswert?

Liebe Kollegen,

ich habe mit einem ESP32 eine Messwerterfassung entwickelt und erfasse 
damit für maximal eine Minute alle 5ms 8 analoge Messwerte, welche in 
weiterer Folge auf einer SDKarte gespeichert werden.
Allerdings schafft die SD Karte diese 96.000 Messwerte nicht in 
Echtzeit, sondern hinkt ein wenig nach !
Jetzt möchte ich euch bitte fragen - ich brauche kein fertiges Programm, 
es genügt ein ja oder nein - ob FreeRTOS ein Ansatz sein kann, diese 
Verzögerung zu eliminieren ?

von Franko P. (sgssn)


Lesenswert?

Hallo
die Frage ist doch, woran es hakt! Ein RTOS ist kein Turbolader der 
macht auf Grund zusätzlicher Software alles eher langsamer.  Check doch 
mal selber, wo es hakt. Ich schätze bei deiner SD-Karte. Wie betreibst 
du die? Im SPI-Modus oder im SD-Modus? Wie schel ist die Karte? Und wie 
oft beschreibs du die? Und mit FAT-FS oder selbergestrickt?

Gruß
Gerhard

von Rechner (Gast)


Lesenswert?

Ich komme nur auf 1200 Messwerte...

von (Gast)


Lesenswert?

nein

von BesserKalibrierterRechner (Gast)


Lesenswert?

Ich auf 1600/sec ;)

von Rechner (Gast)


Lesenswert?

Mist vertippt

von Stefan F. (Gast)


Lesenswert?

Wie dem auch sei, weniger als 100 kB pro Minute (nicht Sekunde) sollte 
jede SD Karte mit Leichtigkeit schaffen.

Dein Problem ist vielleicht eher, dass SD Karten zwischendurch mal mit 
sich selbst beschäftigt sind und dabei zahlreiche Takte verbraten. 
Typischerweise dauern diese pausen bis zu 200ms.

Dagegen kann man nichts machen, außer mit entsprechend viel RAM zu 
puffern.

von Norbert (Gast)


Lesenswert?

Andreas S. schrieb:
> Liebe Kollegen,
>
> ich habe mit einem ESP32 eine Messwerterfassung entwickelt und erfasse
> damit für maximal eine Minute alle 5ms 8 analoge Messwerte, welche in
> weiterer Folge auf einer SDKarte gespeichert werden.
> Allerdings schafft die SD Karte diese 96.000 Messwerte nicht in
> Echtzeit, sondern hinkt ein wenig nach !
> Jetzt möchte ich euch bitte fragen - ich brauche kein fertiges Programm,
> es genügt ein ja oder nein - ob FreeRTOS ein Ansatz sein kann, diese
> Verzögerung zu eliminieren ?

Mal abgesehen von der Tatsache das 1600 Messwerte pro Sekunde (bei 
vermuteten 2Bytes pro Wert) also 3,2kB/s schon deutlich in Richtung 
Fußgängergeschwindigkeit deuten…

Wenn das FAT-Dateisystem derart lahmarsc.ig operiert, sollte man die 
Messwerte im RAM zwischenspeichern und anschließend (oder IRQ-basierend 
während der Erfassung) auf die SD-Karte tröpfeln.

von Flip B. (frickelfreak)


Lesenswert?

Puffern und in blöcken schreiben.

von Prokrastinator (Gast)


Lesenswert?

Andreas S. schrieb:
> Echtzeit
Also der Schreibvorgang dauert länger als 5ms und Du verlierst Daten?

DMA benutzen oder den zweiten Kern im Hintergrund die Daten wegschaufeln 
lassen?

von Norbert (Gast)


Lesenswert?

Nebenbaustelle: Hat das Ding nicht Funk (WLAN)?
Das sollte die Werte sogar mit Waldorf-Protokoll (Singen, Klatschen und 
Tanzen) übertragen können.

von John P. (brushlesspower)


Lesenswert?

Ein ähnliches Problem hatte ich mit dem ESP32 auch.

Meine Lösung:
Alles in einem RAM Buffer packen (Core1) und wenn due eine Blockgröße 
voll hast wird die SD Karte mit Core2 geschrieben

Super einfach und schnell.

Sicherlich nicht gerade effizient oder Resourcensparend, aber was solls. 
Erfüllt seinen Zweck.

von Adam P. (adamap)


Lesenswert?

Hey Andreas,

wie schreibst du denn auf die SD Karte (Anzahl Pages / Buffergröße)?
SPI oder SDMMC/SDIO?

Nur um es nochmal nachzurechnen:
(Die ADC haben ja 12Bit soweit ich es richtig gesehen habe)

5ms (200x/Sek) * 8 Ch. * 2 Byte = 3200 Byte/Sek.
Das wären 6,25 Pages (je 512 Byte) / Sek.

Was mir dazu einfällt:
Bei mir war es so, dass Schreibvorgänge mit je 512 Byte langsamer waren 
als z.B. immer ein Buffer mit 4 Pages (2048 Byte) zu schreiben.

von Andreas S. (define_andreas)


Lesenswert?

Liebe Kollegen,
Vielen Dank für eure Tipps. Ich werde eure Anregungen gerne 
berücksichtigen und euch vom Ergebnis berichten !

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
Noch kein Account? Hier anmelden.