Hallo. Ich programmiere zur Zeit einen ATMega128 und muss nun wohl mit dem EEPROM arbeiten. Ich verstehe den EEPROM aber nicht so ganz. Also ich habe sichere 100.000 Zugriffe pro Byte wie ich das verstanden habe. Der ATMega128 hat 4KB, also 1024 * 4, also 4096 Bytes EEPROM. Gesamt kann ich nun also 4096 * 100.000 den EEPROM beschreiben. Wenn ich also die Schreibzyklen zähle kann ich nach jedem 1024 * 100.000 Schreibzyklus die Adresse ändern. Aber wieviel passt da nun rein? Ein Byte besteht aus 8 Bits... Ok. Gehe ich als nun richtig der Annahme, dass... Wenn ich ein Bitmuster nutze, 1 für an. 0 für aus kann ich als in einem Byte z.b. 8 Port Zustände speichern. Z.b. 11111111 wären alle ports an. 00001111 wären die ersten 4 aus, die ersten 4 an usw. Verstehe ich das richtig? Das könnte man auch z.b mit ganzzahligen Temperaturen machen und wenn z.B. nur positive Werte dann 4 Temperaturen im Bereich von 0-99Grad z.b. 20349014 also (20)(34)(90)(14). Ist das korrekt!? Wenn man dies dann z.b. jede Std speichert und nach sagen wir 1000 Schreibzyklen auf den nächsten Adressbereich geht könnte man das ganze somit 1000 mal 1 Byte * 100.000 Zyklen * 4 also 4.000.000.000. Jede Std macht also 24 mal am Tag. Das widerrum heisst also 4.000.000.000 / 8760 (24 * 365) also 456.621 Jahre würde man nun sich diese Daten speichern. Habe ich das richtig verstanden!? Bei 2 Bitmustern wären es immernoch 228.310,5 Jahre. Wieviel würde man dann in 1 Byte max an Daten bekommen!? Also ein A... wieviel Byte hat ein einzelner Buchstabe? Ist vielleicht eine doofe Frage... Aber ich verstehe das nicht so ganz... Wäre nett wenn mir das jemand beantworten könnte. Nadine
Nadine schrieb: > Das könnte man auch z.b mit ganzzahligen Temperaturen machen und wenn > z.B. nur positive Werte dann 4 Temperaturen im Bereich von 0-99Grad z.b. > 20349014 also (20)(34)(90)(14). > > Ist das korrekt!? > > Wenn man dies dann z.b. jede Std speichert und nach sagen wir 1000 > Schreibzyklen auf den nächsten Adressbereich geht könnte man das ganze > somit > > 1000 mal 1 Byte * 100.000 Zyklen * 4 also 4.000.000.000. Bei 4 Bytes die du schrieben willst ist die Rechnung: 1024 Bytes / 4 Bytes = 256 Frames á 4 bytes 256 Frames * 100.000 Zyklen = 25.600.000 mögliche Datenablagen (theoretisch) In der Praxis scheitert es eher daran, dass du sicher feststellen müsstest (auch nach einen Controller Reset), welche EEPROM Zellen schon wie oft beschrieben wurden und wo gerade die letzten Daten abgelegt wurden... Günstiger ist es eine Art Level Wearing zu implementieren, d.h. dass die Schreibvorgänge auf alle Zellen gleichmäßig verteilt werden (https://en.wikipedia.org/wiki/Wear_leveling) Hängst du hier noch eine Markierung hintendran, dann kannst du bei einem Controller Neustart diese gezielt wieder suchen und das Schreiben dort fortsetzen
Reiner Gast schrieb: > Bei 4 Bytes die du schrieben willst ist die Rechnung: Diese Spekuliererei mit den Schreibzyklen tut man nicht. Man speichert Daten im RAM und schreibt sie erst am Ende einer "Session" ins EEPROM. So wird es z.B. bei Kilometerzählern in Kraftfahrzeugen gemacht. Ausserdem gibt es externe EEPROMs für SPI oder I2C die können weitaus mehr Schreibzyklen (datenhaltig aushalten). Und die sind so gross dass man sogar mit den vielen Schreibzyklen spekulieren kann ....
Reiner Gast schrieb: > Bei 4 Bytes die du schrieben willst ist die Rechnung: > 1024 Bytes / 4 Bytes = 256 Frames á 4 bytes > 256 Frames * 100.000 Zyklen = 25.600.000 mögliche Datenablagen > (theoretisch) Wie kommst du denn jetzt zu den 4 Bytes? Und was sind das für Frames? Also könnte man demnach 4 Temperaturen im Bereich von 0-99 Grad 25.600.000 mal (Std) SICHER speichern. Was demnach theoretisch dann 2922 Jahren entsprechen würde.
Hallo Nadine, mit Frames meint er bestimmt die Page in dass das gesamte EEprom aufgeteilt ist. Wie groß die sind steht im Datenblatt.
Nadine schrieb: > Wie kommst du denn jetzt zu den 4 Bytes? Und was sind das für Frames? Du schriebst, dass du 4 Temperatur Werte (also vier Bytes) gleichzeitig Schreiben möchtest. D.h. du schreibst einen Datenframe (oder auch Struct) von vier Bytes Größe und dementsprechend auch vier Speicherzellen gleichzeitig im EEPROM. D.h. die maximalen möglichen Schreibvorgänge für die komplette Datenstruktur auf das gesamte EEPROM reduziert sich entsprechend um den Faktor vier.
Nadine schrieb: > Wieviel würde man dann in 1 Byte max an Daten bekommen!? Also ein A... > wieviel Byte hat ein einzelner Buchstabe? 1 Byte sind 8 bit, also 8x '0'/Aus/False/Nein oder '1'/Ein/True/Ja. Mehr nicht. 1 Byte kann somite 256 unterschiedliche Werte darstellen. Ein 'A' belegt im Normallfall 1 Byte und zwar mit dem Bitmuster 01000001, oder Dezimalwert 65. Die Ziffer '0' (quasi als Buchstabe) belegt genauso 1 Byte, mit dem Bitmuster 00110000, oder Dezimalwert 48. Die Zahl 0, hat natürlich das Bitmuster 00000000, oder Dezimalwert 0.
Eric B. schrieb: > Nadine schrieb: >> Wieviel würde man dann in 1 Byte max an Daten bekommen!? Also ein A... >> wieviel Byte hat ein einzelner Buchstabe? > > 1 Byte sind 8 bit, also 8x '0'/Aus/False/Nein oder '1'/Ein/True/Ja. Mehr > nicht. > 1 Byte kann somite 256 unterschiedliche Werte darstellen. > > Ein 'A' belegt im Normallfall 1 Byte und zwar mit dem Bitmuster > 01000001, oder Dezimalwert 65. > > Die Ziffer '0' (quasi als Buchstabe) belegt genauso 1 Byte, mit dem > Bitmuster 00110000, oder Dezimalwert 48. Die Zahl 0, hat natürlich das > Bitmuster 00000000, oder Dezimalwert 0. Super danke..... So habe ich das jetzt verstanden :) Vielen vielen Dank.... Reiner Gast schrieb: > Du schriebst, dass du 4 Temperatur Werte (also vier Bytes) gleichzeitig > Schreiben möchtest. D.h. du schreibst einen Datenframe (oder auch > Struct) von vier Bytes Größe und dementsprechend auch vier > Speicherzellen gleichzeitig im EEPROM. D.h. die maximalen möglichen > Schreibvorgänge für die komplette Datenstruktur auf das gesamte EEPROM > reduziert sich entsprechend um den Faktor vier. Ah ok... Also 0-99 ist jeweils 1 Byte... mal 4 Temperaturen.... Logisch.. Danke auch dafür :) Falk B. schrieb: > https://www.mikrocontroller.net/articles/Speicher#EEPROM-Schreibzugriffe_minimieren > Ja... Wenn man vielleicht vorher dran gedacht hätte... Nun steht das ganze... Pcb ist fertig.... Da ist kein Umbau mehr möglich... Also muss jetzt möglichst effizient der eeprom mißbraucht werden....
Nadine schrieb: > Was demnach theoretisch dann 2922 > Jahren entsprechen würde. Ob das jetzt 456000, 228000 oder nur 2922 Jahre sind halte ich für nicht so entscheidend, obwohl ich dir natürlich ein langes Leben wünsche. Aber vielleicht bist du diesbezüglich ja optimistischer als ich. Meine Einwände liegen woanders: egal wo man Daten speichert sollte man sie gegen Fehler absichern, schon deshalb weil ja beim Schreiben was schief gehen kann. Man muss dazu korrekte von beschädigten Daten unterscheiden können, z.B. mit einer Prüfsumme oder mit CRC. Leider kann man trotzdem nicht voraussagen, wann zuviele Speicherzyklen abgelaufen sind, weil selbst dann wahrscheinlich das Schreiben im Moment erfolgreich ist, die Daten aber später verloren gehen. Ich wäre daher auch dafür, die Daten gleichmässig über den ganzen Speicher zu verteilen, aber so trivial ist das auch nicht weil man sich dabei ja merken muss wo der letzte Speicherplatz war. Wenn dann bei der Datenprüfung ein Fehler auftritt, muss man halt den Chip nach 1000 Jahren mal austauschen. Das wird dir niemand ankreiden. Georg
Ich würde mir bei solchen Zeiträumen eher über folgendes Limit gedanken machen :-) Data retention: 20 years at 85°C/100 years at 25°C(
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.