Betriebsstunden zählen!

Gast #182153
Hallo!
Ich habe folgendes Problem (und hoffe beim suchen im Forum keine dau
passende Antwort übersehen zu haben):

Ich möchte (unter anderem) einen Betriebsstundenzähler in einem
ATMEGA32 und GCC zu  realisieren. Ich dachte daran, jede Viertelstunde
eine Variable im eeprom zu inkrementieren. Nun wissen wir ja alle, dass
die Bits im EEPROM nur ca. 100.000 mal gesetzt bzw. gelöscht werden
dürfen. Also wie schaffe ich es von 1 bis "möglichst hoch" zu zählen?
Man könnte im EEPROM 10 integer deklarieren, und die nacheinander
hochzählen, und wenn eine "voll" ist die nächste hochzählen und das
gesamtergebniss aufaddieren, aber irgendwie ist mir das zu billig :o)
Ich dachte schon daran, jede integer einmal hochzuzählen, und danach
invertiert noch einmal durchzählen, also das LSB zum MSB zu machen.
Dann würde jede Zelle exakt 65536+1 mal geändert. Aber da bin ich in
der Implementierung steckengeblieben, da das dann mit mehreren Integers
und der Invertierung zu kompliziert wurde.
Kennt Ihr noch einen anderen Ansatz, um mit dem EEPROM sehr hoch zu
zählen?

Viele Grüsse
Woeba
Gast
Man könnte sich mit dem Komparator und einem Spannungsteiler einen
"Early power fail Interrupt" basteln und zählt im RAM und speichert
dann erst in dem "Early power fail Interrupt" in den EEPROM.


Peter
Gast
Hmm....coole Idee....leider steht die Hardware schon, und drum hoffe ich
auch eine reine Software-Lösung. Platz ist im EEprom übrigens noch
massig....
Gast
Die Lösung mit dem `early power fail' halte ich für recht riskant,
schließlich braucht der EEPROM noch über einige Zeit eine stabile
Spannungsversorgung, um den Schreibvorgang zu vollenden.  Könnte man
höchstens machen, wenn die Stromversorgung aus dem Netz ist und man
irgendwie Zugriff auf die Wechselspannungsseite hat => bei Ausfall der
Wechselspannung dann sofort mit dem Schreiben beginnen.

Erhöhe doch für jede der vier Viertelstunden eine andere EEPROM-Zelle.
Damit hast du die Last auf 4 verteilt, jede dieser Zellen würde dann
garantiert 100000 Stunden halten, das wären 11 Jahre.  Reicht das?
Sonst noch weiter verteilen.  Ich vermute übrigens, dass der EEPROM in
Wirklichkeit wenigstens um den Faktor 10 besser ist.  Es hat mal einer
in grauer Vorzeit einen Test mit einem AT90S1200 gemacht, dessen Flash
für 1000 Zyklen spezifiziert ist.  Ich glaube, er hat 167000 Zyklen
bis zum ersten Fehler ausgehalten.
Gast
Habs so gemcht Jörg,
habe einfach 6 Integer in EEprom und zähle die nacheinander bis 0xffff.
So komme ich bei einer Auflösung von einer halben Stunde auf 22 Jahre,
bis er einmal durch ist.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.