Ich würde gerne, falls mein System vom Netz getrennt wird, noch einige
"zu erhaltende" Einstellungen in meinem uC Flash ablegen.
Sollte das funktionieren mit einem Schmitt Trigger der die
Speise-Spannung überwacht und entsprechend auf dem uC einen externen
Interrupt auslöst? Nehme an man braucht einfach entsprechende
Stützkondensatoren. Oder ist solch ein System grundsätzlich zu langsam
um diesen Schreibzugriff zu gewährleisten?
Was hast du denn für eine Versorgunsspannung, du kannst diese mittels
ADC messen und bei Unterspannung noch schnell versuchen die Daten im uC
Flash abzulegen, die 3,3V mit einen großen Elko stützen?
IMHO die falsche Vorgehensweise - erst wenn's brennt Einstellungen
sichern. Besser wäre regelmäßig die Einstellungfen sichern oder immer
wenn sie geändert wurden.
Bei Brown out Daten sichern birgt die Gefahr, das die Sicherung nicht
vollständig erfolgt und somit ein inkosnsitenter Datensatz verbleibt.
Ordner schrieb:> IMHO die falsche Vorgehensweise - erst wenn's brennt Einstellungen> sichern. Besser wäre regelmäßig die Einstellungfen sichern oder immer> wenn sie geändert wurden.
Das ist allerdings dann nicht gut, wenn die Änderungen häufig sind. Da
könnte die max. garantierte Anzahl der Schreibvorgänge überschritten
werden.
Wenn Dein Vorschlag deswegen nicht gehen sollte, finde ich KingJulians
Ansatz nicht schlecht.
Dazu muss man die Spannung am Pufferkondensator (vor dem
Spannungsregler!) mit einem Komparator überwachen und damit den
Interrupt auslösen. Je nach Dimensionierung von Schaltschwelle und
Kondensator hat man dann genügend Zeit, um die Schreibvorgänge
abzuschließen.
Wenn sich der Controller bei Powerdown schnell genug von den
Stromfressern trennt sollte es noch reichen, einen Status zu schreiben.
Dabei sollte man aber die spannung vor dem Spannungsregler messen, weil
da noch mehr energie vorhanden ist, es mehr Vorlaufzeit gibt, wie wenn
man die 3.3V Speisung ueberwacht.
Dietrich L. schrieb:> Das ist allerdings dann nicht gut, wenn die Änderungen häufig sind. Da> könnte die max. garantierte Anzahl der Schreibvorgänge überschritten> werden.
Wenn die Änderungen häufig sind (also nicht von einem Menschen
vorgenommen werden), dann
- kann man auch über batteriegepuffertes Ram nachdenken, bzw. FRAM oder
per Goldcap
- ist es manchmal egal, ob der letzte oder vorletzte Wert oder Zustand
gespeichert wird (z.B. bei Betriebsstundenzählern, die intern im
Sekundentakt fortlaufen)
Dietrich L. schrieb:> Das ist allerdings dann nicht gut, wenn die Änderungen häufig sind. Da> könnte die max. garantierte Anzahl der Schreibvorgänge überschritten> werden.
Das ist dann ein Konstruktionsfehler, einen Speicher vorzusehen der die
erwartbare Anzahl von Einstellungsänderungen nicht überlebt. Oft hilf
schon einfaches Wear leveling - nicht immer an die selbe Flashaddresse
stelle schreiben sondern reihum.
Ordner schrieb:> Das ist dann ein Konstruktionsfehler, einen Speicher vorzusehen der die> erwartbare Anzahl von Einstellungsänderungen nicht überlebt.
Du beschreibt eine mögliche Lösung der Aufgabe. Ob jetzt die
Verwendung eines entsprechenden Speichers oder die Lösung mit
Spannungsüberwachung die bessere ist, hängt von vielen Parametern ab.
Die pauschale Aussage "Konstruktionsfehler" kann also auch einfach
falsch sein.
Ähnlich, wie die Vorredner schon sagten:
Die Spannung ganz vorne mit z.B. TL7705 überwachen, dann z.b. eine dicke
Schottkydiode, dahinter dann die fetten Elkos. Diese speisen den
Wandler/deine Schaltung. Je weniger an der Stelle verbraten wird (falls
linear geregelt, um so weniger Kapazität mußt Du bereitstellen.
Der TL7705 löst bei Unterschreitung den Interrupt aus, der das
"Rettungschreiben" veranlaßt.
Andere Idee: externen Baustein mit batteriegepuffertem RAM verwenden
(z.B. RTC DS1302). Für "einige zu erhaltende Einstellungen", die sofort
bei Änderung geschrieben werden, könnte das reichen.
Dietrich bemerkte:
> Die pauschale Aussage "Konstruktionsfehler" kann also auch einfach> falsch sein.
Na. die Aussage ist nicht pauschal.die Verwendung eines Speichers mit
weniger als den spezifizierten Schreibzyklrn ist ein Fehler.
QA schrieb:> Dietrich bemerkte:>> Die pauschale Aussage "Konstruktionsfehler" kann also auch einfach>> falsch sein.>> Na. die Aussage ist nicht pauschal.die Verwendung eines Speichers mit> weniger als den spezifizierten Schreibzyklrn ist ein Fehler.
Ja klar, das wäre ein Fehler. Aber darum ging es doch nicht! Ich bezog
mich auf die 2 Lösungen:
- Speicher, der viele Schreibzyklen kann, und bei jeder Änderung werden
die Daten abgespeichert,
- Speicher mit begrenzter Anzahl Schreibzyklen + einer Schaltung, die
sicherstellt, dass diese Grenze nicht überschritten wird.
Welche Lösung nun besser ist kann man eben nicht pauschal beantworten -
ohne weitere Randbedingungen zu berücksichtigen!
Ordner schrieb:> Das ist dann ein Konstruktionsfehler, einen Speicher vorzusehen der die> erwartbare Anzahl von Einstellungsänderungen nicht überlebt.
Dieser "Fehler" liegt hier nicht vor, da eine andere
Entwicklungsphilosophie verfolgt wird.
Andi schrieb:> Der TL7705 löst bei Unterschreitung den Interrupt aus, der das> "Rettungschreiben" veranlaßt.TL7702 und 7705 habe ich noch da, aber sind die noch zeitgemäß? Der
Stromverbrauch ist relativ groß.
Schlimmer aber ist, dass der Kamerad bei Unterspannung
keinen_definierten_Ausgang hat, er braucht einen zusätzlichen
Transistor. Das ist leider kein theoretisches Problem, ich habe deswegen
schon einmal ein Gerät nachentwickeln lassen, nachdem beim Kunden
zerstörte Daten aufgetreten sind.
(Schaltung 9 im Datenblatt!)
Ordner schrieb:> Oft hilf schon einfaches Wear leveling - nicht immer an die selbe> Flashaddresse stelle schreiben sondern reihum.
Hmm, wie merkt man sich denn dabei an welcher Adresse der zuletzt
geschriebene Wert steht..?
Man könnte immer das Byte und noch eine ID in einem Ringbuffer
speichern. Also wenn man z.B. ein Byte speichern möchte und wear
levelling über 200 Speicherstellen machen will, schreibt man noch ein
zweites byte dazu mit der laufenden Nummer.
Beim Neustart durchsucht man dann den Puffer und nimmt den Wert mit der
höchsten ID, das Zurückspringen auf 0 nach 255 bei der ID muss natürlich
beachtet werden.
Segler schrieb:> Ordner schrieb:>> Oft hilf schon einfaches Wear leveling - nicht immer an die selbe>> Flashaddresse stelle schreiben sondern reihum.> Hmm, wie merkt man sich denn dabei an welcher Adresse der zuletzt> geschriebene Wert steht..?
a) Garnicht. Alle ältere Werte sind gelöscht, nur der aktuelle Datensatz
beginnt mit einem Wert ungleich 0x00 (wert gelöschte Zelle) Um den
aktuellen Datensatz zu finden durchsucht man den RAM bis man die
Anfangskenung für einen "nichtgelöschten" Block findet.
b)für verwaltungsdaten wie Pointer auf datensatz wird ein Speicher mit
höhere Anzahl Löschzyklenn bspw EEPROM gewählt, so beim ATmega8:
Write/Erase Cycles: 10,000 Flash/100,000 EEPROM
c)...
Dietrich L. schrieb:> Das ist allerdings dann nicht gut, wenn die Änderungen häufig sind. Da> könnte die max. garantierte Anzahl der Schreibvorgänge überschritten> werden.
Wenn man das Netzeil "normal" einsetzt sollte dies eigentlich kein
Problem sein.Aber gehen wir mal davon aus,dass es ueber Gebuehr
strapaziert wird:
Angenommen der User sitzt 8 Stunden vor dem Netzeil und kurbelt - weil
er sich langweilt - jede Minute einmal am Einstellknopf,dann waeren dies
in der Stunde 60 EEpromspeicherungen.Pro Tag(8Stunden) waeren es dann
60x8 = 480 Speicherungen
Die Lebensspanne einer EEpromZelle liegt bei mindestens einer Million
Schreib/Lesezyklen.
1000000/480 = 2000 Tage => 5 Jahre.
Ich wuerde da nicht lange fackeln: Letzte Einstellungen abspeichern.
Toxic schrieb:> Angenommen der User sitzt 8 Stunden vor dem Netzeil und kurbelt - weil> er sich langweilt - jede Minute einmal am Einstellknopf,dann waeren dies> in der Stunde 60 EEpromspeicherungen.Pro Tag(8Stunden) waeren es dann> 60x8 = 480 Speicherungen> Die Lebensspanne einer EEpromZelle liegt bei mindestens einer Million> Schreib/Lesezyklen.> 1000000/480 = 2000 Tage => 5 Jahre.>> Ich wuerde da nicht lange fackeln: Letzte Einstellungen abspeichern.
Wenn das so ist, hast Du recht. KingJulian hat aber nichts darüber
gesagt, um welche "Einstellungen" es geht.
Daher kann ich nur Wiederholen: welche Lösung richtig bzw. sinnvoll ist,
kann man nur auf Basis diverser uns nicht bekannten Vorgaben oder
Randbedingungen feststellen.
Dietrich L. schrieb:> Ja klar, das wäre ein Fehler. Aber darum ging es doch nicht! Ich bezog> mich auf die 2 Lösungen:> - Speicher, der viele Schreibzyklen kann, und bei jeder Änderung werden> die Daten abgespeichert,> - Speicher mit begrenzter Anzahl Schreibzyklen + einer Schaltung, die> sicherstellt, dass diese Grenze nicht überschritten wird.
Sorry aber der zweite Vorschlag bringt keinerlei Lösung, in beiden
Fällen ("Speicher kaputtgeschrieben" oder "Schaltung blockiert bei
erreichen Limit") ist der Effekt der gleiche, die neuen Einstellungen
sind verloren.
Die Spannungsüberwachung löst das Problem des begrenzten
Einstellungsspeichers auch nur fallbezogen und schafft neue
Problemszenarien. Bspw. häufige Schwankungen an der überwachten
Eingangsspannung (bspw Generatorbetrieb, 3. Welt Stromnetz) würde
häufiges unnötiges Schreiben in den Speicher auslösen und wiederum zum
frühzeitigen Kaputtschreiben führen.
Will man eine gewisse Anzahl von gespeicherten Einträgen über die
spezifizierte Betriebsdauer garantieren, kommt man nicht umhin einen
zeitlichen Mindestabstand zwischen den Speicherungen "Einzubauen". Bspw.
minütlich. Oder man legt den Speicher so aus das er die Anzahl von
Speicherungen (bei bestimmungsgemäßen Gebrauch mal Sicherheitsfaktor)
aushält.