Forum: Analoge Elektronik und Schaltungstechnik uC Abschaltverzögerungs-Schaltung, um EEPROM zu schonen


von Willi (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

vielleicht denke ich in eine ganz falsche Richtung, aber ich hab eine 
Idee wie man das Problem lösen kann, dass der EEPROM nicht bei jedem 
Loop überschrieben wird, man kann ja schonmal vermeiden denselben Wert 
zu überschreiben, aber nicht sicherstellen, dass beim Abschalten die 
letzten Werte gespeichert werden, ohne es im Loop zu tun. Und zwar 
dachte ich mit der angehängten Schaltung dem Arduino sagen zu können, 
dass die Haupt-Stromversorgung aus ist und dann führt es eine 
Speicher-Funktion aus.
Als Erstes: Ist das eine gute Idee oder gibt es da bessere Lösungen? Hab 
bisher nichts dazu gefunden.
Und weiter hab ich versucht den Kondensator zu berechnen:

Pro Mini Clone etwa 50mA und ein LM358 in der Schaltung etwas dasselbe 
sind etwa 100mA = 0,1A
3,3ms mal 20 Werte, aufrunden auf 100ms = 0,001s

F=A*s/V=0,1*0,001/5=0,0002F*1.000.000 = 200uF

Ist das so richtig gerechnet? Falls überhaupt nötig ;-)

MfG,
Willi

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Willi schrieb:
> Als Erstes: Ist das eine gute Idee oder gibt es da bessere Lösungen?
Ach, die alte Powerfail-Geschichte...
Es ist einfacher, laufend mit einem AD Kanal die Versorgung zu 
kontrollieren und ggf. den Speichervorgang anzustoßen.
Oder das EEPROM nur bei einer Wertänderung zu schreiben...

Willi schrieb:
> Ist das so richtig gerechnet?
In dieser Berechnung dürfte die Spannung bis auf 0V fallen. Kann mit 
einer Versorgungsspannung von 0V noch ein geschrieben werden? Nein? Dann 
musst du da die Differenz von 5V bis zur minimalen Versorgungsspannung 
(Stichwort Brownout) ansetzen.
Und dafür sorgen, dass der Strom konstant bleibt, so wie es deine 
Berechnung annimmt...

von Falk B. (falk)


Lesenswert?


von m.n. (Gast)


Lesenswert?

Willi schrieb:
> aufrunden auf 100ms = 0,001s
> Ist das so richtig gerechnet?

Nein.

von Cler (Gast)


Lesenswert?

Ich würde dir dafür z.b. das EERAM von Microchip empfehlen. Das macht 
zuverlässigt genau das, was du vor hast ;-)

von Schorsch X. (bastelschorsch)


Lesenswert?

Einem MRAM ist es völlig egal wie oft es beschrieben wird, einem FRAM 
ist es fast egal (10^11 ... 10^15 Schreibzyklen). Schreiben ohne 
Verzögerung und ohne Batterie. Nutze ich seit Jahren und bin sehr 
zufrieden damit. Fujitsu ist auch recht bezahlbar geworden.

von soso (Gast)


Lesenswert?

Lothar M. schrieb:
> Willi schrieb:
>> Als Erstes: Ist das eine gute Idee oder gibt es da bessere Lösungen?
> Ach, die alte Powerfail-Geschichte...
> Es ist einfacher, laufend mit einem AD Kanal die Versorgung zu
> kontrollieren und ggf. den Speichervorgang anzustoßen.
> Oder das EEPROM nur bei einer Wertänderung zu schreiben...

Eine Sache hätte ich gerne ergänzt:

Man mass wissen, dass es bei weitem nicht damit getan ist, die Daten ins 
Flash /EEPROM zu bringen. Das muss das auch noch niederscheiben, und das 
dauert. Lange.

Beispil 1: Das allseits beliebte M25P40 SFLASH :
https://www.micron.com/~/media/documents/products/data-sheet/nor-flash/serial-nor/m25p/m25p40.pdf
Braucht bis zu 15ms. Und Vorsicht: Das ist Herstellerabhängig! - bis zu 
100ms ist drin.

Oder ein Allerwets-I2C-EEPROM:
http://ww1.microchip.com/downloads/en/DeviceDoc/21210N.pdf
5ms

Jetzt muss man die Versorgung über der Min Versorgung des Flash/EEPROM 
(!) halten, und zwar für z.B. 5ms oder 15ms. NACH dem letzten 
Schreibvorgang.
Wenn die Schaltung 100mA benötigt, braucht man dazu schon einmal 500µF, 
vorausgesetzt man hat 1V. Hat man aber meist nicht.

Dazu kommt folgender Umstand:
Bei jedem Schaltregler / LDO kann die Stromquelle die Versorgung 
leerziehen. Einfach, weil ein normaler Buck oder LDO einen FET hat, über 
dessen Body-Diode.
Und wie schnell die niederbricht, hat man nicht unter Kontroller. D.h. 
man benötigt eine Diode. Spätestens bei einem Kurzschluss ist man unten 
im µs-Bereich.

Fassen wir zusammen:
Man braucht_:
- Einen dicken Kondensator, im Bereich vielen hundert bis 1000µF
- Einen Schutz gegen Leerziehen dessen von außen
- Eine schnelle ADC-Messung
- Ein schnelles EEPROM

Eine saubere Lösung ist weder einfach, noch billig, und es ist 
mitnichten damit getan, einfach nur die Versorgung zu überwachen, und 
zum richtigen Zeitpunkt den Schreibvorgang zu triggern.

Das ist kein Witz. Wir hatten einen bösen teuren Fehler mit diesen 
Dingen. Die Flashes hats beim Kunden total zerschossen, weil bei jedem 
Brown-Out darin herumgewurschtelt wurde. Die waren teils defekt (!), und 
zwar hat das Flash Speicherbereiche überschrieben, in denen Dinge wie 
Device-ID standen.

von m.n. (Gast)


Lesenswert?

soso schrieb:
> Eine saubere Lösung ist weder einfach, noch billig

Ein FRAM oder eine günstige RTC+RAM sind eine saubere Lösung.
Allerdings ist völlig unbekannt, wieviele Werte wieoft geschrieben 
werden sollen. Deshalb gibt es nicht die Lösung.

von Andreas B. (bitverdreher)


Lesenswert?

Willi schrieb:
> Pro Mini Clone etwa 50mA und ein LM358 in der Schaltung etwas dasselbe
> sind etwa 100mA = 0,1A

Das ist schon mal das Hauptproblem, nämlich das Konzept. Der AVR AVR 
benotigt normalerweise nur wenige mA.
Also: Erst mal die evt. vorhandene LED am Arduino abklemmen und den 
Arduino mit 3.3V laufenlassen. Für diesen Arduino verwendest Du einen 
getrennten Spannungsregler. Diesen beschaltest Du so, wie es im Link von 
Falk angegeben ist. Wenn Du am Arduino selbst herumbasteln willst, 
kannst Du auch den Arduino umbauen.
Man kann da noch weitaus mehr machen, wenn man weiß wo die 
Betriebspannung herkommt. Wenn sie z.B. von einem Trafonetzteil kommt, 
zweigt man sich direkt vom Trafo die Wechselspannung ab, führt sie über 
eine Diode und steuert damit (auf 3.3V begrenzt) einen Eingang des AVR 
an. So kann man recht früh den Spannungsabfall detektieren. Darum geht 
es nämlich. So braucht man auch keine riesigen Kapazitäten, um der AVR 
noch in das EEprom schreiben zu lessen.
Es gibt also 2 Fragen, von denen die Lösung abhängt:
1: Wo kommt die Betriebspannung her?
2: Wie lange braucht der AVR zum schreiben der EEprom Daten?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Man kann auch das Abschalten einfach durch den MC selber lösen, siehe 
den AVR Transistortester, der sich, wenn alles getan ist, selber den 
Saft entzieht. Oder die Möglichkeit der 'Store' Taste, die nur dann 
EEPROM Werte schreibt, wenn der Benutzer es anfordert.
Da gibt es so viele Möglichkeiten, wie es Benutzerphilosophien gibt. 
Schreibstrategien, die einfach selber in den EEPROM schreiben, sind 
jedenfalls darauf abzuklopfen, ob das nicht unkontrolliert nach ein paar 
Jahren den Chip auslutscht, was wir hier leider bei einigen E-Auto 
Elektroniken erlebt haben, die ohne nachzudenken den Kilometerstand alle 
paar Meter ins EEPROM einmassiert haben.
Dabei hätte es gereicht, den Schreibvorgang dann zu tätigen, wenn der 
Zündschlüssel deaktiviert wird.

von Falk B. (falk)


Lesenswert?

@ soso (Gast)

>Eine saubere Lösung ist weder einfach, noch billig, und es ist
>mitnichten damit getan, einfach nur die Versorgung zu überwachen, und
>zum richtigen Zeitpunkt den Schreibvorgang zu triggern.

Jaja, wir werden alle sterben. Alles Raketenwissenschaft.

>Das ist kein Witz. Wir hatten einen bösen teuren Fehler mit diesen
>Dingen. Die Flashes hats beim Kunden total zerschossen, weil bei jedem
>Brown-Out darin herumgewurschtelt wurde. Die waren teils defekt (!), und
>zwar hat das Flash Speicherbereiche überschrieben, in denen Dinge wie
>Device-ID standen.

Da kommen wir der Sache schon näher! Du/Ihr habt es einmal zu lax 
angehen lassen und seid ordentlich auf die Nase gefallen, jetzt habt ihr 
Paranoia. Der Fachmann nennt das posttraumatische Belastungsstörung.

von soso (Gast)


Lesenswert?

Falk B. schrieb:
> Da kommen wir der Sache schon näher! Du/Ihr habt es einmal zu lax
> angehen lassen und seid ordentlich auf die Nase gefallen, jetzt habt ihr
> Paranoia. Der Fachmann nennt das posttraumatische Belastungsstörung.

Achso, die Hersteller schrieben die Zeiten als Spass in die 
Datenblätter.

Unsere Foren-Wauwau braucht das natürlich nicht zu beachten, und 
klassifiziert alles als Spinnerei.

Na dann ;-)

von Willi (Gast)


Lesenswert?

Danke, das hilft mir fast alles weiter. Was Falk verlinkt hat ist ja im 
Prinzip das, was ich vorhabe, nur dass man dort anstatt über einen 
Transistor Ground, direkt die Eingangsspannung mit einem Pull-Down über 
einen Daten-Pin auswertet.

Die vorgeschlagenen Speicherchips sind mir neu, coole Sache, hatte auch 
erst vor einfach einen 24C16 von ST zu verwenden, von denen ich zwei aus 
einem analogen Sat-Receiver ausgeschlachtet habe, aber der Haken ist in 
diesem Fall, dass es eine bereits fertige Schaltung ist und bis auf A6 
und A7 alle Pins am Pro Mini belegt sind. Ich habe die Firmware 
überarbeitet und einige Werte im LCD-Menu zum Einstellen platziert, 
zusätzlich habe ich einen Poti eingespart, d.h. einen analogen Pin, A5. 
Also ist externer Speicher in diesem Fall nicht so einfach umzusetzen, 
aber es ist mehr oder weniger ein Prototyp, wenn alles so funktioniert, 
wie ich es geplant habe, bestelle ich mir Platinen in China und baue das 
neu auf und da verwende ich einen EERAM.

Ich verwende auch eine Pro Mini Clone, der bereits minimal bestückt ist, 
es gibt Platz für einen Festspannungsregler und nötige Komponenten, 
diese waren aber nie aufgelötet und ich habe die LED und deren 
Widerstände entfernt, auch wenn das Letztere nicht notwendig ist.

Die Betriebsspannung kommt aus einem USB-Laderegler fürs Auto, also eine 
Schaltung auf Basis eines speziellen IC, weiss grad nicht wie der 
heisst, der von einem 19V Laptop-Netzteil versorgt wird.

Laut Datenblatt braucht der Atmega328 3,3ms.

Bei meiner Berechnung kommen 200uF raus, aber ich wollte den schon 
ordentlich aufgrunden, 10, 16, 25 Volt Kondensatoren mit z.B. 2200uF 
sind ja auch nicht besonders groß. Wenn das Display noch drei Sekunden 
nachleuchtet, bevor das Ganze ausgeht macht das auch nichts, man könnte 
da sogar noch nen Abschieds-Bildschirm einbauen. Apropos Display, das 
habe ich auch nicht mitberechnet.

Mir gings noch nicht um eine exakte Berechnung, sondern ich wollte 
erstmal wissen, ob ich da aufm Holzweg bin oder grundsäzlich in die 
richtige Richtung denke und nach dem, was Falk verlinkt hat, tue ich 
das.

Danke vielmals :)

von Walter T. (nicolas)


Lesenswert?

Die benötigten Kapazitäten gehen sehr schnell auf sehr vernünftige 
Werte, wenn man nicht die komplette Schaltung, sondern nur µC und evtl. 
(wenn extern) EEPROM weiterversorgt.

RTC gefällig? Dann wäre sogar eine Knopfbatterie eine gute und 
entspannende Lösung.

von Willi (Gast)


Lesenswert?

Das hatte ich auch schon überlegt, hab auch noch einen DS3231, aber auf 
dem LCD ist kein Platz mehr für ne Uhrzeit, es ist eine Lötstation und 
ich will darin keine Standby-Schaltung oder Ähnliches, nur einen 
Hauptschalter, der das Ganze ein- oder ausschaltet und beim Ausschalten 
soll der uC noch genug Zeit haben die geänderten Werte zu speichern, bis 
auf die aktuell gewünschte Temperatur, werden diese wohl eher selten bis 
garnicht überschrieben, außer am Anfang, wenn ich alles einstelle, die 
Pre-Sets, Abkühl-Temperatur für die Heissluft, Zeit bis zur 
automatischen Abschaltung des Lötkolben, Hysterese, Einstell-Schritte, 
Ton An/Aus und Kontrast, insgesamt 17 Integer, 2 davon, die manuelle 
Temperatur-Einstellung, könnte man auch auslassen, direkt einen Festwert 
als Ausgsngswert festlegen oder bei Null starten.

von Falk B. (falk)


Lesenswert?

@Willi (Gast)

>dem LCD ist kein Platz mehr für ne Uhrzeit, es ist eine Lötstation und

Und deswegen so ein Aufriß?

>auf die aktuell gewünschte Temperatur, werden diese wohl eher selten bis
>garnicht überschrieben, außer am Anfang, wenn ich alles einstelle, die

Eben! Also brauchst du gar keine Klimmzüge! Speichere die Daten in dem 
Moment wo sie sich ändern und gut! Brown out Detektor einschalten, 
fertig.

Wenn der Löter/Du jeden Tag einmal die Einstellungen ändert, hält dein 
EEPROM schlappe 100.000 Tage, sprich ~274 Jahre. Sollte reichen.

von batman (Gast)


Lesenswert?

Und nach den 274 Jahren verwendet er dann einen neuen Block im EEPROM..

von m.n. (Gast)


Lesenswert?

Willi schrieb:
> da verwende ich einen EERAM.

Was ist ein EERAM?

von Willi (Gast)


Lesenswert?

Falk B. schrieb:
> sprich ~274 Jahre

Mhhhhh, vielleicht hätte ich erstmal das berechnen sollen xD Hehehe, 
egal, trotzdem was neues Wichtiges erfahren.

Danke!

von Walter T. (nicolas)


Lesenswert?

Willi schrieb:
> es ist eine Lötstation

Falk B. schrieb:
> speichere die Daten in dem
> Moment wo sie sich ändern und gut! Brown out Detektor einschalten,
> fertig.

batman schrieb:
> Und nach den 274 Jahren verwendet er dann einen neuen Block im EEPROM

Eigentlich alles gesagt.

von Manfred (Gast)


Lesenswert?

m.n. schrieb:
> Was ist ein EERAM?

http://www.igfd.org/?q=eeram findet an zweiter Stelle:
http://www.elektroniknet.de/elektronik/halbleiter/eeram-kombiniert-sram-und-eeprom-134870.html

Scheint relativ neu zu sein, aus dem Artikel von 10/2016: Der 
EERAM-Bausteine 47L04, 47C04, 47L16 und 47C16 werden bereits im 
8-poligen SOIC-, TSSOP- und PDIP-Gehäuse ausgeliefert. Ab Januar 2017 
gibt es dann noch ein Eval-Kit (PICtail Kit AC500100)."

von m.n. (Gast)


Lesenswert?

Danke!
Neudeutsch würde es wohl Hybrid-EEPROM heißen. Letztlich dürfte der 
Preis bezogen auf FRAM interessant sein, welches mit 2K x 8 (FM24CL16) 
rund € 1,50 kostet.

von IchhättegerneeinProblem (Gast)


Lesenswert?

Willi schrieb:
> es ist eine Lötstation
> ...  beim Ausschalten soll der uC noch genug Zeit haben die geänderten Werte zu 
speichern

Da kommt ein Taster "Speichern" dran und fertig.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

IchhättegerneeinProblem schrieb:
> Da kommt ein Taster "Speichern" dran und fertig.
Die Geschichten vom "Stromausfall", vom "gezogenen Stecker" und den 
"entnommenen Batterien" hast du schon mal gehört?

> Da kommt ein Taster "Speichern" dran und fertig.
Wenn ein Wert im Menü geändert wird, dann wird der gespeichert, wenn 
diese Einstellung verlassen wird.
Wenn sich ein "globaler Wert" z.B. das Temperaturdrehrad an der 
Lötstation ändert, dann wird so lang gewartet, bis er sich 3 Sekunden 
nicht mehr ändert und dann gespeichert.

von Willi (Gast)


Lesenswert?

Stimmt Lothar, das habe ich noch garnicht im "Loop-Problem" gesehen, 
dass ja bei jedem Verändern der Werte diese sofort überschrieben werden, 
ein bisschen mit dem Drehencoder spielen und schon sind die 274 Jahre 
nur noch ein paar Monate ;-) Am besten ist wohl wirklich beim Wechseln 
auf die vorherige Menü-Seite alle veränderten Werte der aktuellen Seite 
zu speichern und die unveränderten belassen. Man warum will meine Denke 
immer gleich so kompliziert, das lässt sich alles mit ein paar Zeichen 
im Sketch lösen und ich hab gleich ne Schaltung im Kopf...

Die Taster-Idee ist aber auch recht witzig, gleich zwei Knöpfe von einer 
Tastatur, die Strg-Taste und die S-Taste und diese muss man dann 
zusammen drücken und zwar mit dem linken kleinen Finger die Strg-Taste 
und mit dem Ringfinger die S-Taste ;-)

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.