Forum: Mikrocontroller und Digitale Elektronik Was nehmen wenn ein EEPROM nicht genug Schreibzyklen hat?


von Noob A. (strippenzieher)


Lesenswert?

Hallo,

ich hab mich gefragt welche Speichermethode man nehmen kann wenn man 
einen sekundengenauen Betriebsdauerzähler realisieren will.
Bei der Methode "Zähler im RAM und bei Spannung weg ab ins EEPROM" bin 
ich dann auch recht schnell gelandet.
Es blieb aber irgendwie die Frage im Hirn ob es keine andere Technik 
gibt die für so eine Aufgabe verwendet werden kann.
RTC mit Goldcap?
Andere Speichertechnologie?
???

von Peter D. (peda)


Lesenswert?


: Bearbeitet durch User
von yakman (Gast)


Lesenswert?

FRAM wurde schon genannt und ist Standard.

EERAM ist eine Alternative:
https://www.microchip.com/en-us/products/memory/serial-eeram

Das ist eine Kombination aus EEPROM und SRAM.

von ??? (Gast)


Lesenswert?

größerer EEPROM und nur wenige Daten an immer neue Adresse schreiben ud 
erst löschen wenn er voll ist...

von Noob A. (strippenzieher)


Lesenswert?

selber noch was gefunden:

NVRAM https://www.st.com/en/memories/nvram.html

von yakman (Gast)


Lesenswert?

Bob A. schrieb:
> selber noch was gefunden:
>
> NVRAM https://www.st.com/en/memories/nvram.html

Wenn ich mich nicht täusche braucht das eine Batterie?

Das ist heutzutage für solche Dinge eigentlich nicht mehr nötig. FRAM 
und EERAM  brauchen das nicht.
Batterie ist immer Pfui, die kann leer werden und auslaufen.

von Noob A. (strippenzieher)


Lesenswert?

??? schrieb:
> größerer EEPROM und nur wenige Daten an immer neue Adresse schreiben ud
> erst löschen wenn er voll ist...

War auch ein Gedanke, aber mich hat dann die Größe "cycles per device" 
eiskalt überrascht! 
(https://www.st.com/en/memories/standard-serial-eeprom.html)
100 millionen sind auch schnell rum...
Nimmt man dazu dass die 4 Millionen nicht pro Zelle sondern pro 4er 
Block gelten, dann wirds doch recht schnell eng

von Noob A. (strippenzieher)


Lesenswert?

yakman schrieb:
> Bob A. schrieb:
>> selber noch was gefunden:
>>
>> NVRAM https://www.st.com/en/memories/nvram.html
>
> Wenn ich mich nicht täusche braucht das eine Batterie?
>
> Das ist heutzutage für solche Dinge eigentlich nicht mehr nötig. FRAM
> und EERAM  brauchen das nicht.
> Batterie ist immer Pfui, die kann leer werden und auslaufen.

Die haben integrierte Lithium Knopfzellen
Daher auch ziemlich klobig

von Andreas B. (bitverdreher)


Lesenswert?

Bob A. schrieb:
> ich hab mich gefragt welche Speichermethode man nehmen kann wenn man
> einen sekundengenauen Betriebsdauerzähler realisieren will.

Man zählt die Betriebssekunden im RAM und schreibt erst auf das EEprom 
wenn ausgeschaltet wird.
Dazu muß die Betriebsspannung überwacht und genug gepuffert werden, 
damit es dann zum Schreiben noch reicht.

von Teo D. (teoderix)


Lesenswert?

Bob A. schrieb:
> ich hab mich gefragt welche Speichermethode man nehmen kann wenn man
> einen sekundengenauen Betriebsdauerzähler realisieren will.

Erst ins EEPROM schreiben, wenn der Strom ausfällt und

??? schrieb:
> immer neue Adresse schreiben

Das Taugt für 10Mio. bis über 1Mrd. Ausschaltvorgänge.....

von Noob A. (strippenzieher)


Lesenswert?

Andreas B. schrieb:
> Bob A. schrieb:
>> ich hab mich gefragt welche Speichermethode man nehmen kann wenn man
>> einen sekundengenauen Betriebsdauerzähler realisieren will.
>
> Man zählt die Betriebssekunden im RAM und schreibt erst auf das EEprom
> wenn ausgeschaltet wird.
> Dazu muß die Betriebsspannung überwacht und genug gepuffert werden,
> damit es dann zum Schreiben noch reicht.

Hallo Andreas,

Das ist mir relativ schnell auch klar geworden, ich hab mich danach nur 
gefragt ob es generell eine Technologie gibt die hierfür eingesetzt 
werden könnte.
Meine Fragestellung ist etwas holprig formuliert fällt mir gerade auf...

Aber es gab ja schon gute Stichworte zum weiterhangeln :)

von Fpgakuechle K. (Gast)


Lesenswert?

Bob A. schrieb:

> Nimmt man dazu dass die 4 Millionen nicht pro Zelle sondern pro 4er
> Block gelten, dann wirds doch recht schnell eng

Aber wenn man immer nur bei brown_out/shutdown schreibt (" ... Zähler im 
RAM und bei Spannung weg ab ins EEPROM ... ") sollte es doch dick 
reichen. Also 4 Mio mal abschalten auf 40 Jahre lebensdauer, wäre 
100kx/Jahr und damit ca. 300x/Tag als ca 12x/h abgeschaltet.

Hast du wirklich ein gerät das so oft ab und an- geschaltet wird?!

von Noob A. (strippenzieher)


Lesenswert?

Fpgakuechle K. schrieb:
> Hast du wirklich ein gerät das so oft ab und an- geschaltet wird?!

Nein, mich hat nur interessiert ob es Speicher gibt der sowas abkann..

von fchk (Gast)


Lesenswert?

Bob A. schrieb:
> RTC mit Goldcap?

Microchip 23LCV1024: SRAM mit separatem Eingang für Batterie
http://ww1.microchip.com/downloads/en/devicedoc/25156a.pdf

fchk

von Fpgakuechle K. (Gast)


Lesenswert?

Bob A. schrieb:
> Fpgakuechle K. schrieb:
>> Hast du wirklich ein gerät das so oft ab und an- geschaltet wird?!
>
> Nein, mich hat nur interessiert ob es Speicher gibt der sowas abkann..

Es gibt ie Marketing-Erfindung "EERAM":
https://www.microchip.com/wwwproducts/en/47L04

Das ist eine single-chip gebrauchsfertige RAM/EEPROM Kombi, die nur ins 
EEPROM schreibt wenn nötig.

Und die Anzahl der Schreibzyklen bei EEPROM ist auch 'nur' eine 
garantierte Minimalzahl wie beim Fabrikanten ausgemessen. Klar kann ein 
Hersteller bei Serienstart nicht die Chips wie gefordert Dauergetestet 
haben, wieviel tatsächlich geht.

Also bei nicht auf LowCost getrimmten Chips kann schon mal ein 
Mehrfaches als das spezifizierte drin sein. Vielleicht bauste auch 
mehrere EEPROM's ein und wechselst auf einen 'unverbrauchten' sobald der 
bisherige Schreib-/Lesehemmungen zeigt.

von Olaf (Gast)


Lesenswert?

> Nein, mich hat nur interessiert ob es Speicher gibt der sowas abkann..

Ja gibt es, heisst Fram.

Alles hier genannte mit Batterie ist megagrosse kacke. Ausser man ist 
kleiner Selbstbastler. Ueberlegt mal was eine Batterie euch fuer Freude 
bei Entsorgung und Versand macht.

Olaf

von Peter D. (peda)


Lesenswert?

Teo D. schrieb:
> Erst ins EEPROM schreiben, wenn der Strom ausfällt und

Von Dallas gibt es den DS89C450 (MCS-51 Derivat) mit Power Fail 
Interrupt. Der wird kurz vor dem Brownout getriggert und hat die höchte 
von 5 Prioritäten. d.h. kann alle anderen Interrupts unterbrechen.

Die AVRs haben leider nur ein Brown Out Reset.

von Franz H. (lundabor)


Lesenswert?

Nicht die Antwort auf Deine Frage, aber eine mögliche Lösung für Dein 
Problem wäre 
https://www.maximintegrated.com/en/products/analog/real-time-clocks/DS1682.html. 
Der kümmert sich um das Speichern bei Spannungsverlust selber 
(entsprechend beschaltet).

von Peter D. (peda)


Lesenswert?

P.S,:
Dallas heißt jetzt Maxim.

von yakman (Gast)


Lesenswert?

Peter D. schrieb:
> P.S,:
> Dallas heißt jetzt Maxim.

"Jetzt" ist lustig. Dallas wurde vor 20 (!!!!) Jahren aufglöst.

Ich bin immer wieder schockiert, auf welchem Stand die Leute hier im 
Forum teilweise sind!

"Ich nehm nur die neuen 8051 Microcontroller von Phillips und 
Beyschlag-Widerstände!"

von Olaf (Gast)


Lesenswert?

> Die AVRs haben leider nur ein Brown Out Reset.

Ich hab den Leuten schon vor 20Jahren erzaehlt das AVRs Murks sind
weil man da keine Interruptprioritaeten einstellen kann. Wollte
nur keiner hoeren. :-D

> "Ich nehm nur die neuen 8051 Microcontroller von Phillips und
> Beyschlag-Widerstände!"

Hier:

http://www.on-bright.com/cn/english/products_mcu.htm

Allerneueste chinesische MCS51. Demnaechst auch in deinem Mixer! :-D

Olaf

von Der Robs (Gast)


Lesenswert?

Peter D. schrieb:
> Die AVRs haben leider nur ein Brown Out Reset.

Stimmt so nicht. Die neue AVR-1/0 Serie hat auch einen 
VoltageLevelMonior, der auch bei beginnender Unterspannung einen Reset 
auslösen kann.

Ich habe aber mit folgender anderer Konfiguration gute Erfahrungen 
gemacht:
Vcc via Schottky-Diode und großem Kodensator auf VCC-Pin von  µC.

Zusätzlich Vcc (abgezweigt vor Schottky) auf Spannungsteiler auf 
internen Komparator. Anderen Eingang vom Komparator auf interne Band-Gap 
legen. Spannungsteiler so einstellen, daß beim Unterschreiten eines 
kritischen Wertes der Interrupt kommt, aber durch den großen Kondensator 
noch genug Zeit bleibt, sicher ins EEPROM zu schreiben.

Gruß

Robert

von Der Robs (Gast)


Lesenswert?

Peter D. schrieb:
> Die AVRs haben leider nur ein Brown Out Reset.

Stimmt so nicht. Die neue AVR-1/0 Serie hat auch einen 
VoltageLevelMonior, der auch bei beginnender Unterspannung einen 
Interrupt auslösen kann.

Ich habe aber mit folgender anderer Konfiguration gute Erfahrungen 
gemacht:
Vcc via Schottky-Diode und großem Kodensator auf VCC-Pin von  µC.

Zusätzlich Vcc (abgezweigt vor Schottky) auf Spannungsteiler auf 
internen Komparator. Anderen Eingang vom Komparator auf interne Band-Gap 
legen. Spannungsteiler so einstellen, daß beim Unterschreiten eines 
kritischen Wertes der Interrupt kommt, aber durch den großen Kondensator 
noch genug Zeit bleibt, sicher ins EEPROM zu schreiben.

Gruß

Robert

von Noob A. (strippenzieher)


Lesenswert?

Franz H. schrieb:
> Nicht die Antwort auf Deine Frage, aber eine mögliche Lösung für Dein
> Problem wäre
> https://www.maximintegrated.com/en/products/analog/real-time-clocks/DS1682.html.
> Der kümmert sich um das Speichern bei Spannungsverlust selber
> (entsprechend beschaltet).

Das sieht ja mal sehr interessant aus! Danke

von Andras H. (kyrk)


Lesenswert?

Grössere EEprom + Journaling system.

von Noob A. (strippenzieher)


Lesenswert?

Andras H. schrieb:
> Grössere EEprom + Journaling system.


Dann ist aber laut STM website 
(https://www.st.com/en/memories/standard-serial-eeprom.html) nach 100 
Millionen Zyklen auch Schluss...

bissel mehr wie 3 Jahre

von yakman (Gast)


Lesenswert?

Bob A. schrieb:
> Die haben integrierte Lithium Knopfzellen
> Daher auch ziemlich klobig

Nein, EERAM ha exakt eben keine Batterie!

Da ist nur ein externer Kondensator dran, dieser reicht gerade aus, um 
den SRAM-Inhalt ins EEPROM zu schreiben.
Mit etwa max. 100µF, das kann daher ein Tantal, Elko oder Kerko sein.

von Peter D. (peda)


Lesenswert?

Olaf schrieb:
> Ich hab den Leuten schon vor 20Jahren erzaehlt das AVRs Murks sind
> weil man da keine Interruptprioritaeten einstellen kann. Wollte
> nur keiner hoeren. :-D

Ich hatte das auch schon 1998 dem Haakon Skar gesagt, als die AVRs 
vorgestellt wurden.
Auch hatten die ersten AVRs nichtmal ein ordentliches Reset, sondern nur 
ein Zeitglied (RC-Reset). D.h. bei langsamen VCC-Anstieg oder 
VCC-Einbrüchen startete der PC irgendwo mittendrin. Wenigstens das haben 
sie korrigiert.

von (prx) A. K. (prx)


Lesenswert?

Bob A. schrieb:
> nach 100 Millionen Zyklen auch Schluss...

Findet man das auch in den Datasheets?

von Noob A. (strippenzieher)


Lesenswert?

yakman schrieb:
> Bob A. schrieb:
>> Die haben integrierte Lithium Knopfzellen
>> Daher auch ziemlich klobig
>
> Nein, EERAM ha exakt eben keine Batterie!
>
> Da ist nur ein externer Kondensator dran, dieser reicht gerade aus, um
> den SRAM-Inhalt ins EEPROM zu schreiben.
> Mit etwa max. 100µF, das kann daher ein Tantal, Elko oder Kerko sein.

da gings um die NVRAM von STM...

von Patrick C. (pcrom)


Lesenswert?

Bob A. schrieb:
> ich hab mich gefragt welche Speichermethode man nehmen kann wenn man
> einen sekundengenauen Betriebsdauerzähler realisieren will.
> Bei der Methode "Zähler im RAM und bei Spannung weg ab ins EEPROM" bin
> ich dann auch recht schnell gelandet.
> Es blieb aber irgendwie die Frage im Hirn ob es keine andere Technik
> gibt die für so eine Aufgabe verwendet werden kann.

Problem anfassen bei die ursache, also trigger machen bei Spannung weg.

Insbesonder wenn man eine loesung haette wobei man jede sekunde etwas 
wegschreibt zu eeprom/sd karte/anderes musz man darauf achten das power 
down nicht kommt gerade wenn man ans schreiben ist. Also einen guten 
definierten powerdown brauch man sowieso. Dann benutze dieser auch so 
effektiv wie moeglich.

Patrick aus Niederlaende.

von Noob A. (strippenzieher)


Lesenswert?

(prx) A. K. schrieb:
> Bob A. schrieb:
>> nach 100 Millionen Zyklen auch Schluss...
>
> Findet man das auch in den Datasheets?

Habe bisher nichts gefunden, nur ein AN wo dann aber von 1 Billion cyles 
per device die Rede ist (Seite 6)
https://www.st.com/resource/en/application_note/dm00158157-cycling-endurance-and-data-retention-of-high-density-eeprom-based-on-cmos-f8h-process-stmicroelectronics.pdf

von Fpgakuechle K. (Gast)


Lesenswert?

Bob A. schrieb:
> ??? schrieb:
>> größerer EEPROM und nur wenige Daten an immer neue Adresse schreiben ud
>> erst löschen wenn er voll ist...
>
> War auch ein Gedanke, aber mich hat dann die Größe "cycles per device"
> eiskalt überrascht!

Wenn es einen eiskalt erwischt, kann man ja mit kühlen Kopf drüber 
schauen, wie die Zahlen entstanden sind und was sie bedeuten. Das sind 
doch lediglich Garantiewerte für Worst Case szenarien.

Da lohnt es sich nachzufragen wie man die Lebensdauer verlängern (life 
time prolonging/extending) kann, indem man den Speicher im Optimum 
betreibt. Das kann ein bestimmter Temperatur -und auch Spannungsbereich 
sein.

Und natürlich kann man mit einer Prüfsumme Fehler entdecken mit einem 
Korrekturcode, -verfahren sogar partiellen Verlust entgegen wirken (wear 
leveling)

https://docs.tibbo.com/phm/eeprom_life

von Bauform B. (bauformb)


Lesenswert?

NOR-Flash. Zum Beispiel verträgt der IS25LP256E mindestens 100000 Zyklen 
und hat 32MB. Wenn man tatsächlich jede Sekunde einen 32-Bit-Zählerstand 
schreibt, verbraucht man ziemlich genau 4 Zyklen pro Jahr.
Die 32 Bit reichen für 136 Jahre, in der Zeit hat man 1/183 der 
erlaubten Schreibzyklen verbraucht. Aber kleinere NOR-Flash sind auch 
kaum billiger.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Bob A. schrieb:
> ich hab mich gefragt welche Speichermethode man nehmen kann wenn man
> einen sekundengenauen Betriebsdauerzähler realisieren will.
Die eigentliche (wenn für manchen auch provokante) Frage ist, ob man es 
"muss" oder aus an den Haaren herbeigezerrten Gründen nur "will"... 
;-)

Mit einer ehrlichen Antwort auf diese Frage haben sich schon viele 
Probleme in Luft aufgelöst.

Andreas B. schrieb:
> Man zählt die Betriebssekunden im RAM und schreibt erst auf das EEprom
> wenn ausgeschaltet wird.
So macht man das im richtigen Leben: eine "Millisekunden-USV" für die 
Zeit, die man braucht, um das EEPROM zu beschreiben. Und als "Fallback" 
kann man noch zusätzlich alle 5 Minuten mal schreiben, damit man bei 
einem anderweitigen Problemfall nicht zu viel "Zeit verliert".

: Bearbeitet durch Moderator
von heinz (Gast)


Lesenswert?

>Die 32 Bit reichen für 136 Jahre
Woher weis ich in welchen Zellen das aktuelle Datum steht?

von Noob A. (strippenzieher)


Lesenswert?

Lothar M. schrieb:
> Bob A. schrieb:
>> ich hab mich gefragt welche Speichermethode man nehmen kann wenn man
>> einen sekundengenauen Betriebsdauerzähler realisieren will.
> Die eigentliche (wenn für manchen auch provokante) Frage ist, ob man es
> "muss" oder aus an den Haaren herbeigezerrten Gründen nur "will"...
> ;-)
>
> Mit einer ehrlichen Antwort auf diese Frage haben sich schon viele
> Probleme in Luft aufgelöst.
>
> Andreas B. schrieb:
>> Man zählt die Betriebssekunden im RAM und schreibt erst auf das EEprom
>> wenn ausgeschaltet wird.
> So macht man das im richtigen Leben: eine "Millisekunden-USV" für die
> Zeit, die man braucht, um das EEPROM zu beschreiben. Und als "Fallback"
> kann man noch zusätzlich alle 5 Minuten mal schreiben, damit man bei
> einem anderweitigen Problemfall nicht zu viel "Zeit verliert".

Lösungsansätze in die Richtungen habe ich ja schon gefunden.
Sekundengenau wurde auch schon verworfen aber selbst bei 10 Sekunden 
wird es bei der geplanten Einsatzdauer eng...

Wie gesagt blieb aber die Frage hängen ob es da noch andere Technologien 
gibt.
Und dazu wurden hier ja MRAM, FRAM, NVRAM und EERAM genannt.
Sowie den DS1682 elapsed-time-recorder, etwas was ich noch gar nicht 
kannte!
Mal wieder viel gelernt, und es waren auch interessante "Abbieger" in 
die C51 und AVR-Welt dabei :)

Insgesamt haben sich hier viele Lösungswege aufgezeigt (gut, die ganzen 
xxRAMse sind von der Umsetzung her fast identisch...) und allein 
deswegen hat sich die Diskutiererei hier gelohnt :)

Am simplesten und billigsten erscheint mir die EERAM-Lösung

von Teo D. (teoderix)


Lesenswert?

heinz schrieb:
> Woher weis ich in welchen Zellen das aktuelle Datum steht?

Die Zeit 0 gibts nich.....

von heinz (Gast)


Lesenswert?

Dann muß man aber den EPROM lesen bis man !=0 findet?

von Εrnst B. (ernst)


Lesenswert?

heinz schrieb:
> Woher weis ich in welchen Zellen das aktuelle Datum steht?

du verwendest nur 136 Jahre - 1 Sekunde und definierst "0xFFFFFFFF" als 
"Ungültig/Platzhalter"

Beim Start suchst du nach dem ersten solchen Wert, das was im Ringbuffer 
davor steht ist dein Datum.

Bei streng monoton steigenden Werten wie dem Sekundenzähler geht 
natürlich auch einfach eine Maximalwert-Suche über den ganzen Speicher.

Und 0xFF... ist besser als 0 als Marker, weil das per Chip/Block-Erase 
sowieso rauskommt.
d.H. du kannst schön die Lösch- und Schreiboperationen trennen.

: Bearbeitet durch User
von vn nn (Gast)


Lesenswert?

heinz schrieb:
> Dann muß man aber den EPROM lesen bis man !=0 findet?

Ja.

von Bauform B. (bauformb)


Lesenswert?

heinz schrieb:
> Dann muß man aber den EPROM lesen bis man !=0 findet?

Solche Daten sind ja von Natur aus sortiert, also funktioniert eine 
einfache binäre Suche.

von xyz (Gast)


Lesenswert?

Er koennte auch 32 Ferritkerne in eine 4 x 8 Speichermatrix faedeln.

Das sollte dann bis zum Kontakt mit einem Schwarzen Loch
funktionieren. Allerdings wuerde er bis dahin dann ein paar
Kerne mehr brauchen damit es nicht ueberlaeuft.
Fuer solche Speicherferrite gibt es sogar Ansteuer-ICs und
Leseverstaerker!

von Andreas B. (bitverdreher)


Lesenswert?

Bob A. schrieb:
> Am simplesten und billigsten erscheint mir die EERAM-Lösung
Ein ausreichender Elko mit Diode davor ist sicher billiger.
Ich hatte das mal mit 2x220uF vor dem Spannungregler (7805) (in Reihe 
mit 1N4148 und 100R) gemacht und vor dem Spannungsregler einen 
Spannungsteiler, dessen Unterspannung ich dann via Analogcomparator IRQ 
abgefangen hatte.

Und ob das Ansteuern eines externen EERam o.ä. wirklich einfacher ist 
als in einem IRQ das interne EEprom zu beschreiben, sei auch nochmal 
dahingestellt.

von Noob A. (strippenzieher)


Lesenswert?

Andreas B. schrieb:
> Bob A. schrieb:
>> Am simplesten und billigsten erscheint mir die EERAM-Lösung
> Ein ausreichender Elko mit Diode davor ist sicher billiger.
> Ich hatte das mal mit 2x220uF vor dem Spannungregler (7805) (in Reihe
> mit 1N4148 und 100R) gemacht und vor dem Spannungsregler einen
> Spannungsteiler, dessen Unterspannung ich dann via Analogcomparator IRQ
> abgefangen hatte.
>
> Und ob das Ansteuern eines externen EERam o.ä. wirklich einfacher ist
> als in einem IRQ das interne EEprom zu beschreiben, sei auch nochmal
> dahingestellt.

Wieso internes EEPROM?
Davon war nie die Rede...

Die Beschreibung deiner Lösung raff ich nicht, mir scheint da ist ein 
wenig vor und nach dem 7805 vertauscht oder so

von PittyJ (Gast)


Lesenswert?

Ich habe ein ähnliches Problem.
Ich speichere das nur einmal die Minute ab. Diese Genauigkeit reicht bei 
mir.
Und bei einem Eeprom mit 4Mio Zyklen (laut Datenblatt) komme ich dann 
auf ca 2700 Tage.
Da das Ding aber nicht 24/7 benutzt wird, denn dann brauche ich keinen 
Zähler, sondern nur 8h am Tag, reicht das für 8000 Tage, also 22 Jahre.

Was dann passiert ist mir egal, denn dann bin ich in Rente.

von Noob A. (strippenzieher)


Lesenswert?

PittyJ schrieb:

> Was dann passiert ist mir egal, denn dann bin ich in Rente.

Geile Einstellung...
Nie den Drang verspürt etwas gut zu machen?

: Bearbeitet durch User
von Teo D. (teoderix)


Lesenswert?

vn nn schrieb:
> heinz schrieb:
>> Dann muß man aber den EPROM lesen bis man !=0 findet?
>
> Ja.

Ganz sooo einfach ist es dann in der Praxis, leider dann doch nicht.
EEPROMs werden im Normalfall mit 0xFF gelöscht. Extra ne Null 
schreiben... eher nich.
Meist steht aber einer der beiden höchstwertigen Bits zur Verfügung. Die 
im Normalfall ja meist außer range liegen und nie benutzt werden. -> 
Wenn größer(/kleiner) als erlaubt/möglich == Gelöscht/frei

von LostInMusic (Gast)


Lesenswert?

Das geht mit einem handelsüblichen seriellen 32-kbit-EEPROM.

Ein solcher Chip hat 4096 Byte-Speicherstellen. Davon verwendet man 
genau 3603 Stück mit folgender Aufteilung: Die unteren 3600 Bytes sind 
der Speicher für die Sekunden, der genau für eine Stunde reicht, und die 
restlichen drei Bytes speichern die Stundenzahl.

Die Bytes im Sekundenspeicher nehmen nur die Werte 0 und 1 an (man kann 
auch andere Werte nehmen; sie müssen sich nur unterscheiden). Während 
einer geradzahligen Stunde wird in jeder Sekunde k die Adresse k mit 
einer "0" beschrieben und in jeder ungeradzahligen Stunde mit einer 
"1". Wie man sich überlegen kann, ist dann immer eine 0-1- oder 
1-0-Grenze irgendwo im Sekundenspeicher, welche die aktuelle Sekunde 
markiert. Die Grenze wandert während einer Stunde von der Adresse 0 bis 
zur Adresse 3599 durch. Sobald eine Stunde vorüber ist, muss natürlich 
zusätzlich der Stundenzähler geupdatet werden (an immer denselben 
Adressen 3600 bis 3602).

Solche billigen EEPROMs haben eine Haltbarkeit von typisch 1 Million 
Schreibzyklen. Da jede Zelle pro Stunde einmal beschrieben wird, geht 
der Chip frühestens nach einer Million Stunden kaputt (weshalb zwei 
Bytes für den Stundenzähler nicht genug wären). Das sind mehr als 
hundert Jahre: 1000000/(24 · 365) = 114.

Will man die im EEPROM gespeicherte Sekundenzahl wissen, muss man die 
0-1-oder 1-0-Grenze finden. Im einfachsten Fall liest man dazu die 
Sekundenzellen nacheinander aus - im worst case mit 3600 Lesevorgängen. 
Da lesen aber (im Gegensatz zum schreiben) schnell geht und ein 
Lesevorgang die Zellen nicht abnutzt, ist das unproblematisch.

Nennt man übrigens "wear leveling".

von Noob A. (strippenzieher)


Lesenswert?

LostInMusic schrieb:
> Das geht mit einem handelsüblichen seriellen 32-kbit-EEPROM.
> ...
> ...
> ...
> Nennt man übrigens "wear leveling".

Wenn aber wie z.Bsp beim M95320 
(https://www.st.com/resource/en/datasheet/m95320-w.pdf) die Anzahl 
Schreibzyklen für jeweils 4er Blöcke gilt (s. 34), dann bleibt nur 1/4 
davon übrig.
Gut, der hat 4 Millionen, dann geht deine Rechnung wieder exakt auf ;-)
Aber so Details muss man kennen und berücksichtigen...
Ich tät mir ja wünschen dass das im DB prominenter dargestellt wird

von m.n. (Gast)


Lesenswert?

Bob A. schrieb:
> RTC mit Goldcap?

So würde ich es machen.
Beim Einschalten der Versorgungsspannung (zum Beispiel PCF8563) wird der 
32 kHz Takt freigegeben und der Sekundenzähler läuft ohne ext. Eingriff 
munter weiter. Per IIC gelesen wird nur, falls die Betriebszeit 
verwendet werden soll. Das eigentliche Gerät braucht nicht einmal einen 
eigenen µC.

Die ausgelesenen Werte können direkt über einen 7447 zur Anzeige kommen 
;-)

von Andreas B. (bitverdreher)


Angehängte Dateien:

Lesenswert?

Bob A. schrieb:
> Wieso internes EEPROM?
> Davon war nie die Rede...
Wenn man Daten nonvolatil speichern will, dann wählt man am besten einen 
uC mit eingebauten Eeprom. Das macht das Leben bedeutend einfacher.


> Die Beschreibung deiner Lösung raff ich nicht, mir scheint da ist ein
> wenig vor und nach dem 7805 vertauscht oder so
Nein, da ist nichts vertauscht. Die Spannungsüberwachung macht man 
sinnvollerweise (wenn vorhanden) VOR dem Spannungsregler. Dann hast Du 
nämlich noch mehr Energie im Elko gespeichert, als wenn Du das nach dem 
Spannungsregler prüfst. Wenn ich z.B. von 12V aus herunter regele, dann 
kann die Spannung am Elko von 11V (Bspl. Schaltpunkt) bis 3,3V abfallen 
bis nichts mehr geht. Dann kann der Elko kleiner ausfallen als wenn ich 
den Stromausfall erst hinter dem Spannungsregler merke. Dann habe ich 
nämlich nur noch die Differenz von 4,5 bis 3,3V wo ich in das EEprom 
schreiben muß.
Anbei mal ein Schaltungsauszug wie ich das mal gemacht habe. Der Elko 
ist hier großzügig bemessen, da ich einige Werte in das EEprom zu 
schreiben hatte.

von LostInMusic (Gast)


Lesenswert?

>Aber so Details muss man kennen und berücksichtigen...

Logisch :-)

Ein weiterer Aspekt ist auch noch interessant. Von den 
Sekundenzähler-Bytes ist ja nur ein Bit - das sogenannte Sentinel-Bit 
- relevant. Die restlichen sieben Bits kann man frei verwenden, z. B. um 
darin den Wert eines kritischen Sensors oder dergleichen abzuspeichern 
(muss halt nur immer ordentlich mit dem Sentinel-Bit zusammengeodert 
bzw. ausmaskiert werden, was ja banal ist). Im Falle eines 
Absturzes/Stromausfalls etc. enthält das EEPROM dann die Information 
über diesen Wert nicht nur in der entsprechenden Sekunde, sondern auch 
dessen History über die letzte Stunde hinweg. Das lässt je nach 
Anwendung manchmal wertvolle Rückschlüsse zu.

von Noob A. (strippenzieher)


Lesenswert?

Andreas B. schrieb:
> ...
> ...
> ...
> Anbei mal ein Schaltungsauszug wie ich das mal gemacht habe. Der Elko
> ist hier großzügig bemessen, da ich einige Werte in das EEprom zu
> schreiben hatte.

Danke, jetzt hab ichs kapiert :)

von c-hater (Gast)


Lesenswert?

Peter D. schrieb:

> Von Dallas gibt es den DS89C450 (MCS-51 Derivat) mit Power Fail
> Interrupt. Der wird kurz vor dem Brownout getriggert und hat die höchte
> von 5 Prioritäten. d.h. kann alle anderen Interrupts unterbrechen.
>
> Die AVRs haben leider nur ein Brown Out Reset.

Und fast alle haben mindestens einen Analog Comparator, der auch einen 
Interrupt auslösen kann. Damit kann man kinderleicht dieselbe 
Funktionalität bauen. Abgesehen von den Interruptprioritäten natürlich. 
Die gibt's nur bei XMega und den davon abstammenden neueren Baureihen.

Aber naja, wer ISRs baut, die das Potential haben, bei einem geordneten 
Powerfail nennenswert zu stören, der hat sowieso was falsch gemacht...

von Andreas B. (bitverdreher)


Lesenswert?

c-hater schrieb:
> Und fast alle haben mindestens einen Analog Comparator, der auch einen
> Interrupt auslösen kann. Damit kann man kinderleicht dieselbe
> Funktionalität bauen.
Eben, und wenn man nicht ewig in den IRQs rumturnt, ist es auch kein 
Problem wenn er etwas später drankommt..

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.