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?
KingJulian schrieb: > Ich würde gerne, falls mein System vom Netz getrennt wird, noch einige > "zu erhaltende" Einstellungen in meinem uC Flash ablegen. suche Brown Out Interrupt Beitrag "[AVR] Brownout Interrupt Vector?"
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.
:
Bearbeitet durch User
Ä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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.