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
>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.
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).
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
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.
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..
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...
>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.
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.
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
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!
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.
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?
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
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
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.
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.
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.
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
> 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 ?
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!
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.
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.
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
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
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
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
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
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.
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
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