Forum: Mikrocontroller und Digitale Elektronik Daten laufend abspeichern!


von Jörg (Gast)


Lesenswert?

Ich habe ein kleines Problemchen .
Ich möchte Benutzereingaben in einem Zähler zählen .
Nehmen wir an am Tag benutzen das Gerät 1000 Nutzer so sollte diese Zahl
dauerhaft gespeichert werden also auch wenn der Strom weg ist .

Dazu müsste ich es quasi ständig ins EEprom schreiben allerdings wäre 
dieses bei 1000 Nutzern am Tag auch relativ schnell am Ende seines 
Lebens bei ca. 100-200k Zyklen .

Die einzige unelegante Lösung die mir eingefallen ist ,wäre das Gerät 
nur vom Strom zu trennen nachdem man eine Funktion benutzt hat, die dann 
den Zählerwert ins Eeprom speichert und danach die Meldung "Sie können 
nun das Netzteil ausstecken" ausgibt .

Aber diese Lösung ist absolut nicht nach meiner Vorstellung .

Hat daher sonst jemand eine Idee wie ich das lösen könnte ?

Ich nutze übrigens ein ATMega168 für die ganze Geschichte .

Am tollsten wäre es wenn der Avr kurz vor dem Brown Out noch schnell die 
Daten in das Eeprom packt, aber das dürfte wohl unmöglich sein :( .

Bin für jede Idee dankbar .

von Peter II (Gast)


Lesenswert?

Jörg schrieb:
> Am tollsten wäre es wenn der Avr kurz vor dem Brown Out noch schnell die
> Daten in das Eeprom packt, aber das dürfte wohl unmöglich sein :( .

ein kleiner Kondensator und schon ist es sehr gut möglich

von Lehrmann M. (ubimbo)


Lesenswert?

Jörg schrieb:
> Am tollsten wäre es wenn der Avr kurz vor dem Brown Out noch schnell die
> Daten in das Eeprom packt, aber das dürfte wohl unmöglich sein :( .

Naja sowas in der Art könnte man zumindest machen.

z.B. mit ADC Spannung messen / Komparator und bei entsprechend niedirgem 
Eingangsspannungswert die Abspeicherung im EEPROM initiieren. Das ganz 
noch über einen Elko puffern der die 10-20ms überbrücken kann.

von Andreas B. (buyman)


Lesenswert?

Controller lange genug puffern um einen Schreibvorgang abschließen zu 
können. Dazu eine entsprechende Detektorschaltung für den 
Spannungseinbruch (muss dann natürlich die Spannung vor dem Puffer 
messen).

Alternativ: Nie auf die selbe Zelle schreiben sondern immer eine Zelle 
nach der anderen bis das EEPROM voll ist - dann wieder löschen und von 
vorne beginnen. So lässt sich die Lebensdauer des EEPROMs deutlich 
erhöhen (Stichwort: Wear leveling).

von Ben _. (burning_silicon)


Lesenswert?

genau, immer auf die nächste zelle schreiben und beim ende wieder am 
anfang anfangen. das programm kann dann beim start den kompletten eeprom 
nach dem höchsten wert absuchen. dürfste die einfachste form eines wear 
leveling algorithmus sein.

von M. P. (phpmysqlfreak)


Lesenswert?

Ben _ schrieb:
> das programm kann dann beim start den kompletten eeprom
> nach dem höchsten wert absuchen. dürfste die einfachste form eines wear
> leveling algorithmus sein.

Und der Vollständigkeit halber:

Und auch nach dem niedrigsten, der dann als nächsten beschrieben wird. 
Er ist ja "quasi" der älteste Eintrag. ;)

Gruß,
   Marcel

von Falk B. (falk)


Lesenswert?


von Ben _. (burning_silicon)


Lesenswert?

hat eigentlich irgendjemand mal einen testlauf gemacht wie lange es 
dauert bis das eeprom eines AVR wirklich platt ist? also wieviele 
schreibzugriff auf eine adresse man braucht bis fehler auftreten...?

von Jörg (Gast)


Lesenswert?

Ja ich denke die Lösung mit dem Spannungseinfall detektieren gefällt 
mir.
Das werde ich einfach mal ausprobieren .

Ben _ schrieb:
> hat eigentlich irgendjemand mal einen testlauf gemacht wie lange es
>
> dauert bis das eeprom eines AVR wirklich platt ist?


Hatte ich im Forum hier irgendwo gelesen .Insgesamt hat er 200.000 
Zugriffe gehabt bevor die ersten Fehler auftraten .

von zürcher (Gast)


Lesenswert?

Wie implementiert man das denn technisch am besten, um zu erkennen, dass 
der Strom am ausgehen ist? Kann der Brown-Out-Detector das oder müsste 
man über einen separaten Pin/ADC messen?

von Jens (Gast)


Lesenswert?

Ist ein I²C-Schnittstelle vorhanden? Wenn ja könnte man einen FRAM 
nehmen, das Teil ist allerdings recht teuer. Eine günstige Alternativer 
wäre der DS1307. Ist ein RTC mit 56Byte statischen RAM, welcher mit 
Knopfzelle gepuffert wird. Als Nebeneffekt hast du die Uhr gleich mit 
drin.

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.