Forum: Mikrocontroller und Digitale Elektronik Daten mit hoher Frequenz speichern! Aber wohin?


von goldeneyes1987 (Gast)


Lesenswert?

Hallo,

also ich lese 4 Digitale Ports am AVR und möchte diese nach einer 
kleinen Rechnung speichern. Dieses sollte möglicht mit einer frequenz 
bis zu max. 10 khz funktionieren und min. 1 kHz.
Der RAM genügt nicht; EEPROM zu langsam;
Is dafür der Flash geeignet ???





Für eure Antworten bedanke ich mich im voraus!


MfG
GoldenEyes

von oha (Gast)


Lesenswert?

Allenfalls ein externes Datenflash. Zb ein AT45DB321 oder so.

von holger (Gast)


Lesenswert?

>also ich lese 4 Digitale Ports am AVR und möchte diese nach einer
>kleinen Rechnung speichern. Dieses sollte möglicht mit einer frequenz
>bis zu max. 10 khz funktionieren und min. 1 kHz.
>Der RAM genügt nicht; EEPROM zu langsam;
>Is dafür der Flash geeignet ???

Nein. Nimm einen ATMega128 und papp da externes RAM dran.
Oder fang mal mit ARM an.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Wie viele Byte?

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

holger schrieb:
> ATMega128

Oder einen ATMega162, die gibt's auch in DIL40. Aber mit 1 - 10 kHz auf 
den Flash schreiben... Der ist schneller kaputt, als Du 
"Staubsaugervertreter" sagen kannst (hält 1000 - 10000 Mal).

von crazy horse (Gast)


Lesenswert?

Bei begrenzten Datenmengen: FRAM über I2C oder SPI.

von Icke (Gast)


Lesenswert?

Oder SPI FRAM, da EEPROM nur begrezt oft beschrieben werden kann, oder 
wie  schon gesagt einen SPI FLash als Ringspeicher. Letztendlich kommt 
es drauf an, wieviel Daten gespeichert werden müssen

von goldeneyes1987 (Gast)


Lesenswert?

Das wären für eine 10 min  rund 90 MByte!!

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

goldeneyes1987 schrieb:
> 90 MByte!!

Äh - hust - ich kenne keinen AVR, der mehr als 256KB Flash hat, 
geschweigedenn mehr als 64KB SRAM handhaben kann. Wenn Du einfach nur 
Daten schaufeln musst und Du diese nur selten wieder löschen musst - 
nimm 'ne SD-Karte.

von goldeneyes1987 (Gast)


Lesenswert?

Man könnte die Datenmenge noch runtersezten wenn man Mitteln würde dann 
würden aber immer noch rund 500kByte

von TestX .. (xaos)


Lesenswert?

goldeneyes1987 schrieb:
> Das wären für eine 10 min  rund 90 MByte!!

da reicht ein avr kaum...was hast du denn genau vor, evlt kann man den 
algorithmus iterativ darstellen und braucht die neuen daten nur zu 
gewichten.. ansonsten einen ARM oder blackfin DSP mit richtig power und 
externem DDR Ram..

von goldeneyes1987 (Gast)


Lesenswert?

Also das mit der SD-Karte klingt ja ganz gut, aber wie schnell kan ich 
diese beschreiben?? Kann ich die SD-Karte alle 100 ms beschreiben?

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

goldeneyes1987 schrieb:
> alle 100 ms beschreiben?

Du meinst, mit einem Byte? Eigentlich schon, Du musst nur immer erst 512 
Bytes vor jedem Schreibvorgang sammeln. Über 10 Bytes pro Sekunde lacht 
sich so eine SD-Karte doch tot...

von goldeneyes1987 (Gast)


Lesenswert?

Und wie lange dauert der Schreibvorgang be einer SD-Karte von 512 Bytes 
über SPI?

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Vielleicht 10 bis 20 Millisekunden.

von holger (Gast)


Lesenswert?

>Man könnte die Datenmenge noch runtersezten wenn man Mitteln würde dann
>würden aber immer noch rund 500kByte

Passt doch. 512kB SRAM Banked an das external Memory Interface.

>Und wie lange dauert der Schreibvorgang be einer SD-Karte von 512 Bytes
>über SPI?

Inklusive sporadischem Wear Levelling länger als dir lieb ist.

von goldeneyes1987 (Gast)


Lesenswert?

Und wie sieht es mit I2C aus?

von dall (Gast)


Lesenswert?

Damit kannst du nicht auf ne SD-Karte schreiben. Und wenn nicht SD, ist 
SPI genauso im Rennen.
Irgendwo hatte ich mal ein Projekt gesehen, dass PC-Ramriegel an einen 
AVR geklemmt hatte... An mögliche Kapazitäten oder wo das war kann ich 
mich leider gerade nicht erinnern.

von crazy horse (Gast)


Lesenswert?

Vielleicht wäre das wieder mal ne Anwendung für das beliebte WOM?

von goldeneyes1987 (Gast)


Lesenswert?

What are this?
Google liefert nur bullshit!

von Matthias L. (Gast)


Lesenswert?


von goldeneyes1987 (Gast)


Lesenswert?

Ja das war mal nen Witz! :-)

von Klaus D. (kolisson)


Lesenswert?

goldeneyes1987 schrieb:
> Ja das war mal nen Witz! :-)

Meinst du das WOM ?

Für deine Anwendung wäre ja vielleicht ein SRAM interessant.
Die gibt es fast beliebig schnell und können als CacheRam
fungieren.

Klaus

von Christian T. (shuzz)


Lesenswert?

Die SD-Karte wurde hier schon mehrfach genannt und klingt für Dein 
Projekt nach der passendsten Lösung...

Mit ein wenig Mehraufwand kannst die gleich PC-kompatibel (aka FAT) 
beschreiben und hast damit auch gleiche eine bequeme Möglichkeit um die 
Daten aus Deinem Messaufbau rauszukriegen.

Einfacher geht's nicht!

von oha (Gast)


Lesenswert?

Eine SD Karte ist in einer Knipse drin. die macht zB 4MByte Bilder. Und 
davon kann man mehrere hintereinander schnell wegspeichern. Die besten 
haben Transferraten von 20-30MByte pro Sekunde. Dazu benoetigt man dann 
aber schon einen 32bit controller.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

goldeneyes1987 schrieb:
> also ich lese 4 Digitale Ports am AVR und möchte diese nach einer
> kleinen Rechnung speichern. Dieses sollte möglicht mit einer frequenz
> bis zu max. 10 khz funktionieren und min. 1 kHz.
Ich hätte da noch ein paar grundlegende Fragen: WOHER kommen die Daten? 
WIE schnell ändern die sich? Wenn das sowas wie ein Datenlogger ist, 
warum speicherst du dann nicht nur, wenn sich die Daten ÄNDERN? Kannst 
du die Information von 4 Byte auf z.B. 1 Byte REDUZIEREN?

Kurz: WAS willst du denn überhaupt machen?

von goldeneyes1987 (Gast)


Lesenswert?

Also ich will:
4 Sensoren lesen am Digitalen Port
Eine kleine Rechnung durchführen und die Daten Speichern und dass 
möglichst mit einer Frequenz von 10Khz.
Und mein Problem ist: Worauf soll/kann ich 16 Byte speichern, die alle 
100µs anfallen! Dabei sollte mein Schreibvorgang logischerweise 
schneller sein !


Gruß
GoldenEyes

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

goldeneyes1987 schrieb:
> 16 Byte alle 100 µs

16 Byte * (1 : 100µs) = 160000 Byte/s = 160KB/s. Wenn Du deine SD-Karte 
schnell genug takten kannst (vllt. 1 bis 2 MHz), dann könnte das 
klappen. Alternativ könnte ich Dir noch eine Festplatte empfehlen... 
Natürlich keine SATA-Platte, sondern eine IDE-Platte mit vielleicht 4GB 
Speicherplatz. Vorausgesetzt, Du hast so eine.


Gruß
Jonathan

von Uwe (Gast)


Lesenswert?

160kByte/s ist doch kein problem für ne SD Karte. Aber du mußt natürlich 
die Pagegöße des Flash beachten und die Daten Puffern. Wärend du dann 
die Daten aus Puffer 1 zur SD Karte Schickst schreibst du neu ankommende 
Daten in Puffer 2. Wenn Puffer 1 geleert wurde schreibst kannst du ihn 
wieder mit neuen Daten Füllen und in der Zeit Puffer 2 zur SD Karte 
schicken. Natürlich alles per Interupt und mit Timern. DMA könnte man 
auch machen oder nen Ringpuffer.

von Uwe (Gast)


Lesenswert?

Die SD Karten haben auch nen Controller drin und Puffern Die Pages vorm 
Schreiben. Wie Groß der Puffer ist weiß ich auch nicht habe ich mich 
noch nicht mit beschäftigt. Es gibt ja glaube ich auch SD Karten mit 
unglaublichen Schreibgeschwindigkeiten jenseits von 30MByte/s. Da sollte 
es auch ungepuffert keine probleme geben.

von Peter II (Gast)


Lesenswert?

Uwe schrieb:
> 160kByte/s ist doch kein problem für ne SD Karte.

sie wird hier aber vemutlich nur über SPI gesteuert, als jedes bit 
einzeln.

von W.S. (Gast)


Lesenswert?

Kurzum,
er braucht einen 32 Bit Controller mit ordentlicher RAM-Ausstattung, um 
die kontinuierlich anfallenden Daten in einem ordentlich großen 
Ringpuffer im RAM zwischenzuspeichern (nach meinem Gefühl sollte man 
dazu wenigstens 64K haben, notfalls extern ein halbes Megabyte, zB. 
256Kx16, also Controller mit herausgeführtem Bus) und er braucht einen 
Controller mit einem dedizierten 4 Bit breitem SD-Kartenanschluß. Das 
ist alles mehr, als man mit einem Atmel AVR zur Verfügung hat.

Mein Tip: Such bei Ebay nach einem fernöstlichen ARM- bzw. Cortex- 
Entwicklungsboard, da ist oftmals auch noch ein TFT-Display mit drauf, 
ADC's sind mit an Board und teuer sind die auch nicht.

W.S.

von Reinhard Kern (Gast)


Lesenswert?

Uwe schrieb:
> Da sollte
> es auch ungepuffert keine probleme geben.

Bei einem kontinuierlichen Datenanfall ist Puffern sinnlos und kostet 
bloss noch mehr Zeit. Es sei denn, der Puffer ist gross genug für die 
längstmögliche Messzeit, aber dann besteht kein Grund mehr, die Daten 
noch irgendwohin weiterzuschieben.

Gruss Reinhard

von Uwe (Gast)


Lesenswert?

> Bei einem kontinuierlichen Datenanfall ist Puffern sinnlos
Wenn die SD Karte zwar Schnell genug ist aber nicht kontinuierlich Daten
entgegennehmen kann muß man Puffern. Oder wie jetzt ?

von goldeneyes1987 (Gast)


Lesenswert?

Uwe schrieb:
> Wenn die SD Karte zwar Schnell genug ist aber nicht kontinuierlich Daten
> entgegennehmen kann muß man Puffern. Oder wie jetzt ?

Also das ist mal ein Wortspiel!
Der Puffer dient doch dazu, das wenn mehr Daten anfallen als man schnell 
schreiben kann diese dort zwischenspeichert! Das bedeutet wenn meine SD 
Karte schnell genug ist, muss ich nicht Puffern!

von Peter II (Gast)


Lesenswert?

goldeneyes1987 schrieb:
> Das bedeutet wenn meine SD
> Karte schnell genug ist, muss ich nicht Puffern!

oder man sollte so lange puffern bis eine Page der SD karte voll ist, 
damit ist das schreiben schneller.

von m.n. (Gast)


Lesenswert?

W.S. schrieb:
> Kurzum,
> er braucht einen 32 Bit Controller mit ordentlicher RAM-Ausstattung,

Das sehe ich auch so. Es wurden ja viele Zahlen genannt; ausgehend von 
160kB/s sehe ich nicht, wie ein ATmega diese zunächst errechnen und dann 
noch speichern soll.

von j. c. (jesuschristus)


Lesenswert?

SD.Karte und nochmal SD-Karte!

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Siehe hier, Artikel STM32.
Der hat bereits ein SDIO Interface für die SD-Card.
Codedemos gibt auch irgendwo bei google, sogar mit FAT-Dateisystem.

von Klaus D. (kolisson)


Lesenswert?

Mir kommt es hier zuwenig zur Geltung dass die SD Karten
ja Seitenweise beschrieben werden.

Peter II schrieb:
> goldeneyes1987 schrieb:
>> Das bedeutet wenn meine SD
>> Karte schnell genug ist, muss ich nicht Puffern!
>
> oder man sollte so lange puffern bis eine Page der SD karte voll ist,
> damit ist das schreiben schneller.

Das trifft es in etwa halb.
Andere Aussagen gehen dahin , dass amn jedes Byte sofort schreiben
sollte.

Ich finde es etwas konfus.

Meines Wissens nach speichern SD Karten im Page Modus und daher wäre es
unsinnig einzene Bytes zu schreiben, da dieses Vorgehen die Karte
früher kapuut schreibt als nötig.
Zusätzlich is auch ein Blocktranfer.
Was Uwe da schrieb schein mir am logischten.

Uwe schrieb:
> 160kByte/s ist doch kein problem für ne SD Karte. Aber du mußt natürlich
> die Pagegöße des Flash beachten und die Daten Puffern. Wärend du dann
> die Daten aus Puffer 1 zur SD Karte Schickst schreibst du neu ankommende
> Daten in Puffer 2. Wenn Puffer 1 geleert wurde schreibst kannst du ihn
> wieder mit neuen Daten Füllen und in der Zeit Puffer 2 zur SD Karte
> schicken. Natürlich alles per Interupt und mit Timern. DMA könnte man
> auch machen oder nen Ringpuffer.

Also richte schlichtweg eine 2 Page Puffer ein und immer wenn der eine
voll ist wird er in die SD geschoben.

Klaus

von Jobst M. (jobstens-de)


Lesenswert?

Jonathan Strobl schrieb:
> Alternativ könnte ich Dir noch eine Festplatte empfehlen...
> Natürlich keine SATA-Platte, sondern eine IDE-Platte mit vielleicht 4GB
> Speicherplatz. Vorausgesetzt, Du hast so eine.

CF-Karte. (Bis zu 90MB/s)

Uwe schrieb:
> Es gibt ja glaube ich auch SD Karten mit
> unglaublichen Schreibgeschwindigkeiten jenseits von 30MByte/s.

Aber die erreicht man im SPI-Mode nicht.
160kB/s (1,3MBit/s) sollten allerdings drin sein.


Gruß

Jobst

von Ralph (Gast)


Lesenswert?

FT232 chip dran und darüber die Daten per USB an ein Laptop/PC

von Reinhard Kern (Gast)


Lesenswert?

Klaus De lisson schrieb:
> Ich finde es etwas konfus.

Ja, das sind auch 2 Paar Schuhe: Block Devices, das sind viele Speicher, 
die wie eine Festplatte in Blöcken organisiert sind, sollten auch 
blockweise angesprochen werden, auch wenn die Software was anderes 
zulässt. Das ist aber eher Blocking/Deblocking als Pufferung und wird 
auch in der Regel vom Betriebssystem übernommen, wenn vorhanden - es ist 
unter Windows nicht sinnvoll, sich um die Sektorgrösse der Festplatte zu 
kümmern, und so ohne weiteres weiss man sie auch garnicht.

Im vorliegenden Fall kann das aber wichtig sein, weil es sich bei diesem 
Teil der Software ja praktisch um einen Device Treiber handelt. Dann 
muss man aber sicher sein, wie gross ein Block ist und auch, dass man 
genau einen Block schreibt. Es ist ja bekannt, dass man moderne 
Festplatten mit 4k-Sektoren stark bremst, wenn die Partitionen nicht an 
den 4k-Grenzen ausgerichtet sind.

Eine Pufferung von Daten, um sie später zu verarbeiten, ist bei 
konstantem Datenfluss aber eher schädlich, weil es ein später nicht 
gibt, und das Puffern kostet auch Rechenzeit, also sollte man bei 
Speichern, die Byte für Byte speichern (z.B. RAM), die Daten auch direkt 
schreiben wie sie anfallen.

Eine noch mal andere Frage ist es, ob das Speichern den Empfang zu lange 
blockiert, so dass Zeichen verloren gehen, dann braucht man 2 oder einen 
2stufigen Blockpuffer oder eine funktionierende Interrupt-Lösung.

Gruss Reinhard

von Klaus D. (kolisson)


Lesenswert?

Hallo Reinhard,
irgendwie verwirrst du mich.
Ich musste zwar neulich schon eine Rüge einstecken wegen
einer Zollgeschichte. Da wurde mir erklärt, dass meine Erkenntniss,
die 30 jahre alt ist  vielleicht nicht mer Up To Date ist.
Aber mit den Speicherkarten hatte ich mich doch erst neulich
(vor 3 Jahren) beschäftigt.
Da kam es mir so vor als wäre ein Seitenweises Schreiben sinvoll.
Vielleicht ist auch nicht so.

Ich glaube ich muss, wie so immer , mal wieder darüber nachdenken,
ob dass was ich meine zu wissen auch wirklich stimmt.

liebe Grüsse
Klaus de Lisson

von Reinhard Kern (Gast)


Lesenswert?

Klaus De lisson schrieb:
> Da kam es mir so vor als wäre ein Seitenweises Schreiben sinvoll.
> Vielleicht ist auch nicht so.
>
> Ich glaube ich muss, wie so immer , mal wieder darüber nachdenken,
> ob dass was ich meine zu wissen auch wirklich stimmt.

Das schadet bestimmt nicht, aber eigentlich genügt auch genaues Lesen: 
ich habe geschrieben "Block Devices ... sollten auch blockweise 
angesprochen werden", das ist so ziemlich das was du auch denkst. 
Allerdings muss das dann auch stimmen, denn wenn sich die zu 
schreibenden Blöcke nicht mit der Einteilung des Speichers decken, 
erreicht man das glatte Gegenteil.

So gesehen gehört die Blockverwaltung zum Treiber der Speicherkarte und 
nicht zur Datenerfassung.

Gruss Reinhard

von Martin S. (sirnails)


Lesenswert?

Mal blöd gefragt: Um welchen Controller handelt es sich überhaupt? Was 
spricht denn gegen einen D-Ram-Controller und genug Speicher dran? 
Hättest Du dafür überhaupt genügend Datenleitungen?

Muss es ein AVR sein? Die Aufgabe wäre für den Nerdy fast langweilig.

von Reinhard Kern (Gast)


Lesenswert?

Martin Schwaikert schrieb:
> Was spricht denn gegen einen D-Ram-Controller und genug Speicher dran?

Dass bei Stromausfall die Daten futsch sind - ich benutze aber seit 
Jahrzehnten statische RAMs mit einer Lithium-Batterie oder einem Akku, 
bis zu ein paar MByte ist das garkein Problem und man braucht keine 
spezielle Software dazu, ist eben RAM im Speicherbereich des Prozessors 
- höchstens eine Seitenumschaltung, wenn der Adressraum zu klein ist.

Gruss Reinhard

von Klaus D. (kolisson)


Lesenswert?

Ja Reinhard,
hatte ich das nicht schon erwähnt

Klaus De lisson schrieb:
> Für deine Anwendung wäre ja vielleicht ein SRAM interessant.
> Die gibt es fast beliebig schnell und können als CacheRam
> fungieren.

Sram ist doch Static Ram oder nicht ?

Klaus

von ja (Gast)


Lesenswert?

Klaus De lisson schrieb:
> Sram ist doch Static Ram oder nicht ?

ja

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.