Forum: Compiler & IDEs Betriebsstunden zählen!


von Woeba (Gast)


Lesenswert?

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

von Peter Dannegger (Gast)


Lesenswert?

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

von Woeba (Gast)


Lesenswert?

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....

von Jörg Wunsch (Gast)


Lesenswert?

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.

von Woeba (Gast)


Lesenswert?

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.

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.