Go Down

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

combie

#15
Jul 13, 2019, 05:20 pm Last Edit: Jul 13, 2019, 05:22 pm by combie
Quote
Welche Möglichkeit habe ich dann mehrere Werte persistent zu sichern?
NVRAM / FeRAM
Wer seine Meinung nie zurückzieht, liebt sich selbst mehr als die Wahrheit.

Quelle: Joseph Joubert

postmaster-ino

Hi

Wenn dieser Zählerwert das EINZIGE ist, was Du im EEprom unterbringen willst, kannst Du Das ebenso mit einer Adresse machen und so lange auf dieses Adress-Feld schreiben, bis Das tot ist.
Dann 'einen weiter hinten' die gleiche Prozedur.
Bei sekündlichem Schreiben hält der erste Adressbereich 100'000 Sekunden oder 27,7 Stunden.
Knapp einen Tag also.
Wenn Du jetzt noch berechnest, wie viele Bereiche Du im EEprom unter bekommst (wird ja wohl mehr als ein Byte sein, was Du speichern müsstest), und die EEprom-Größe dadurch teilst, hast Du die Lebenserwartung in Tagen bei 24 Stunden Laufzeit pro Tag.

Wenn Du statt FeRAM nach FRam suchst, kommt zumindest auf eBay mehr.
Ein FRam kannst Du beschreiben wir ein RAM, Daten bleiben erhalten wie in einem EEprom, gibt's (mindestens) als I²C, SPI, Parallel.
Die 4kbit (Angaben in kilo Bits = 512 Byte, also Wert durch 8) gibt's im DIL Gehäuse.
Nicht viel Platz, aber für wenige Werte durchaus eine Überlegung wert.

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 ...

4711

#17
Jul 14, 2019, 08:21 am Last Edit: Jul 14, 2019, 08:26 am by 4711
Danke Jungs!
der Adruino Uno mit Atmega328P hat 1kb = 1024Bit EEProm
ein unsigned long hat 32 Bit, das wären 32 Adressbereiche
wenn nun 1h am Tag jede Sekunde ein Wert darauf geschrieben wird sind das 60x60=3600 Zyklen
wenn ein Adressbereich 100.000 Zyklen hält wäre das dann 27,8 Tage
bei 32 Bereichen dann 888,9 Tage = 2,34 Jahre
dann nehmen wir an, dass nicht  jeden Tag sondern nur jeder 4. Tag ein aktiver ist, dann schon fast 10 Jahre

... wenn diese Berechnung richtig ist, sollte das genug sein, auch für 2 Variablen...
muss man sich dann aber merken auf welchen Bereich man gerade schreibt? oder prüft man wieder alle durch nach dem Power on?

bei einem Fram Modul werden I/O's belegt. Wenn ein Display auf I2C hängt, kann nicht gleichzeitig ein anderes angeschlossen werden, ist das richtig? SPI und Parallel sagt mir noch nichts.

Deltaflyer

I2c-Module 'hören' immer auf eine eindeutige Adresse. Unterschiedliche Module haben unterschiedliche Adressen.
Bei vielen Modulen und Sensoren (nicht bei allen)mit I2C hast Du die Möglichkeit die Adresse durch zu setzende Lötbrücken in einem gewissen Bereich einzustellen, wodurch Du mehr als ein Modul selben Typs am I2C betreiben Kannst.
Mit SPI hab ich mich noch zuwenig auseinander gesetzt, zumindest von der Programierung her, aber soweit ich weiss, können auch bei SPI mehrere Module angeschlossen werden, dazu wird dann aber für jedes Modul eine CS Leitung (Chip Select) benötigt, um das gerade anzusprechende Modul auszuwählen Das Heist , du brauchst im Prinzip für jedes am Arduino angeschlossene SPI-Modul zusätzlich noch nen Digital Pin vom Arduino.

LG Stefan

noiasca

#19
Jul 14, 2019, 10:06 am Last Edit: Jul 14, 2019, 10:07 am by noiasca
FRAM ... sicher nett wenn man es zu hause hat.
aber zum Abspeichern bei Powerdown, würden da nicht auch eine Dioden und ein kleiner Puffer-Elko in der Versorgungsspannung und eine Widerstand zu einem Analog-Eingang reichen?

D1/C1 zum Puffern
R1 damit man an/unter Vref kommt

how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

combie

#20
Jul 14, 2019, 10:34 am Last Edit: Jul 14, 2019, 10:34 am by combie
Quote
und eine Widerstand zu einem Analog-Eingang reichen?
Ein Spannungsteiler wäre sinnvoller.
Und Anschluss, nicht an den ADC sondern an den AC

Aber Grundsätzlich:
Ja, der richtige Ansatz.
(zumindest kein ganz falscher)



Quote
der Adruino Uno mit Atmega328P hat 1kb = 1024Bit EEProm
Falsch, der UNO hat ein 8192 Bit EEPROM.


Quote
bei einem Fram Modul werden I/O's belegt. Wenn ein Display auf I2C hängt, kann nicht gleichzeitig ein anderes angeschlossen werden, ist das richtig?
Ein Irrtum!
Links:
I2C Spezifikation
I2C Bus Pullup Resistor Calculation
I2C Level Shifter
Wer seine Meinung nie zurückzieht, liebt sich selbst mehr als die Wahrheit.

Quelle: Joseph Joubert

noiasca

#21
Jul 14, 2019, 10:42 am Last Edit: Jul 14, 2019, 10:43 am by noiasca
Ein Spannungsteiler wäre sinnvoller.
Und Anschluss, nicht an den ADC sondern an den AC
nicht verstanden.
AC ist für dich was?

Wenn ich einen externen Spannungsteiler mache dann könnte ich das Signal aber auch gleich wieder auf einen Digitaleingang legen. Aber ok, wo ein Widerstand in der Bastlerkiste liegt, wird wohl auch ein zweiter liegen...
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

combie

Quote
AC ist für dich was?
Der eingebaute Analog Komparator.
Geradezu ideal für solche Spielchen.
Wer seine Meinung nie zurückzieht, liebt sich selbst mehr als die Wahrheit.

Quelle: Joseph Joubert

noiasca

aha, wieder was gelernt.
Danke - karma
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

4711

Sind die 100.000 schreib und lese Zyklen, d.h. jede Aktion ob lesen oder schreiben verringert die Lebensdauer?

noiasca

#25
Jul 14, 2019, 06:57 pm Last Edit: Jul 14, 2019, 08:50 pm by noiasca
immer wenn Bits gesetzt werden.

Quelle: https://github.com/PRosenb/EEPROMWearLevel
how to react on postings:
- post helped: provide your final sketch, say thank you & give karma.
- post not understood: Ask as long as you understand the post
- post is off topic (or you think it is): Stay to your topic. Ask again.
- else: Ask again.

4711

d.h. das lesen macht nichts, egal wie oft
habt ihr einen eleganten Sketch für schreiben und überwachen, im Fehlerfall nächste Adresse?

postmaster-ino

Hi

Ne, aber der Ansatz ist doch denkbar einfach.
Adresse 0: Die Adresse des Nuzbyte.
Du liest also Adresse 0 und weißt, wo Dein Datenwert im EEprom gerade steht.
Diesen liest Du aus, spielst damit, what_ever.
Nun ändert sich dieser Wert, soll also möglichst zeitnah gesichert werden.
Also schreibst Du diesen Wert an die aktuelle Adresse.
Dann liest Du diesen eben geschrieben Wert zurück und vergleichst beide Werte.
Wenn identisch: passt, wir sind fertig.
Wenn ungleich: Speicherstelle tot, Adress-Counter erhöhen (+1) und speichern (Adresse 0) und den zu speichernden Wert an die nun neue Adresse speichern.
Wieder auslesen, prüfen, ob identisch, ja-> passt
Ein Nein sollte hier nicht vorkommen, da diese Speicherstelle noch jungfräulich ist, wenn doch, kannst Du aber auch Diese überspringen - dieser Passus sollte aber bei der Entwicklung tunlichst geprüft werden, sonst hast Du - ggf. Aufgrung Timing.Probleme, zig Speicherstellen tot erkannt, obwohl Du nur zu ungedultig warst ... oder so.

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 ...

Tommy56

#28
Jul 14, 2019, 07:45 pm Last Edit: Jul 14, 2019, 07:46 pm by Tommy56
Ich sehe in dieser Vorgehensweise einen größeren Denkfehler:

Wenn ich schon mehrere Inhalts-Speicherzellen mit ihren maximal erreichbaren Schreibzyklen "verbrannt" habe, dann ist die Zelle 0 in der die Adresse gespeicher wird wohl schon lange tot, die in die wird mit der Summe der Zellenzugriffe geschrieben.

Dann sollte man dann lieber gleich einen FRAM nehmen.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

4711

Kann dem geschriebenen Wort nicht folgen ?

Go Up