AVR Uptime und PowerUps zählen

Gast #871966
Lesenswert?

Nicht so oft speichern. Oder im Speicher immer eine neue Zelle nehem. Da 
gibts jedenfalls ein paar Möglichkeiten.

Vielleicht auch die Versorgungsspannung vom AVR puffern und nur bei 
einem Spannungsaus schreiben. Das sollte dann je nach Anwendung schon 
einige Jahre halten.

Sag halt mal genauer, wieviel du wie oft speichern willst. Dann kann man 
ja mal überlegen.
Im Extremfall halt externen Speicher.

Bei einem Byte pro Sekunde hält des EEPROM übrigens mindesten 3,2 Jahre. 
Wenn man das ganze EEPROM (angenommen 1kB) nutzt und ich mich nicht 
verrechnet hab...

Sebastian
Gast #871969
Lesenswert?

Schreiben bedeutet von Eins auf Null, Loeschen bedeutet von Null auf 
Eins.
Am weitesteten kommst du wenn du jedes Bit einzeln schreibst. Das 
bedeutet du kannst in 1kByte EEPROM 8192 Ereignisse festhalten bevon 
alles 1 mal geloescht wird.
Gast #872176
Lesenswert?

Ja, wenn's dir eh nur auf Minutengenauigkeit geht oder sogar noch 
weniger, dann reicht doch die Lebensdauer, oder?

Sag halt mal genauer, was du machen willst. Dann kann man auch genauer 
helfen.

Sebastian
Gast #872199
Lesenswert?

Es geht ja nicht um bitweise Adressierung sondern darum, der Reihe 
folgendes hineinzuschreiben:

0b00000001
0b00000011
0b00000111
0b00001111
0b00011111
0b00111111
0b01111111
0b11111111

Und erst dann muss die Zelle wieder gelöscht werden
#872202
Lesenswert?

3354 wrote:
> Eine RTC mit Batterie ist auch nocht praktisch.

Eine Batterie ist äußerst unpraktisch.
Sie hat ne begrenzte Lebensdauer und kann auslaufen.

Wenn schon externe Hardware, dann einfach nen seriellen FRAM nehmen, der 
kann unbegrenzt beschrieben werden.


Peter
(Firma: TravelRec.) Persönliche Seite #872209
Lesenswert?

>Es geht ja nicht um bitweise Adressierung sondern darum, der Reihe
>folgendes hineinzuschreiben:

>0b00000001
>0b00000011
>0b00000111
>0b00001111
>0b00011111
>0b00111111
>0b01111111
>0b11111111

>Und erst dann muss die Zelle wieder gelöscht werden

Und, merkst Du was? EEPROM funktioniert genau andersherum, Löschen 
heißt, daß die Zelle 0b11111111 enthält ;-)
Gast #872316
Lesenswert?

So viuel ich weiß (ist ehrlicher Weise aber nicht allzuviel bei diesem 
Thema, also viel mehr: wie ich es mal verstanden habe), ist bei einem 
Standard-AVR das EEPROM als kleinste Einheit byteweise zu schreiben. Das 
Byte wird dabei immer komplett gelöscht und danach neu geschrieben, 
also ist jede rein optische Bitänderung de fakto eine komplette 
Byteänderung und somit ein "regulärer kompletter" Schreibzyklus.
Persönliche Seite #872328
Lesenswert?

Datenblatt Mega48:
Bits 5, 4 – EEPM1 and EEPM0: EEPROM Programming Mode Bits
The EEPROM Programming mode bit setting defines which programming action 
that will be triggered
when writing EEPE. It is possible to program data in one atomic 
operation (erase the old
value and program the new value) or to split the Erase and Write 
operations in two different
operations. The Programming times for the different modes are shown in 
Table 7-1. While EEPE

EEPM1 EEPM0
Programming
Time Operation
0 0 3.4 ms Erase and Write in one operation (Atomic Operation)
0 1 1.8 ms Erase Only
1 0 1.8 ms Write Only
1 1 – Reserved for future use
Gast #872383
Lesenswert?

It is organized as a separate data space, in which single_ _bytes can 
be read and written.
A self-timing function, however, lets the user software detect when the 
next byte can be written

Genau, also kann nur wie vermutet byteweise geschrieben werden und man 
kann wählen, ob man das ganze byte atomar löscht und neu beschreibt oder 
erst löscht und in einem zweiten Zyklus neu beschreibt.
Gast #872396
Lesenswert?

> und man kann wählen, ob man das ganze byte atomar löscht und neu
> beschreibt oder erst löscht und in einem zweiten Zyklus neu beschreibt.
Oder ob man 1x löscht und dann 8x hintereinander nur schreibt.
Gast #872435
Lesenswert?

Wow. Wer tatsächlich für 50 Jahre baut, dem würde ich vielleicht ein 
8051-Derivat mit echtem "fuse-type" PROM (z.B. Toshiba) als ext. 
Programmspeicher empfehlen. Aber auch da kann man nicht garantieren, daß 
nicht der Controller vor dem Speicher aussteigt. Es gibt so etwas wie 
elektrischen Verschleiß in Halbleitern.
Gast #874987
Lesenswert?

Ich wurde ja leider ohne Mathe-Gen geboren und muß deshalb immer ganz 
schön rudern, bis ich sowas verstanden habe.

Sebastian wrote:
Bei einem Byte pro Sekunde hält des EEPROM übrigens mindesten 3,2 Jahre.
Wenn man das ganze EEPROM (angenommen 1kB) nutzt und ich mich nicht
verrechnet hab...

3353 wrote:
Am weitesteten kommst du wenn du jedes Bit einzeln schreibst. Das
bedeutet du kannst in 1kByte EEPROM 8192 Ereignisse festhalten bevon
alles 1 mal geloescht wird.

Das Grundprinzip habe ich ja soweit verstanden, aber komme ich
1.)
auf 9 eindeutige Werte pro byte. Dieser "Fehler" von 8 auf 9 Werte tritt 
ja m.E. nur beim letzten byte (mit dem gerade gezählt wird) auf und ist 
bei vielen Tausend durchläufen sicherlich verschmerzbar, sofern die 
Taktfrequenz im Verhältnis zur jeweiligen Uptimedauer eine vernünftige 
Incrementierungsrate hat (also nicht "dutycycle 5 Sekunden bei 
Zählfrequenz 1 mal pro Sekunde).
2.)
Ein Zähler, der einmalige/eindeutige Werte abliefern soll, muß seine 
schon getätigten Durchläufe doch irgendwie sichern. Und das geht doch am 
sinnvollsten wieder nur im EEPROM. Und so komme ich auf deutlich weniger 
als die spontanen 3,17 Jahre Betriebszeitzählung bei angenommenen 1 kB 
EEPROM und einem Incrementierungstakt von 1 Hz, da ja der 
"Durchlaufzähler" ebenfalls an diese Limits gebunden ist.

Wo liegen diesmal meine Gedankenfehler?
Gast #875034
Lesenswert?

Also ich komme auf ~7 Jahre

Ich nehme 4 Byte:

3 Byte als normaler Zähler, den kann ich 100.000 mal inkrementieren. 
Dazu ein einzelnes Byte als Vorteiler bei dem immer nur ein Bit 
zusätzlich geschrieben wird. Das muss dann gelöscht werden wenn ein 
Überlauf in den 3-Byte Zähler. Der Vorteiler hält also genau so lange 
wie der 3-byte Zähler. Ich kann als mit 4 Byte bis 800.000 Zählen.

In einem 1k EEPROM könnte ich 256 dieser 4-Byte Zähler unterbringen. 
Dann komme ich auf 800.000 * 256 was ich zählen kann.
Gast #875089
Lesenswert?

Oben wurde schon ausführlich dargestellt, dass man Bits nicht einzeln 
setzen kann, weil vor jedem Schreibzugriff das gesamte Byte gelöscht 
wird.

Aber ich seh grad:

>Ich möchte einen Betriebsstundenzähler der mind. 50 Jahre reicht. D.h.
>ich muss bis ca. 440000 zählen.

Bist du dir da sicher? Das wäre eine Zählung pro Stunde. Kommt natürlich 
aufs Gerät an, aber es sollte mindestens 10 Stunden an sein, bevor es 
jemand abschaltet. Und selbst dann hast du schon einen Fehler von bis zu 
10% in den Betriebsstunden.

Bis 440.000 kommt man ja schon mit einer Hand voll Byte. Auch von der 
Lebensdauer. Also das sollte doch echt kein Problem sein. Der Power-up 
zähler muss dann ja (wenn du sinnvoll ausgelegt hast) höchstens bis 
44.000 zählen, das passt noch wunderbar in 2 Byte!

Sebastian
#875090
Lesenswert?

Sebastian wrote:
> Oben wurde schon ausführlich dargestellt, dass man Bits nicht einzeln
> setzen kann, weil vor jedem Schreibzugriff das gesamte Byte gelöscht
> wird.

Komisch, ich dachte oben sei genau das Gegenteil gezeigt worden.
Denn "weil vor jedem Schreibzugriff das gesamte Byte gelöscht
wird" ist schlicht falsch.
Gast #875140
Lesenswert?

Bei den 50 Jahren würde ich mir auch noch Gedanken über andere Bauteile, 
wie z.B. Kondensatoren, machen...

Es wurde weiter oben ja schonmal angesprochen: Den µC mit einem Elko 
Puffern, mit einem Pin die Versorgungsspannung checken und alles nur 
dann ins EEprom schreiben, wenn wirklich abgeschaltet wird. Ich würde 
aber die Minuten mitzählen, weil es sonst zu additiven Fehlern kommen 
kann...
Wenn man dann noch einen Ringpuffer im EEprom verwendet, sollte es 
reichen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren