Forum: Mikrocontroller und Digitale Elektronik EEPROM + ATmega Auswahlhilfe


von Sirko P. (poehli)


Lesenswert?

Hallo,

ich möchte ein Messwertkurve digital ablegen. Das heißt, zu 1000 
möglichen Messwerten benötige ich einen entsprechenden Datenwert. Dieser 
liegt zwischen 0 und 5000.
Nun reicht dafür leider der interen Speicher eines Atmega32 nicht. Ich 
habe keine Erfahrung mit EEProms, so wie ich das sehe benötige ich 
optimalerweise

16k ( 1024x16)

Dann können meine 1000 möglichen Messwerte die zwischen 0,0 und 100,0 
liegen die Adresse bilden und ich habe 16bit für meinen Datenwert.

Stimmt das so? Ist das herangehen ok?

Dann hätte ich gerne Serielle oder SPI / I²C Ansteuerung.

Und 5V Versorgung.

Bei Reichelt gibts den ST 93C86 BN , bin ich mit dem richtig?

 Danke, Pö

von A. F. (artur-f) Benutzerseite


Lesenswert?

Nimm lieber einen I2C FRAM, da man die EEPROMs nur begrenzt oft 
beschreiben kann. Hier z.B.: FM24CL64-G  (64Kbit). Außerdem ist beim 
EEPROM Page-Write Mode nicht unbedingt eine angenehme Sache. Beim FRAM 
kannst drauf los schreiben Byte für Byte.

von jack (Gast)


Lesenswert?

>Nimm lieber einen I2C FRAM, da man die EEPROMs nur begrenzt oft
>beschreiben kann.

So ein Käse. 1 Million Schreibzyklen sollten wohl reichen.

von Hmm... (Gast)


Lesenswert?

> ich möchte ein Messwertkurve digital ablegen. Das heißt, zu 1000
> möglichen Messwerten benötige ich einen entsprechenden Datenwert. Dieser
> liegt zwischen 0 und 5000.

Also möchtest du 1000 Messwerte á 16 Bit in einen nichtflüchtigem 
Speicher ablegen. Damit haben wir einen Speicherbedarf von 16000 Bytes 
oder etwas weniger als 16kB.

> Stimmt das so? Ist das herangehen ok?

Kommt drauf an, wie schnell die Messwerte herein gepurzelt kommen. So 
ein EEPROM benötigt schon seine Zeit um einen Wert weg zu schreiben. 10 
Werte pro Sekunde sind locker drin, 3000 eher unmöglich.

> Dann hätte ich gerne Serielle oder SPI / I²C Ansteuerung.
> Und 5V Versorgung.

Da gibt es viele, die für dich passen.

> Bei Reichelt gibts den ST 93C86 BN , bin ich mit dem richtig?

Naja, die EEPROM-Speichergrößen sind meistens in Bits angegeben. Deiner 
ist mit 2kx8, also 2 kB bei Reichelt angegeben.

Schau mal nach den 24C512 (=64kByte) oder 24C256(=32kByte) oder 
24C128(=16kByte). Das sind I2C EEPROMs in die deine Daten passen.

Und dran denken das EEPROMS eine begrenzte Anzahl an Schreibzyklen 
haben. Eine Million Schreibzyklen sind wenn man mehrfach pro Minute auf 
die selbe Speicherzelle schreibt doch schneller erreicht als man denkt 
;)

von jack (Gast)


Lesenswert?

>Außerdem ist beim
>EEPROM Page-Write Mode nicht unbedingt eine angenehme Sache.

Und was soll das den bedeuten??

von Sirko P. (poehli)


Lesenswert?

Es ist nicht nötig den oft zu beschreiben, normalerweise reicht sogar 
einmalig :-).
Allerdings wäre ein Modell schön was gut an den Hardware - SPI passt. So 
wie ich das sehe müßte ich für diesen Microwire Bus das ganze Timing in 
Software realisieren.

Schreiben ist ein guter Stichpunkt. Ich frag mich gerade wie ich es 
eigentlich einrichte den EEProm zu beschreiben. Wie kommt die Tabelle 
aus Excel in den EEprom.....? Muss ich da ein extra Programm schreiben, 
die 1000 Datenwerte als .dw in Assembler und dann den EEProm 
schreiben...? Boah...

von jack (Gast)


Lesenswert?

>Naja, die EEPROM-Speichergrößen sind meistens in Bits angegeben. Deiner
>ist mit 2kx8, also 2 kB bei Reichelt angegeben.

Schau ins Datenblatt. Dieses Eeprom kann über den ORG-Eingang als
16bit Speicher organisiert werden.

von Hmm... (Gast)


Lesenswert?

> Nimm lieber einen I2C FRAM, da man die EEPROMs nur begrenzt oft
> beschreiben kann.

Ok, rechnen wir mal nach:

1 Schreibvorgang pro Minute macht am Tag 60*24=1440 Schreibzyklen. Dann 
ist die Million nach 694 Tagen oder knapp 2 Jahren erreicht. Allerdings 
auch nur, wenn man immer auf die selbe Zelle hämmert. Wenn man die

Schreibzugriffe auf alle 16k Zellen gleichmässig verteilt wird der 
EEPROM dich sicher überleben ;)


Wenn allerdings dauerhaft(!) 2x pro Sekunde auf das EEPROM geschrieben 
wird haben wir 24*60*60*2=172800 Schreibzugriffe am Tag. Nach knapp 6 
Tagen sind die Anzahl der garantierten(!) Schreibzyklen erreicht. Kaputt 
geht die Zelle in einem heutigem EEPROM allerdings dann wahrscheinlich 
noch lange nicht, es wird halt nur nicht mehr vom Hersteller garantiert.

Deshalb sollte man halt beim SW-Entwurf darauf achten nicht über lange 
Zeiträum immer auf die selbe Zelle zu schreiben. Wenn man das beachtet 
ist ein EEPROM ein sehr preiswerter und bequemer Weg. Ausserdem sind das 
Standard-Bauteile die es seit langem von mehreren Herstellern gibt, man 
muss also nicht damit rechen das nächstes Jahr keine 24Cxxx mehr 
hergestellt werden.

von Hmm... (Gast)


Lesenswert?

> Schreiben ist ein guter Stichpunkt. Ich frag mich gerade wie ich es
> eigentlich einrichte den EEProm zu beschreiben. Wie kommt die Tabelle
> aus Excel in den EEprom.....? Muss ich da ein extra Programm schreiben,
> die 1000 Datenwerte als .dw in Assembler und dann den EEProm
> schreiben...? Boah..

Wenn du eh für jeden Schreibvorgang einen Assembler+Programmer bemühen 
willst, dann pack es lieber als Konstanten in den Flash (falls noch 
frei).

Der Vorteil des EEPROMS ist es ja gerade, dass du auch im Feld neue 
Daten mit dem Mikrocontroller hineinschreiben kannst. Wenn du noch eine 
RS232-Schnittstelle in deinem System hast, kannst du ja einen 
"Service-Modus" in deiner Software vorsehen, in dem du die Daten z.B. 
per XModem empfangen kannst. Das kann dann von Windows aus sogar mit 
Bordmitteln (HyperTerminal) versendet werden.

von A. F. (artur-f) Benutzerseite


Lesenswert?

>So ein Käse. 1 Million Schreibzyklen sollten wohl reichen.
Mein kSüßer, stand was davon in seinem Beitrag? -> NÖ!

> 07.01.2009 12:26

Von da wird einem erst klar, dass es sich anscheinend um 
Kalibrationsdaten o.ä. handelt.

>>Außerdem ist beim
>>EEPROM Page-Write Mode nicht unbedingt eine angenehme Sache.

>Und was soll das den bedeuten??
Bedeutet, dass man die Werte nicht Byte für Byte runterbratzen kann. Je 
nach Anwendung, kann es störend sein, da zw. Pages gewartet werden muss.

von jack (Gast)


Lesenswert?

>Bedeutet, dass man die Werte nicht Byte für Byte runterbratzen kann. Je
>nach Anwendung, kann es störend sein, da zw. Pages gewartet werden muss.

Das ist nichts anderes als Gefasel, schau ins DB des ST 93C86 BN.

von Sirko P. (poehli)


Lesenswert?

Hallo,

erst mal vielen Dank für die zahlreichen Antworten, und bitte seit lieb 
und streitet nicht :-).

Ähm, ja, es handelt sich im Prinzip um eine Art Kalibrationsdaten. einem 
Transmissionswert muss ein Konzentrationswert zugeordnet werden. Das 
könnte man auch ausrechnen, allerdings ist da ne Menge mul, div, und e 
Funktion im Spiel. Daher ist es im Endeffekt einfacher aller möglichen 
Ergebnisse sauber in Excel zu ermitteln und die Daten als 
Zuordnungstabelle abzulegen.

Daher interessieren mich Schreibgeschwindigkeiten und Häufigkeiten 
überhaupt nicht. Im schlimmsten Fall wird der Speicher 10x beschrieben.

Ein Lesezugriff 1x / Sekunde ist angedacht, es gibt keine zeitkritischen 
Vorgänge. Aus der Ecke auch alles problemlos.

Momentan fasziniert mich die Option "pack es als Kontanten in den 
Flash". Weil das kostet nix extra und ich bräuchte keine neue Platine..,
Hm. Wenn ich den Messbereich einschränke könnte ich mit weniger als 16k 
für die Datenwerte auskommen. Auf jeden Fall bräuchte ich dann einen 
Atmega mit mindestens 16k Flash. Da steht mein Atmega32 doch ganz gut 
da. Muss ich mal nachsehen wie die groß mein Programm ist.

Erst mal Danke, ich meld mich...
Pö

von Falk B. (falk)


Lesenswert?

@Sirko Pöhlmann (poehli)

>Momentan fasziniert mich die Option "pack es als Kontanten in den
>Flash".

Wäre sinnvoll.

> Weil das kostet nix extra und ich bräuchte keine neue Platine..,
>Hm. Wenn ich den Messbereich einschränke könnte ich mit weniger als 16k

Was denn? 16 kBit oder 16 kByte?

Wenn du 1000 Werte a 16 Bit hast sind das 16kBit=2kByte!!

>für die Datenwerte auskommen. Auf jeden Fall bräuchte ich dann einen
>Atmega mit mindestens 16k Flash.

Klär erstmal deine Einheit!

MfG
Falk

von Hmm... (Gast)


Lesenswert?

> > Weil das kostet nix extra und ich bräuchte keine neue Platine..,
> >Hm. Wenn ich den Messbereich einschränke könnte ich mit weniger als 16k
>
> Was denn? 16 kBit oder 16 kByte?
>
> Wenn du 1000 Werte a 16 Bit hast sind das 16kBit=2kByte!!

Ähm..sorry, da hab ich vorhin einen kleinen Verdreher drin gehabt. 1000 
16-Bit (=2 Byte) Werte ergeben natürlich (wie von Falk schon gesagt) 
2kByte.


Und die können, wenn sie denn wirklich konstant sind und niemals nicht 
geändert werdem, am besten im Flash als Konstante im C-Programm angelegt 
werden. Und ein Tool was aus CSV-Dateien von Excel compilierbaren C-Code 
macht sollte auch schnell geschrieben sein.

von Sirko P. (poehli)


Lesenswert?

vielen Dank für die Hilfe, insbesondere auch an Falk. Tatsächlich hab 
ich das mit den Einheiten etwas verpatzt. Das ganze hat als adressierter 
Table im Flash ganz ausgezeichnet funktioniert. Der Zugriff über 
Z-pointer und  lpm ist da ja ein Klacks!

Pö

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.