1 bit ins EEPROM schreiben ATTINY85/avr-gcc

OP #4944963
Lesenswert?

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
Gast #4944999
Lesenswert?

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.
Gast #4945059
Lesenswert?

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.
Moderator (Firma: Titel) Persönliche Seite #4945109
Lesenswert?

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.
OP #4945129
Lesenswert?

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
(Firma: Vescomp) #4945219
Lesenswert?

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...
OP #4945356
Lesenswert?

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

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