Go Down

Topic: Wert in Variable beibehalten (Puffer?) (Read 600 times) previous topic - next topic

123_Gamesoft

Moinsen Wissende,

Ich hätte mal eine Frage und zwar wollte ich bei einem Arduino den Analogwert einer Variable Nach dem Ausschalten beibehalten ohne dass ich den Arduino mit Strom versorgen muss. Hatte mir eine Pufferbatterie vorgestellt. Ist das irgendwie realisierbar?

Gruß

gregorss

Ich hätte mal eine Frage und zwar wollte ich bei einem Arduino den Analogwert einer Variable Nach dem Ausschalten beibehalten ohne dass ich den Arduino mit Strom versorgen muss. Hatte mir eine Pufferbatterie vorgestellt. Ist das irgendwie realisierbar?
Der Arduino verfügt über ein EEPROM. Speichere den Wert dort.

Gruß

Gregor

PS: Evtl. hilft das hier.
„Ich glaube, ich leg' mich noch mal hin", sagte das Bit.

postmaster-ino

Hi

Nur solltest Du den Wert nicht hundert Mal die Sekunde speichern - oder zumindest nur speichern, wenn sich Dieser geändert hat, da das EEprom eine begrenzte Schreib-Zyklenzahl hat.
Damit Das nicht stört, als Erstes die 'Adresse' abspeichern, wo der aktuelle Wert zu finden ist und Diesen von Dort auslesen.
Wenn der neue Wert gespeichert werden soll, Diesen an diese Adresse schreiben und zur Kontrolle zurück lesen - ist der gelesene Wert ungleich dem Geschriebenem, wird diese EEprom-Zelle tot sein.
Dann kannst Du 'Adresse + 1, erneuten Schreibversuch' durchführen - Dieser wird nun gelingen, da an der neuen Adresse noch nicht so oft geschrieben wurde.
Wenn Du damit bis an die letzte Adresse vorgestoßen bist, hat das Steinchen auch genug gearbeitet und darf in Frieden ruhen :) (soll heißen: Das dauert Ewig)

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

123_Gamesoft

perfekt :)
Der wert ändert sich vielleicht alle paar Tage mal

Deltaflyer

Guter Hinweis postmaster-ino.
Nur; der To sagte, er wolle , dass der wert der Variable beim ausschalten speichern will. ich glaube nicht,
dass er den arduino 'mehrere hundert mal pro sekunde' aus- und wieder einschaltet.

Kann ein Arduino überhaupt mehrere hundert mal pro sekunde neu starten?

Aber es ist natürlich gut. dass der TO erfährt, dass er aufpassen muss, den EEprom nicht zu oft zu beschreiben.

LG Stefan

postmaster-ino

Hi

Da der Arduino selber zum Arbeiten Strom braucht, müsste man das Aus-Gehen zeitlich vom Aus-Schalten trennen - dieser Aufwand wird astronomisch höher, als bei Änderung des Wert (was laut TO nur ein paar Mal am Tag passiert) Diesen im EEprom zu verewigen.
Die Adress-Zelle wird nur so oft beschrieben, wie das EEprom Adressen hergibt - Da sehe ich keine Lebenszeitprobleme.
Die Zelle, auf Die die Adresszelle zeigt so oft, bis das Lese-Ergebnis nicht mehr mit dem Schreib-Ergebnis übereinstimmt - bei Fehler wird die nächste Adresse im Adress-Zeiger geschrieben und der Speicherversuch erneut angestoßen.
Wenn Das '1x rund läuft' - also alle Speicherstellen platt sind und nur noch der Adress-Zeiger funktioniert, versagt zwar auch diese Strategie, aber der Arduino wird auch dafür wohl einige Jahre gebraucht haben.
Dann können wir in der Version 2 ein FRam einplanen, 512 BYTE (4kBit - die Größenangabe ist in BIT) gibt's im DIP-Gehäuse, beliebig oft/schnell beschreibbar, Datenerhalt bei Stromausfall - die Vorteile von RAM und ROM kombiniert.
Dort müssen wir dann auch nicht die Schreibzugriffe verteilen, da das Steinchen, laut Hersteller, ewig hält - und außerdem schneller als ein EEprom ist - keine Wartezeit zur Übernahme der Daten nötig. Gibt's als Serial in I²C/SPI oder Parallel (was aber 'Beinchen ohne Ende' braucht) in affenartigen Geschwindigkeiten.

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

123_Gamesoft

Nene also es ist ein Schwellwert den ich mit Zwei Tastern einstelle also wird hunderte male in der Sekunde schwierig. Und dieser Schwellwert ändert sich ab und an Mal.
Hab ich das richtig verstanden dass jeder neue Wert in einer neuen Adresse gespeichert wird ? Wenn ja gibt es dann eine Möglichkeit eine Adresse zu nutzen und jeden neuen wert auf den neuen zu überschreiben, dass ich immer nur einen Wert habe?

gregorss

Nur; der To sagte, er wolle , dass der wert der Variable beim ausschalten speichern will.
Nein. Lies noch einmal.

Kann ein Arduino überhaupt mehrere hundert mal pro sekunde neu starten?
Wieso sollte man den Arduino nicht hundert mal pro Sekunde ein- und ausschalten können?

Gruß

Gregor
„Ich glaube, ich leg' mich noch mal hin", sagte das Bit.

gregorss

Hab ich das richtig verstanden dass jeder neue Wert in einer neuen Adresse gespeichert wird ? Wenn ja gibt es dann eine Möglichkeit eine Adresse zu nutzen und jeden neuen wert auf den neuen zu überschreiben, dass ich immer nur einen Wert habe?
Nein, an welcher Adresse Dein Wert gespeichert wird, gibst Du beim Speichern an. Wenn sich der Wert nur ab und zu mal ändert, kannst Du ihn einfach immer an Adresse 0 speichern.

Das EEPROM ist lt. techn. Daten für mindestens 100.000 Schreibvorgänge spezifiziert. Wenn Du den Wert also nur 1 mal am Tag änderst, hält das EEPROM voraussichtlich 100.000 Tage (> 273 Jahre).  Wenn Du stündlich speicherst, hält das EEPROM über 10 Jahre.

Gruß

Gregor
„Ich glaube, ich leg' mich noch mal hin", sagte das Bit.

Rentner

Hallo,

Dennoch kann es passieren das Dein Analogwert häufig um ein Bit kippt , 100,101, 100 usw. Wenn Du dann jedesmal ins Eprom speicherst ist das auch nicht gut. Also erst speichern wenn die Differenz >2 ist.

Heinz

gregorss

Dennoch kann es passieren das Dein Analogwert häufig um ein Bit kippt , 100,101, 100 usw. Wenn Du dann jedesmal ins Eprom speicherst ist das auch nicht gut. Also erst speichern wenn die Differenz >2 ist.
Das halte ich für Sprücheklopferei. Bei meinen EEPROMs ist noch nie ein Bit gekippt. Nicht mal ein halbes und auch nicht „ein bisschen".

Gruß

Gregor
„Ich glaube, ich leg' mich noch mal hin", sagte das Bit.

ElEspanol

#11
Jul 13, 2019, 02:45 pm Last Edit: Jul 13, 2019, 02:47 pm by ElEspanol
Nicht das Eeprom kippelt, sondern der adc Wert. Wenn man dann nach jedem kippeln speichert, sind das viele Schreibvorgänge.
Aber es soll ja nicht der kippelnde adc gespeichert werden, sondern der Sollwert, der über Taster eingestellt wird.

123_Gamesoft

Beim Analogwert habe ich mich falsch ausgedrückt!
Es sind zwei Taster mit dem ich ein Analogwert Simuliere
Aber das macht denke ich keinen Unterschied oder ?

gregorss

#13
Jul 13, 2019, 03:52 pm Last Edit: Jul 13, 2019, 03:53 pm by gregorss
Beim Analogwert habe ich mich falsch ausgedrückt!
Es sind zwei Taster mit dem ich ein Analogwert Simuliere
Aber das macht denke ich keinen Unterschied oder ?
Es kommt allein darauf an, was Du im EEPROM speicherst. Wenn sich der zu speichernde Wert selten ändert, und Du nur dann speicherst, wenn es einen neuen Wert gibt, hält das EEPROM schier ewig. Du kannst alternativ die Funktion

EEPROM.update(adr, val)

benutzen. Dann wird der Wert nur geschrieben, wenn er anders ist als der Gespeicherte.

Gruß

Gregor
„Ich glaube, ich leg' mich noch mal hin", sagte das Bit.

4711

Darf ich hier mal einhaken, wenn ich einen Wert habe der sich jede Sekunde ändern kann (Counter).
Dann wird das EEprom wohl nicht der passende Speicherort sein.
Wenn ich diesen Wert allerdings nur sichern möchte für den Ein/Ausschalt - Zustand ja aber verm. nicht beim Stromausfall, also einfach Stecker ziehen.
Welche Möglichkeit habe ich dann mehrere Werte persistent zu sichern?

Go Up