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...
Ich würde dir dafür z.b. das EERAM von Microchip empfehlen. Das macht zuverlässigt genau das, was du vor hast ;-)
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.
Und nach den 274 Jahren verwendet er dann einen neuen Block im EEPROM..
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ö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.
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)."
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 ;-)
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.