Forum: Mikrocontroller und Digitale Elektronik best practice: Wie max. Messwerte speichern?


von Philipp G. (geiserp01)


Lesenswert?

Ein kleines Projekt:

-ATMega328
-LCD
-zwei Temperatursensoren

Das Display zeigt die aktuellen Werte der Temperatursensoren an. Beim 
Einschaltvorgang sollen die Maximal (jeweils gemessenen Höchstwerte) für 
drei Sekunden angezeigt werden.

Wenn ich die Werte im Loop im EEPROM speichere, bin ich mit den 100'000 
Schreibzyklen schnell am Ende. Wenn ich es alle 10 Minuten mache, 
bekomme ich den Höchstwert evtl nicht mit. Schön wäre, den Höchstwert in 
eine Varibale zu schreiben und beim Exit diesen zu speichern. Nur eine 
Exit Routine gibt es ja in diesem Sinn nicht, es gibt nur power weg.

Wie gehe ich vor? Jemand eine Idee?

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

Philipp G. schrieb:
> Schön wäre, den Höchstwert in
> eine Varibale zu schreiben und beim Exit diesen zu speichern. Nur eine
> Exit Routine gibt es ja in diesem Sinn nicht, es gibt nur power weg.
>
> Wie gehe ich vor? Jemand eine Idee?

Mit Kondensator und Diode kannst du den Controller nach einem Power-Off 
so lange versorgen bis die Werte gespeichert wurden. Ein Eingangspin VOR 
der Diode detektiert den Ausschaltmoment.

Alternative: FRAM

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?


von Philipp G. (geiserp01)


Lesenswert?

aha, les' ich mir kurz alles durch, melde mich wieder.

von Frank L. (hermastersvoice)


Lesenswert?

ich versteh das Problem nicht so richtig. Wenn es nur um die 
Maximalwerte geht müssen Die doch auch nur geschrieben werden wenn es 
einen Neuen gibt. Wenn der aktuelle Messwert unter dem Höchstwert liegt 
wird einfach nix geschrieben. Das sind dann nicht viele Schreibzugriffe.

von Philipp G. (geiserp01)


Lesenswert?

Frank L. schrieb:
> ich versteh das Problem nicht so richtig. Wenn es nur um die
> Maximalwerte geht müssen Die doch auch nur geschrieben werden wenn es
> einen Neuen gibt. Wenn der aktuelle Messwert unter dem Höchstwert liegt
> wird einfach nix geschrieben. Das sind dann nicht viele Schreibzugriffe.

Hm, da ist was dran. Stimmt.

Cyblord -. schrieb:
> Mit Kondensator und Diode kannst du den Controller nach einem Power-Off
> so lange versorgen bis die Werte gespeichert wurden. Ein Eingangspin VOR
> der Diode detektiert den Ausschaltmoment.

Ich versorge noch die Hintergrundbeleuchtung vom LCD mit. Müsste ich mal 
schauen was die zieht, und die Dimensionierung vom C rechnen ob das 
reicht.

Es ist so eine 'standard' 16x2 LCD Anzeige.

von Falk B. (falk)


Lesenswert?

Philipp G. schrieb:

> Ich versorge noch die Hintergrundbeleuchtung vom LCD mit. Müsste ich mal
> schauen was die zieht, und die Dimensionierung vom C rechnen ob das
> reicht.
>
> Es ist so eine 'standard' 16x2 LCD Anzeige.

Die braucht ~1mA, die Hintergrundbeleuchtung deutlich mehr.
Und rein praktisch, wo liegt das Problem? Erstens ist es nur ein 
Bastelprojekt und 2. läuft dein Board praktisch immer, da gibt es selten 
einen Stromausfall. Und wenn doch, so what! Speichere deinen 
MIN/MAX-Wert, wenn es denn wirklich einen neuen gibt, alle 15min und 
gut. Macht bei 100.000 garantieren Schreibzyklen satte 1000 Tage ~3 
Jahre, real eher deutlich mehr, denn du hast nicht alle 15min einen 
neuen MIN/MAX Wert.

von Cyblord -. (cyblord)


Lesenswert?

Philipp G. schrieb:
> Ich versorge noch die Hintergrundbeleuchtung vom LCD mit. Müsste ich mal
> schauen was die zieht, und die Dimensionierung vom C rechnen ob das
> reicht.

Ja und die MUSS dann unbedingt mit in dem Notstromkreis hängen? Bau halt 
deine Verschaltung bisschen um.

von Sebastian R. (sebastian_r569)


Lesenswert?

Jop.

Nur einen neuen Wert speichern, wenn er wirklich größer als der vorher 
gespeicherte ist. Ein Lesezugriff führt zu keinem Verschleiß der 
Speicherzelle.

von Cyblord -. (cyblord)


Lesenswert?

Sebastian R. schrieb:
> Jop.
>
> Nur einen neuen Wert speichern, wenn er wirklich größer als der vorher
> gespeicherte ist. Ein Lesezugriff führt zu keinem Verschleiß der
> Speicherzelle.

DAS ist ja auch trivial. Hilft aber nicht bei langsam steigenden oder 
sinkenden Werten.

von Jens M. (schuchkleisser)


Lesenswert?

Speicher den Wert einfach in 20 Zellen reihum ab (Ringspeicher).
Beim lesen gewinnt die mit dem höchsten Wert, der Verschleiß verteilt 
sich auf 20 Zellen, also 20Mio Saves.

von Philipp G. (geiserp01)


Lesenswert?

Klingt alles sehr einleuchtend, danke Leute. Ich frage mich manchmal 
warum ich selber nicht auf sowas komme.

von svensson (Gast)


Lesenswert?

Geht es wirklich um die absoluten Maximalwerte ohne Zeitbegrenzung?
Da fällt mir eigentlich nur Kühlkettenüberwachung ein.

Wenn kein Stromausfall zu befürchten ist, dann einfach die Meßwerte ins 
RAM schreiben und nur den maximalen Wert ins EEPROM als Ringspeicher.

Bei meinem Gasregler logge ich die Werte auch einfach ins RAM.

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.