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
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
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....
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.