www.mikrocontroller.net

Forum: Compiler & IDEs Betriebsstunden zählen!


Autor: Woeba (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Woeba (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Woeba (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.