Atmega Wert bei ausschalten autom. Speicher

Gast #3454927
Lesenswert?

Hallo,

gegeben ist eine Dimmer PWM mit Atmega8, welche per Tastendruck LED 
Kette am Weihnachtsbaum dimmt.

Ich möchte nun beim Ausschalten den letzten PWM Zustand ins Eeprom 
schreiben, um bei erneutem Einschalten den letzten Wert wieder als 
Startwert zu haben.

Wenn ich das dauern schreiben würde , wäre ja schnell die Speicherzelle 
defekt.

Wie kann ich das bewerkstelligen?
Gast #3455094
Lesenswert?

Wie schaltest du um?
Kontinuierlich oder in Stufen bei jeden Tastendruck?
Eigentlich egal, beim loslassen der Taste speicherst du den Wert im 
EEPROM.
Und den fragst du am Programmanfang bei der Initialisierung ab. Fertig.
#3455536
Lesenswert?

Michael_ schrieb:
> Wie schaltest du um?
> Kontinuierlich oder in Stufen bei jeden Tastendruck?
> Eigentlich egal, beim loslassen der Taste speicherst du den Wert im
> EEPROM.
genau, und nach dem letzten Tastendruck noch 10s warten und dann wie 
weiter oben beschrieben erst mal den Wert der schon im EEProm steht mit 
dem neuen Wert vergleichen und nur bei Änderung schreiben.

Sascha
Gast #3455759
Lesenswert?

Sascha Weber schrieb:
> genau, und nach dem letzten Tastendruck noch 10s warten und dann wie
> weiter oben beschrieben erst mal den Wert der schon im EEProm steht mit
> dem neuen Wert vergleichen und nur bei Änderung schreiben.

Warum denn 10s warten? Wenn die Taste betätigt wird, dann muß logisch 
ein neuer Wert eingetragen werden.
Bitte kein Mitleid mit dem Chip. Selbst wenn der Junior jedes Weihnacht 
daran herumspielt, funktioniert das >10000 Jahre.
Es wird doch nicht dauernd der PWM-Wert abgefragt und gespeichert.
Sondern nur wenn der Finger krumm gemacht wird um die Taste zu 
betätigen!
#3455816
Lesenswert?

Michael_ schrieb:
> Sascha Weber schrieb:
>> genau, und nach dem letzten Tastendruck noch 10s warten und dann wie
>> weiter oben beschrieben erst mal den Wert der schon im EEProm steht mit
>> dem neuen Wert vergleichen und nur bei Änderung schreiben.
>
> Warum denn 10s warten? Wenn die Taste betätigt wird, dann muß logisch
> ein neuer Wert eingetragen werden.

Muss nicht. Denn wenn man 3 mal hoch und 3 mal runter direkt 
hintereinander macht muss gar nichts getan werden
Und selbst wenns nur 3 mal in eine Richtung geht, warum sollen alle 
Zwischenschritte gespeichert werden? DAS wäre unlogisch. Und völlig 
unnütze Verschwendung von EEPROM Lebenszeit.

Ein paar Sekunden warten schadet nicht, hilft aber viel.

Dabei spielt es keine Rolle ob die Zyklenzahl ausreicht oder nicht. 
Sondern es wäre einfach pfuschig implementiert.

gruß cyblord
Gast #3455830
Lesenswert?

cyblord ---- schrieb:
> Und selbst wenns nur 3 mal in eine Richtung geht, warum sollen alle
> Zwischenschritte gespeichert werden? DAS wäre unlogisch. Und völlig
> unnütze Verschwendung von EEPROM Lebenszeit.

Das geht aber nur, wenn man eine zusätzliche Anzeige hat, wo der 
Endzustand dann extra gespeichert und angezeigt wird.
Und man muß die Verzögerungszeit abwarten, bis man wieder etwas ändern 
kann.
Rechne mal, pro Weihnacht 100x Klick und speichern.
Wieviel Jahre kann das dann benutzt werden?
#3455837
Lesenswert?

Michael_ schrieb:
> cyblord ---- schrieb:
>> Und selbst wenns nur 3 mal in eine Richtung geht, warum sollen alle
>> Zwischenschritte gespeichert werden? DAS wäre unlogisch. Und völlig
>> unnütze Verschwendung von EEPROM Lebenszeit.
>
> Das geht aber nur, wenn man eine zusätzliche Anzeige hat, wo der
> Endzustand dann extra gespeichert und angezeigt wird.

Versteh ich jetzt gar nicht. Was für eine Anzeige? Welcher Endzustand?


> Und man muß die Verzögerungszeit abwarten, bis man wieder etwas ändern
> kann.
Nichts muss man abwarten. Natürlich kann man sofort was ändern. In dem 
Moment wird die Uhr wieder auf 0 gestellt und die 10 Sekunden laufen 
erneut. Erst wenn die Uhr 10 Sek. erreicht, wird ins EEProm gespeichert 
(nur wenn dieser Wert nicht schon drinsteht natürlich).

> Rechne mal, pro Weihnacht 100x Klick und speichern.
> Wieviel Jahre kann das dann benutzt werden?
Trotzdem würde ich es richtig machen und so selten wie möglich in den 
EEProm schreiben.
Gast #3455851
Lesenswert?

cyblord ---- schrieb:
>> Und man muß die Verzögerungszeit abwarten, bis man wieder etwas ändern
>> kann.
> Nichts muss man abwarten. Natürlich kann man sofort was ändern. In dem
> Moment wird die Uhr wieder auf 0 gestellt und die 10 Sekunden laufen
> erneut. Erst wenn die Uhr 10 Sek. erreicht, wird ins EEProm gespeichert
> (nur wenn dieser Wert nicht schon drinsteht natürlich).

Na überleg mal. Ich drücke auf den Knopf, und der Baum wird 20% heller.
Warum soll man da 10s warten? Wenn ich jetzt den Stecker nach 5s ziehe, 
ist der Wert nicht gespeichert.

cyblord ---- schrieb:
> Versteh ich jetzt gar nicht. Was für eine Anzeige? Welcher Endzustand?

Also, du hast LED von 1-10. Du drückst auf den Knopf und es springt von 
5 auf 6, aber die Helligkeit des Baumes hat sich noch nicht geändert. 
Erst mit einer zusätzlichen Bestätigung, das die 6 richtig ist, wird die 
Helligkeit geändert.
#3455857
Lesenswert?

Michael_ schrieb:
> cyblord ---- schrieb:
>>> Und man muß die Verzögerungszeit abwarten, bis man wieder etwas ändern
>>> kann.
>> Nichts muss man abwarten. Natürlich kann man sofort was ändern. In dem
>> Moment wird die Uhr wieder auf 0 gestellt und die 10 Sekunden laufen
>> erneut. Erst wenn die Uhr 10 Sek. erreicht, wird ins EEProm gespeichert
>> (nur wenn dieser Wert nicht schon drinsteht natürlich).
>
> Na überleg mal. Ich drücke auf den Knopf, und der Baum wird 20% heller.
> Warum soll man da 10s warten?
Weil eine weitere Änderung kommen könnte und es deshalb keinen Sinn 
macht den aktuellen Wert sofort ins EEPROM zu schreiben. Der Baum wird 
natürlich sofort heller.
Meist klickt man direkt mehrere Stellen hoch und dann wieder welche 
runter bis man zufrieden ist.

> Wenn ich jetzt den Stecker nach 5s ziehe,
> ist der Wert nicht gespeichert.
Richtig. Aber wahrscheinlich ist das? Setz die Zeit auf 5 Sek. Oder auf 
3 Sek. Die 10 Sek. waren nur ein Beispiel. Wer ändert die Helligkeit und 
zieht sofort den Stecker? Und selbst wenn? Geht ja nichts kaputt, wird 
halt nicht gespeichert.

> Also, du hast LED von 1-10. Du drückst auf den Knopf und es springt von
> 5 auf 6, aber die Helligkeit des Baumes hat sich noch nicht geändert.
> Erst mit einer zusätzlichen Bestätigung, das die 6 richtig ist, wird die
> Helligkeit geändert.

Warum sollte man das so machen? Die Helligkeit der LEDs (also auch der 
PWM Wert im RAM) ändert sich sofort mit jeder Betätigung. Nur das 
speichern ins EEPROM wird verzögert.
Gast #3455868
Lesenswert?

cyblord ---- schrieb:
> Warum sollte man das so machen?

Wie es heute üblich, das Ganze noch auf einem LCD/LED anzeigt. Die 
Luxusvariante.

cyblord ---- schrieb:
> Meist klickt man direkt mehrere Stellen hoch und dann wieder welche
> runter bis man zufrieden ist.

Bei Handbetrieb ist das kein Problem. Das geht zig-tausend Jahre.
Oft ist es heute so, das, wenn man die Taste gedrückt hält, im Kreislauf 
gedimmt wird. Bei der richtigen Helligkeit lässt man los und der Wert 
wird gespeichert. Wo ist das Problem und warum sollte ich das verzögern?
Gast #3455885
Lesenswert?

Heizungsthermostate machen es a la M.H.
PinChangeInt bei "gleich ist der Saft weg".
Der verbaute AtMega169 läuft mit 100μF als Puffer lange genug, um einige 
Bytes "aktueller Zustand" zu sichern.
Gast #3455937
Lesenswert?

M. H. schrieb:
> Du könntest die Spannungsversorgung des µCs auch mit einem großen
> Elko
> puffern und mit einem IO die Spannung von der Diode Messen. ICh würde
> einen Interrupt Pin verwenden und sofort bei einer fallenden Flanke den
> PWM wert aus dem RAM ins EEPROM kopieren.

Die Lichterkette wird aus 24 V AC mit folgendem Brückengleichrichter 
versorgt.
Daraus versorge ich via 7505 in der Standardbeschaltung den Atmega8 
(88).
Vor dem 7505 hängt ein 470uf.
Vielleicht reicht der schon, um einen Interrupt noch hinzubekommen und 
ins EEprom zu Speichern?
#3455968
Lesenswert?

Ohmchen schrieb:
> Vor dem 7505 hängt ein 470uf.
> Vielleicht reicht der schon, um einen Interrupt noch hinzubekommen und
> ins EEprom zu Speichern?

Überschlagsrechnung: Das Speichern dauert 5ms, der AVR braucht 5mA, wir 
erlauben uns 0.5V Spannungseinbruch.

Q = C * U = I * t oder C = (I * t) / U

Macht 50uF.

Du musst nur den Spannungseinbruch rechtzeitig und zuverlässig 
entdecken.
Gast #3456082
Lesenswert?

Ich würde die Lösung von der Art der Eingabe abhängig machen.

Kommt eine "fertige" Zahl von irgendwo her, so brauchst Du nur zu 
testen, ob sie sich vom Vorhänger unterscheidet. Hiervon machst Du es 
abhängig, ob gespeichert wird oder nicht.

Arbeitest Du mit einem Step-Up/-Down System, so böte sich eine 
Hintergrundroutine an, die bei jedem tasten angestoßen wird und mit 
einer sinnvollen Verzögerung (etwas länger als der übliche Tastrhythmus) 
schaut ob das Endresultat unterschiedlich ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren