Hallo! Ich würde gerne im EEPROM des attiny85 einen Zähler im Minutentakt mitlaufen lassen. Damit das EEPROM nicht allzufrüh den Geist aufgibt, dachte ich mir dass ich das EEPROM stückweise mit bits vollschreibe und somit nur alle 4096 Minuten einen "erase" brauche. Nur wie mache ich das? wenn ich 00000000 an Adresse x stehen habe und dann 0x01, 0x03, 0x07... bis 0xff mit "eeprom_write_byte" draufschreibe schreibt der attiny dann immer nur ein bit dazu oder löscht er bei jedem schreibvorgang das ganze byte? Robert
Hallo, man kann nur die Bits Ändern, die eine "1" sind. Ein EEprom startet mit 0xff.
:
Bearbeitet durch User
Ok! Das bedeutet wenn ich 0xfe, 0xfc, 0xf8,... ins leere EEprom (0xff) schreibe habe ich keinen Löschvorgang und mein Zähler würde so funktionieren? Robert
:
Bearbeitet durch User
Es gibt die EEPMn-Bit-Kombinationen im EECR, EEPROM Control Register: clear+write, clear, write. Mit 'nur write' KÖNNTE dein spezieles Vorhaben möglich sein. - Probier es doch einfach und berichte uns. Kostet doch nicht mehr, als ein paar Write-Zyklen im EEPROM.
Ob's wirklich funktioniert kann ich dann aber nicht feststellen... Aber ich probier's mal.
:
Bearbeitet durch User
Wieso nicht? Wahrscheinlich nicht in der Originalschaltung, aber mit einem Testaufbau: Kannst doch in einem beschleunigten Testprogramm mal die Bits schritweise umprogrammieren und jedes mal sofort wieder auslesen. Aber selbst wenn man jede Minute ein Byte auf NULL setzt wären das 512 * 100.000 (max. Schreib/Lösch-Zyklen) = 97 Jahre.
Robert W. schrieb: > Ob's wirklich funktioniert kann ich dann aber nicht feststellen... Doch natürlich: schreibe einfach in eine Zelle mit Inhalt 00001111 den Wert 00110011. Was erwartest du dann, wenn die Zelle vor dem Schreiben nicht gelöscht wird? Richtig: es lassen sich nur 1-en auf 0 schreiben, die Ergebnisfunktion ist also ein "UND". 00000011 muss also das Ergebnis sein, wenn die Zelle vorher nicht auf 11111111 gelöscht wird. Wird sie vor dem Schreiben gelöscht, dann kommt 00110011 heraus.
:
Bearbeitet durch Moderator
...oder du erkennst lowvolt schnell genug und schreibst dann mit C gepuffert noch schnell weg. Klaus.
Jakob schrieb: > Aber selbst wenn man jede Minute ein Byte auf NULL setzt > wären das 512 * 100.000 (max. Schreib/Lösch-Zyklen) > = 97 Jahre. Die Frage war ob man ein Bit schreiben kann. Das wären dann 512 x 8 x 100.000 Zyklen. Lothar M. schrieb: > Robert W. schrieb: >> Ob's wirklich funktioniert kann ich dann aber nicht feststellen... > Doch natürlich: schreibe einfach in eine Zelle mit Inhalt 00001111 den > Wert 00110011. Was da rauskommt ist schon klar nur ob er Kontroller das elektisch so umsetzt bleib meiner Meinung nach unklar. Ich probier's trotzdem und geb euch in 776 Jahren bescheid ;-) Robert
Robert W. schrieb: > Ob's wirklich funktioniert kann ich dann aber nicht feststellen... > Aber ich probier's mal. Es funktioniert 100%, EEPROM wird mit EEPM1 = 1 und EEPM0 = 0 nicht vorher gelöscht - ausprobiert. Dieser Trick wurde schon bei alten Telefonkarten angewendet um ein nachfüllen der Karte zu verhindern. Du könntest aber diese Zelle benutzen um alle 8 Minuten einen neuen Minutenwert an einer anderen Stelle im Eeprom ganz normal reinzuschreiben. Ergibt sowohl 800,000 Minuten für diese Zelle als auch 800,000 Minuten pro normale long variable (4 Byt). Und das dann Mal 100... Ob es sich aber lohnt, ist eine andere Frage. Du kannst eine long variable an 128 verschiedenen Adressen im 512 Byte Eeprom reinschreiben. Bei 100,000 Schreib/Löschvorgängen ergibt das 12,800,000 Minuten oder 24 Jahre... Oder, wenn man sich LONG als LL-LH-HL-HH vorstellt, und nur Bytes die sich verändert haben reinschreibt, kann man nach etwa 95,000 Schreibvorgängen den Adresspointer einfach nur um 1 Byte erhöhen und hat auf diese Weise 48,640,000 Minuten oder etwa 92 Jahre Zeit...
:
Bearbeitet durch User
Marc V. schrieb: > Es funktioniert 100%, EEPROM wird mit EEPM1 = 1 und EEPM0 = 0 nicht > vorher gelöscht - ausprobiert. Ich hab's jetzt auch ausprobiert. Es scheint so zu sein wie Ihr sagt. 100% sicher bin ich mir zwar nicht ob das intern doch anders läuft aber 99,9%. > Ob es sich aber lohnt, ist eine andere Frage. Interresse war auch dabei. Danke an alle! Robert
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.