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
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...
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.
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.
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.
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?
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.
@ 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.
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 ;-)
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 :)
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.
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.
@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.
Falk B. schrieb:> sprich ~274 Jahre
Mhhhhh, vielleicht hätte ich erstmal das berechnen sollen xD Hehehe,
egal, trotzdem was neues Wichtiges erfahren.
Danke!
Willi schrieb:> es ist eine LötstationFalk 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.
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.
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.
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.
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 ;-)