mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM + ATmega Auswahlhilfe


Autor: Sirko Pöhlmann (poehli)
Datum:

Bewertung
0 lesenswert
nicht 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ö

Autor: A. F. (artur-f) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 
;)

Autor: jack (Gast)
Datum:

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

Und was soll das den bedeuten??

Autor: Sirko Pöhlmann (poehli)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. F. (artur-f) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sirko Pöhlmann (poehli)
Datum:

Bewertung
0 lesenswert
nicht 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ö

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sirko Pöhlmann (poehli)
Datum:

Bewertung
0 lesenswert
nicht 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ö

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.