Forum: Mikrocontroller und Digitale Elektronik EEPROM als Ringspeicher


von Manos (Gast)


Lesenswert?

Hallo erstmal,

ich hatte hier und da schon mal gelesen, dass man - zur Erhöhung der
Haltbarkeit der einzelnen Zellen - die Daten bei kontinuierlicher
Erfassung auch als Ringspeicher auslegen kann.

Jetzt stellt sich für mich allerdings die Frage: Wo speicher ich den
aktuellen Pointer damit dieser im Falle eines Stromausfalls nicht
verloren geht...

Ein Beispiel wäre für mich eine Uhr (ohne Pufferung), die auch nach
einem Reset aus egal welchem Grund an der Stelle weiterläuft an der sie
aufgehört hat (vergleichbar einer Analoguhr). Bei einer Sicherung der
Zeit im Sekundentakt wären nach 28h die 100.000 Schreibzyklen bei einer
Zelle erreicht.

Wie könnte man sowas am sinnvollsten reralisieren?

Eine Überlegung war, die ersten 2Byte als Index zu nehmen, welche dann
auf einen Datenblock bestehend auch 2Byte Schreibcounter+Nutzdaten
verweisen. Damit würde sich bei 65535 x 65535 eine Haltbarkeit (wenn
das EEPROM groß genug ist - also eher extern) von 136 Jahren - was dann
reichen sollte :)

Gäb es sinnvollere Methoden sowas zu machen?

von Christoph Kessler (Gast)


Lesenswert?

Wenn in den Daten keine Null vorkommen kann, was bei der Uhrzeit der
Fall ist, könnte man den ganzen Speicher einmalig löschen, und wieder
einzeln füllen, bis das Ende erreicht ist. Ich meine, der Löschvorgnag
ist die eignetlich stressende Operation, das wäre damit selten. Wenn
ein "Blank" gleich $FF ist, wie in Eproms, wäre das natürlich
sinnvoller.

von papa_of_t (Gast)


Lesenswert?

Speichere doch Deine Daten im Ram, und erst bei Abschaltung /
Stromausfall speicherst Du sie dann im EEprom. Dazu kannst Du die
Versorgungsspannung z.B. über einen A/D messen und die Versorgung des
uCs z.B. mit einem GoldCap - Kondensator puffern. Das Schreiben auf
EEprom geht ja meist sehr schnell..

Alternativ kannst Du den EEprom mti Startwerten voreinstellen (z.B. Du
schreibst ihn mit FF voll) und vermeidest diesen Wert in Deinem
Programm - dann mußt Du nach dem Reset nur soweit lesen bis "FF"
kommt (davor steht Dein letzter Wert) und den gesamten Baustein einmal
löschen wenn die letzte Zelle erreicht ist.

von ADrei (Gast)


Lesenswert?

Vorschlag:

Die Speisespannung überwachen (nicht die vermutliche stabilisierte
Betriebsspannung) und einen Interrupt auslösen, wenn diese einen
minimalen Wert unterschreitet. Jetzt sofort den Poniter im Eprom
ablegen. Für diesen Vorgang reichen ein paar 100uF als Stützkondensator
aus. Das würde die Anzahl der Schreibzyklen deutlich minimieren.

Gruß
Alex

von Torsten (Gast)


Lesenswert?

ich hab immer nach den aktuellen Daten eine Endekennung reingeschrieben.
Beim nächsten durchlauf einfach diese Endekennung ersetzt und eine neue
angehängt. Incl. der Prüfung ob er am Speicherende angekommen ist.

Läuft schon seit einiger Zeit sehr gut!

Gruss Torsten

von Manos (Gast)


Lesenswert?

Wie kompakt bekommt man eigentlich die Zeitinformation gespeichert?
Ich komme auf 32Bit wenn ich nur bis zum 31.12.2063 berücksichtige
(älter werde ich sowieso nicht ;) )

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.