[AVR] Externer, permanenter Speicher

Gast #1153016
Lesenswert?

Hallo!

Ich enwterfe zur Zeit einen Datenlogger. Dieser soll über einen langen 
Zeitraum sporadisch auftretende Ereignisse protokollieren.

Das Datenaufkommen pro Ereignis liegt bei ca 40kB!

Es sollten min. 100, besser mehr Ereignisse in den Speicher passen. 
Außerdem sollte er Permanent sein.

Was nimmt am besten um sowetwas zu realisieren?

Und wichtig wäre noch zu erwähnen, dass ich einen ext. RAM verwende, der 
Speicher müsste also aus Platzgründen seriell funktionieren.

Vielen Dank im Vorraus,

mit freundlichen Grüßen,

Uwe
#1153022
Lesenswert?

Meinst Du mit "permanent" vielleicht nichtflüchtig? Es gibt haufenweise 
EEPROMs und Flash-Bausteine für SPI- oder I²C-Anbindung. Einfach mal 
gugeln nach "SPI Flash" oder "I²C Flash"... Ansonsten nimmste ne SD- 
oder MM-Karte. Da gibt es hier im Forum einen ganzen Haufen Beispiele 
für die Anwendung.
#1153024
Lesenswert?

@Uwe (Gast)

>Das Datenaufkommen pro Ereignis liegt bei ca 40kB!

>Es sollten min. 100,

Macht ca. 4MByte.

> besser mehr Ereignisse in den Speicher passen.
>Außerdem sollte er Permanent sein.

>Was nimmt am besten um sowetwas zu realisieren?

Vieles. SD-Card, Serielles Flash, Compact-Flash, whatever.

MFG
Falk
Gast #1153031
Lesenswert?

Dank für die raschen Anworten.

Entschuldigung.

Ich hatte vergessen zu sagen: Der Speicher sollte nicht auswechselbar 
sein.

Das ganze wird in einem Gehäuse verbaut und die Daten sollten nach 
möglichkeit ohne Dateisystem einfach nacheinander geschrieben werden.

Ist soetwas mit einem Flash realisierbar?

Ich habe gerade in einem Ergebnis der googlesuche gelesen, dass es I2C 
Flashs nur im kB Bereich gibt. Für MB müsste man mit SPI arbeiten.

Ist das problematisch? An meiner PrototypenPlatine ist nämlich auch ein 
ISP-Adapter.

Gruß, Uwe
Gast #1153048
Lesenswert?

Ok, das hört sich ja schonmal ganz gut an.

Noch zwei Dinge.

Der größte DataFlash von Atmel hat 8192 Pages mit jeweils 1kB. Gibt es 
da noch was größeres? wenn nicht ist das ok, der Speicher reicht ja für 
genug Messungen. Wäre aber eine schöne Sache.

Ich habe noch nie Flashs programmiert. Kann man trotz der Pages 
kontinuierlich programmieren? Also Zelle für Zelle beschreiben?

Oder kennt wer ein gutes Tut diesbzgl.?

Vielen Dank für die zahl- und vor allem hilfreichen Beiträge,

gruß, Uwe
#1153055
Lesenswert?

Viel grösser sind naturgemäss die Flash-Chips, die in Sticks und 
Flashkarten drin stecken. Aber bischen schlechter zu kriegen und mehr 
Pins.

Problem bei Dataflashes ist normalerweise, dass sie blockweise 
geschrieben werden. Was etwas stört, wenn die Daten in 8 Byte Häppchen 
gespeichert werden sollen, denn das ist ein bischen viel kleiner als die 
Blöcke. Bei deinen 40KB ist das aber kein Thema.
Gast #1153067
Lesenswert?

Nein, die Datenfalsh von Atmel sind NOR-flash und daher viel sicherer 
als die ueblichen NAND-Flash. Ja. die muss man seitenweise beschreiben. 
Zuerst den internen RAM buffer fuellen und dann schreiben. Ja. Das geht 
kontinuierlich, da man einen zweiten buffer hat. Ja. das Datenblatt des 
Datenflash ist etwas mehsam und kompliziert. Aber machbar.
Gast #1153106
Lesenswert?

> Viel grösser sind naturgemäss die Flash-Chips,
> die in Sticks und Flashkarten drin stecken.

USB-Stück kaufen, chip rauslöten, fertig

> mehr Pins.

Leider. Vielleicht doch lieber "löten lassen" und "platine fertigen 
lassen" ;-)

Falls dir ein Dataflash zu wenig ist kannst du auch zwei oder drei 
verbauen. Jedes davon kriegt dann halt ne eigene chipselect-leitung
(Firma: TravelRec.) Persönliche Seite #1153149
Lesenswert?

>Wird dann einfacher sein, direkt eine MMC-Karte zu verwenden. Ist auch
>bloss SPI.

Der Steueroverhead und die Bedienung einer SD/MMC-Karte ist ungleich 
schwieriger und ressourcenfressender, als die Anbindung eines/mehrerer 
DataFlashs. Bei riesigen Datenmengen ist die SD-Karte im Vorteil, für 
kleinere Datenlogger und gerade bei Batterieanwendung kann ein DataFlash 
klar punkten.
Gast #1153165
Lesenswert?

Entscheide mich auf jedenfall für den Dataflash. Den großen gibt es 
leider als 8 Pin nur in einem "CASON Gehäuse". Da sind die SMD-Pads 
unter dem Chip, ich glaube das kann man garnicht Löten.

Das heißt durch die CS Pins kann ich die jeweils aktivieren bzw 
deaktivieren?

Hmm, ich habe mal nach einer Lib gegooglet, aber nichts gefunden.

Aus Lötgründen werde ich in dem Prototypen erstmal zwei

http://www.atmel.com/dyn/resources/prod_documents/doc3597.pdf

als SOIC verbauen.

Später ev. dann was anderes.

Ich wäre froh, wenn mir jmd. eine Lib zur Verfügung stellen könnte.

Gruß, Uwe
Gast #1153209
Lesenswert?

Hmm, ok. Mit Lib meinte ich eigentlich Eagle-Lib, aber habe gerade das 
atmel-Package nach ewigem Trial&Error um diesen Baustein erweitert.

Wenn Interesse besteht (und mir jemand sagt wie ich es aus der Lib 
bekomme) kann ich das zur Verfügung stellen.

Reichlichen Dank für die Hilfen.

Noch etwas zu CS. Einfach jeden CS der Geräte an den AVR führen. wenn 
der den Pin auf Low zieht ist der Chip aktiv?

Und was mache ich genau mit den PullUps wegen der ISP?
#1153217
Lesenswert?

Pullups deshalb, weil die Pins vom AVR während und kurz nach Reset als 
Eingang ohne Pullup konfiguriert sind, und daher keinen definierten 
Pegel haben. Kann zur ungewollten Aktivierung der Slaves führen. Das 
gilt generell für alle SPI-Slaves, egal ob an Hardware-SPI oder an 
Software-SPI. Besonders wichtig ist das natürlich, wenn das SPI mehrfach 
verwendet wird, also ISP+SPI, oder bei mehreren SPI-Slaves.

Atmel-ISP ist damit narrensicher abgedeckt, da dies stets von aktivem 
Reset begleitet ist, somit die Pullup an den CS-Leitungen die Slaves 
deaktivieren.
Gast #1153232
Lesenswert?

Ok, klingt einleuchtend ;)

Mir ist da gerade etwas eingefallen. Ich betreibe meinen AVR wegen der 
16 MHz mit 5V, die Flashs kriegen 3,3V.
Das habe ich durch einen zweite Festspannungsregler "geregelt".  :D

Nur wie sieht das aus mit den Eingängen? Der AVR liefert ja einen 5V 
High-Pegel, vertragen die Flashs das?
Gast #1153269
Lesenswert?

Hmm, ich habe auf der Platine zusätzlich noch einen Ram+Latch und einen 
MAX232. Kommen die mit den Pegeln noch zurecht wenn der AVR auf 4V 
läuft?

Wie sieht das denn aus, welchen bidirektionalen Pegelwandler würdet ihr 
für einen SPI verwenden?

Ich denke dass ein Pegelwandler eine Saubere Lösng wäre. Das Anheben der 
Spannung durch Spg-Teiler bzw. Z-Diode ist nicht sehr professionell 
denke ich. Oder sehe ich das völlig falsch?

Gruß, Uwe.
(Firma: TravelRec.) Persönliche Seite #1153276
Lesenswert?

Also wir haben hier etliche Geräte im Einsatz, bei denen der AVR mit 5V 
und das DataFlash mit 3,3V ohne zusätzliche Pegelanpassung laufen und da 
ist es noch zu keinen Problemen gekommen. Im AVR-Eingang haben wir 
zusätzlich den PullUp gesetzt, um dem 3,3V Pegel vom DataFlash noch 
etwas Schwung nach oben zu verpassen. Die Clockrate zum / vom DataFlash 
liegt hier bei etwa 7MHz. Und wenn Du unbedingt einen Pegelwandler 
einsetzen wilst, brauchst Du nur einen einzigen von DO zum AVR, weil die 
Eingänge des DataFlashs - wie gesagt - 5V-tolerant sind.
Gast #1153284
Lesenswert?

Ok, klingt einleuchtend!

Also einfach den PullUp im AVR aktivieren an dem SO hängt?

Hört sich ja gut an.

Ich denke so werde ich das machen, die Platine würde ja unnötig wachsen 
bei einem zusätzlichen Chip.

Vielen Dank.
Gast #1153328
Lesenswert?

Ein 3.3V Spannungsregler, wie ein LP2951 geht uebrigens nicht, denn das 
ist ein Serieregler. Der laesst den Strom vom 5V nach 3.3V fliessen und 
regelt da. Wenn die Pins an 5V angeschlossen werden, so wird dieses 3.3V 
Niveau auch auf 5V angehoben werden. Macht nichts, denn die Maximum 
ratings erlauben 5V. Allerdings erhoeht sich dann der Stromverbrauch ein 
wenig. Aber falls Stromsparen ein Thema waere, so wuerde die CPU eh 
nicht mit 5V laufen.
#1153340
Lesenswert?

8421 wrote:

> Ein 3.3V Spannungsregler, wie ein LP2951 geht uebrigens nicht, denn das
> ist ein Serieregler.

Habe ich nicht kapiert. Warum willst du partout einen Parallelregler 
verwenden?

Wenn die Eingänge eines 3V-ICs per Datasheet 5V-kompatibel sind, dann 
haben sie logischerweise keine einfachen Schutzdioden gegen Vcc drin, 
Rückspeisung über die Eingänge findet also nicht statt. Sonst wär's ja 
grotesk.

Nach deiner Logik würde der 3,3V-Parallelregler statt dessen die 
5V-Versorgung auf 4V runterwürgen.
(Firma: TravelRec.) Persönliche Seite #1153351
Lesenswert?

>Ich fand das busy signal sehr hilfreich, besser als abfragen, besser als
>timen. dh ich hab das Busy auf Int_1 genommen. Das macht den Code etwas
>komplizierter, aber schneller.

Die o.g. DataFlashs haben keine Busy-Leitung. Da sie über 2 interne 
SRAM-Buffer verfügen, kann man sehr schnell einen Buffer füllen, eine 
Page schreiben und dann gleich den 2. Buffer füllen und so weiter. Vor 
dem Schreiben der Page fragt man einfach den Status ab und guckt, ob 
noch Busy oder nicht. In den allermeisten Fällen wird der Flashspeicher 
dann schon wieder bereit sein. In einem Experiment habe ich 16Bit 
Stereo-Audiodaten mit 50kHz Samplerate unter Verwendung beider Buffer 
auf das DataFlash geschrieben, ohne ein einziges Mal warten zu müssen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren