Forum: Mikrocontroller und Digitale Elektronik Externer Speicher


von Walker (Gast)


Lesenswert?

Hallo,

ich habe ein Atmega32 und brauche viel Speicher zur Abspeicherung der 
Daten. Ich bräuchte so etwa 10 MB Speicher. Welche Möglichkeiten habe 
ich?

Danke!

von Hans (Gast)


Lesenswert?

Nimm ein Flash von STM. Bitte frage jetzt aber nicht welches, es gibt 
tausende. Einfach auf der Homepage schauen.

von 6636 (Gast)


Lesenswert?

Ein Atmel Datenflash. Ist ein NOR Flash und dadurch viel zuverlaessiger 
als ein NAND Flash.

von Heino (Gast)


Lesenswert?

check mal, wie oft du den Flash beschreiben kannst/musst!

von Hmm.. (Gast)


Lesenswert?

SD-Karte?

Wie schnell muss es denn sein?

von Bernd (Gast)


Lesenswert?

Also 64 KByte SRAM Speicher kann man ohne Probleme am AVR betreiben.
Denk dran, der Speicherchip hat eine ChipSelect Leitung, die ist da 
nicht umsonst dran sondern sagt dem Speicherchip "Egal was auf den 
Leitungen liegt, ignorieren!"

von Walker (Gast)


Lesenswert?

Danke,

es gibt wie aber auch solche DataFlash z.b. diese von Atmel:
http://atmel.com/dyn/resources/prod_documents/doc3597.pdf

Ist 32 MegaBit DataFlash!

Kann ich den auch mit Atmega32 verwenden?
Was muss ich beachten?

Gibt es schon irgendwo ein fertiger Code zur Ansteuerung von diesem 
DataFlash? Kennt jemand?

Danke!

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Hallo Walker,

Ich verwende die Dinger mit schöner Regelmäßigkeit, um dort meinen 
Programmcode abzulegen. Per SPI lassen die sich sehr einfach und flott 
programmieren und auslesen.

Die AT45 sind auch 5V-fest, man kann sie also direkt an einen 5V-Atmel 
hängen - günstiger ist natürlich eine niedrigere Betriebsspannung 
(schon, weil man dann nur eine Spannung benötigt :-)
Aber die High-Pegel werden auch bei 5V noch sauber detektiert (dann 
natürlich bei 3,5V Betriebsspannung des AT45).

Ich habe mir damit eine Plattform gebaut, die ich per Skriptsprache 
programmieren kann und auf der ich dann natürlich richtig viel 
Programmspeicher habe. Im Atmel selbst läuft ein speziell 
umgeschriebener und abgespeckter Tcl-Interpreter (natürlich mit 
Verschlüsselung), der sich seine Befehle dann aus dem Flash holt.

Damit kann man dann schon richtig was machen :-)

Christoph

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Ach, was ich noch vergessen hatte: zumindest beim 8MBit-Chip gab es 
einen Bug im "Chip erase command" - den kann man aber entsprechend durch 
Seiten- oder Block-Operationen ersetzen.

Christoph

von Walker (Gast)


Lesenswert?

Hallo Christoph,

könntest du mir bitte dein Programmcode zeigen? Wie kann ich z.B. 
Variablenwerte in diesen Speicher ablegen und wieder auslesen?

Gib bitte ein Beispiel.

Z.B. möchte ich 100 Integer Werte abspeichern. Und später auslesen.
Wie gehe ich vor?

DANKE

von 6636 (Gast)


Lesenswert?

Steht doch alles im datenblatt.

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Walker wrote:
> Hallo Christoph,
>
> könntest du mir bitte dein Programmcode zeigen?

Das kann ich leider nicht, da der mir nicht alleine gehört.
Aber ich denke, hier wird es genug Leute geben, die den Quellcode 
veröffentlichen können.

> Wie kann ich z.B.
> Variablenwerte in diesen Speicher ablegen und wieder auslesen?
>
> Gib bitte ein Beispiel.
>
> Z.B. möchte ich 100 Integer Werte abspeichern. Und später auslesen.
> Wie gehe ich vor?

Das ist wirklich nicht schwer :-)

Diese Speicher sind in Seiten zu je 256 (bzw. 264) Bytes eingeteilt. 
Diese lassen sich über zwei Puffer beschreiben. Du füllst also zuerst 
einen Puffer mit Deinen Werten und schreibst diesen dann z.B. mit 0x83 
("Buffer to Main Memory Page Program with Built-In Erase") auf die 
gewünschte Seite.
Dann fragst Du zyklisch das Statusregister des Chips ab, bis die 
Operation beendet ist - fertig.

Lesen ist noch viel einfacher: Du kannst mit einem Startbefehl + Adresse 
ab dieser kontinuierlich auslesen (bis in alle Ewigkeit) - dazu muss man 
einfach nur Dummy-Bytes über die SPI reinschieben - raus kommen dann die 
Daten in sequentieller Reihenfolge. Der Befehl nennt sich "Continuous 
Array Read".

Die Ansteuerung der SPI selbst ist extrem einfach und steht in jedem 
AVR-Datenblatt - sogar mit C-Code.

Viel Erfolg - und bei Fragen: fragen! :-)

Christoph

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Ach, wieder etwas vergessen >:-)

Es gibt von Atmel eine Beispielschaltung mit einem AVR+AT45 für ein 
digitales Diktiergerät:

AVR335 - Digital Sound Recorder

Da hast Du dann schon die Schaltung :-)

Christoph

von Roober (Gast)


Lesenswert?

Danke sehr Christoph! Ich werde mich jetzt schlau machen :) Eine Frage 
habe ich noch. Es steht im Datenblatt, dass es 100000 mal beschreibbar 
ist. Wenn ich diesen DataFlash auf meine Platine drauflöte und 100000 
mal drauf schreibe, dann muss ich den DataFlash durch einen neuen 
ersetzen?

100000 mal ist nicht so viel, wenn man im Programm eine Schleife hat die 
dauernd Daten schreibt und liest..

von Falk B. (falk)


Lesenswert?

@ Roober (Gast)

>ist. Wenn ich diesen DataFlash auf meine Platine drauflöte und 100000
>mal drauf schreibe, dann muss ich den DataFlash durch einen neuen
>ersetzen?

Kann passieren.

>100000 mal ist nicht so viel, wenn man im Programm eine Schleife hat die
>dauernd Daten schreibt und liest..

Das macht man ja auch nicht so! Solche Daten gehören ins RAM! Ins Flash 
wird nur selten geschrieben, z.B. kurz vor einem Spannungsausfall etc.

MFG
Falk

von Roober (Gast)


Lesenswert?

SRAM reicht mir nicht aus. Es sind paar MB von Daten.

von Uwe B. (boerge) Benutzerseite


Lesenswert?

MoinMoin,

> Ich habe mir damit eine Plattform gebaut, die ich per Skriptsprache
> programmieren kann und auf der ich dann natürlich richtig viel
> Programmspeicher habe. Im Atmel selbst läuft ein speziell
> umgeschriebener und abgespeckter Tcl-Interpreter (natürlich mit
> Verschlüsselung), der sich seine Befehle dann aus dem Flash holt.
>
ähmmm, als Tcl-Freak bin ich gearde hellhörig geworden...!!! Habe ich es 
richtig verstanden, dass es einen Tcl-Interpreter für AVRs gibt, den ich 
zur Laufzeit mit Scripts füttern kann?

Wo finde ich das Zeugs???

Grüße Uwe

von Falk B. (falk)


Lesenswert?

@ Roober (Gast)

>SRAM reicht mir nicht aus. Es sind paar MB von Daten.

Dann ist Flash der falsche Speicher. Und der AVR der falsche Prozessor. 
Nimm einen 16/32 Bit (AVR32, ARM, whatever), dort kannst du ordentlich 
(S)DRAM anschliessen.

MFG
Falk

von Roober (Gast)


Lesenswert?

Und was ist mit der SD-Karte oder MMC? Würde das gehen?

von Falk B. (falk)


Lesenswert?

@ Roober (Gast)

>Und was ist mit der SD-Karte oder MMC? Würde das gehen?

Da ist auch Flash drin, den kann man auch nicht dauernd beschreiben. 
Auch wenn die Controller schon schlau sind, und die Schreibzugriffe gut 
verteilen, ein Ersatz für RAM ist es nicht.
Was willst du denn machen?

MFG
Falk

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Uwe Berger wrote:
> MoinMoin,
>
>> Ich habe mir damit eine Plattform gebaut, die ich per Skriptsprache
>> programmieren kann und auf der ich dann natürlich richtig viel
>> Programmspeicher habe. Im Atmel selbst läuft ein speziell
>> umgeschriebener und abgespeckter Tcl-Interpreter (natürlich mit
>> Verschlüsselung), der sich seine Befehle dann aus dem Flash holt.
>>
> ähmmm, als Tcl-Freak bin ich gearde hellhörig geworden...!!! Habe ich es
> richtig verstanden, dass es einen Tcl-Interpreter für AVRs gibt, den ich
> zur Laufzeit mit Scripts füttern kann?

Ja, gibt es - allerdings nur eine abgespeckte Version mit nicht allen 
Befehlen. Dateioperationen etc. kann man direkt rausschmeißen, dafür 
habe ich dann Skriptbefehle für das Setzen der Register usw. etc. 
geschrieben.

Im Prinzip kann ich je nach Anwendung ursprüngliche Befehle weglassen 
oder eincompilieren - sozusagen ein maßgeschneiderter Tcl-Interpreter 
für genau diese Anwendung.

> Wo finde ich das Zeugs???

In obiger Form kenne ich es nur von mir.

Es gab mal ein paar Projekte (TinyTcl meine ich), die das auch gemacht 
haben. Googlen sollte Dir da weiterhelfen.

Ich habe dazu ziemlich viel des originalen Codes umgeschrieben - da 
stecken fast zwei Monate Arbeit drin, aber die sichern mir jetzt 
Vorsprung gegenüber Wettbewerbern. Deswegen werde ich diesen Code nicht 
freigeben. Ich denke, das ist verständlich.

Es macht aber jedenfalls Spaß AVRs (und natürlich auch andere) in Tcl zu 
programmieren :-)

Christoph

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.