so, ich habs mal ausprobiert...
hab ne schleife am anfang des codes gesetzt
ausm eeprom lesen
wenn werte kleiner null oder größer neun
dann 42 setzen
klappt prima
dennoch unelegant irgendwie ....
hallo jungs,
ich bastle an einem einstellbaren timer mit 7segment anzeigen, soweit klappt auch alles ganz gut.
jetzt möchte ich den wert den ich eingestellt habe auch beim ausschalten speichern, also ins eeprom.
also bisherige funktion:
(habe zum testen nur 2x 7segment, daher max 59 sekunden)
- einschalten, wert von 42 sekunden wird angezeigt (im programm festgelegt)
- über taster 1 kann der timer verstellt werden
- über taster 2 wird der timer gestartet
- bei 00 blinkt eine led und der timer springt wieder auf 42
alles schön und gut.
jetzt mein denkproblem:
- gerät einschalten
- wert aus dem eeprom holen
- bei veränderung ins eeprom speichern
aber im eeprom muss doch schon vorher irgendein wert drin stehen fürs erste mal oder ??????
da kann doch ziemlicher müll drinstehen ?!?
hab auch noch keinen brownout dran, der 90s8515 hat ja keinen...
mir fällt gerade ein: vielleicht vorher ne schleife machen, wenn zahlen drinstehen - ok weitermachen, wenn nicht irgendnen wert setzen ...
wie löst man das elegant das beim ersten mal schon ein wert im eeprom steht ?
thx
so, ich habs mal ausprobiert...
hab ne schleife am anfang des codes gesetzt
ausm eeprom lesen
wenn werte kleiner null oder größer neun
dann 42 setzen
klappt prima
dennoch unelegant irgendwie ....
Ich mache sowas immer über Prüfbytes.
Wenn Du also ein gültiger Wert ins eeprom geschrieben wird, setzt Du zwei anderes Bytes im eeprom gleichzeitig auf einen bestimmten Wert, z.B. 0xABBA. Beim Start des Controllers kannst Du dieses Byte dann abfragen. Steht dort 0xABBA drin, ist ein gültiger Wert für Deinen Countdown im eeprom abgelegt, ansonsten halt nicht.
Sicher gibt es natürlich eine gewisse Chance, dass beim ersten Start rein zufällig 0xABBA in den entsprechenden eeprom-Bytes steht, allerdings ist die Wahrscheinlichkeit mit 1:65536 recht gering. Wenn Dir das noch nicht reicht, kannst Du auch noch ein paar Prüfbytes dranhängen...
askazo
ich habe gerade festgestellt das mein eeprom ziemlich oft beschrieben wird ... so jeden zehnten durchlauf durch die do-loop schleife ... das wirds wohl nicht lange aushalten...
naja werde in die schaltung doch einen button einbauen der beim drücken den wert speichert ...
Speichern mußt du dann, wenn der Wert verändert wurde und auf Start gedrückt wird. Weil dann gilt der Wert offenbar.
Ob der Wert deshalb ein anderer ist, weil im EEprom Müll steht, kann dir egal sein.
Eigentlich müßtest du nur ein einziges Mal "42" starten, dann steht auch das als default im Eprom.
Sonst halt das Püfverfahren vom askazo
(Oder du schreibst die Zahl zweimal in den EProm: das wär schon ein Zufall)
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Na dann nutz doch das gesamte EEProm also alle Adressen reihum.Zitat von veit
Wenn ich dich richtig verstanden habe willst du den Aktuellen Wert retten bevor der Saft weg ist.
Also brauchst du doch nur zu Sichern wenn der Saft wirklich abgeschaltet wird.
Das läst sich Detektieren indem man den Controller Puffert (Wlko,Goldcap) und vor dem Puffer misst wan der Saft weg ist und dann noch schnell sichert bevor der Puffer dann alle ist.
So mach ich das schon länger und bei 100'000 Zyklen pro Zelle bedeutet das 100'000 Schaltzyklen fürs Gerät.
Ich denke das reicht für ne ganze weile.
Wenn dazu noch die Adresse rotiert dann kommste mit nem EEProm nen Lebenlang aus.
Wenn es anders ist dann Vergiss was ich geschrieben hab.
Gruß
Ratber
Hallo,
hat jmd schonmal einen M128 mit canbus in nem auto ans laufen gebracht? (BASCOM) oder ist dafür ASM-Code nötig??
vielen dank für eure tipps,
ich will halt den eingestellten wert speichern, dann das gerät komplett abschalten können ... also mir geht nicht kritisch der saft weg oder so.
passt schon, ich benutze einfach einen taster zum wert speichern.
thx
Lesezeichen