Forum: Compiler & IDEs Werte im eeprom AT90S2313 geht verloren


von Markus _. (markush)


Lesenswert?

Hi Leutz,

ich speichere zwei Werte im Eprom des 2313 mittels folgender Funktion:
1
     eeprom_warten();
2
     eeprom_write_byte( (unsigned char *)10, i >> 6 & 0x1F);
3
     eeprom_warten();
4
     eeprom_write_byte( (unsigned char *)11, (i & 0x3F) | (~i >> 7 & 0x40));

Hinter eeprom_warten versteckt sich nur der Aufruf 
while(!eeprom_is_ready()); als Funktion.

Die Werte werden brav geschrieben. µC vom Strom, kurz gewartet und 
wieder dran - Werte sind immer noch da. Jetzt kommt's aber: Nach 
nochmaligem Strom weg und wieder da ist immer der zweite Wert weg bzw. 
255.

Wie kommt das? Es wird keine Schreibfunktion mehr aufgerufen. Beim Strom 
einschalten werden nur einmalig die Werte ausgelesen (eeprom_read_byte). 
Ich hab auch schon verschiedene Speicherstellen probiert, es ist immer 
der zweite Wert weg, das kann doch nicht sein, oder überseh ich da was??

Gruß, Markus

von Benedikt K. (benedikt)


Lesenswert?

Das ist normal, steht glaube ich auch im Errata drin.
Sobald die Spannung zu gering wird, macht der uC Mist und kann u.a. die 
EERPOM Werte löschen.
Lösung: externes Reset IC verwenden, oder direkt auf den tiny2313 mit 
interner Brownout detection verwenden.

von Markus _. (markush)


Lesenswert?

Hi,

aber wieso geht dann immer nur der zweite Wert verloren? Außerdem heißt 
es immer, es wären nur die ersten Speicherzellen davon betroffen? 
Deshalb hab ich auch Speicherbereiche weiter hinten genommen.

Gruß, Markus

von Peter D. (peda)


Lesenswert?

Markus Hiller wrote:
> Hi,
>
> aber wieso geht dann immer nur der zweite Wert verloren?

Warscheinlich, weil die Adresse beim Ausschalten darauf zeigt.


Peter

von Markus _. (markush)


Lesenswert?

Peter Dannegger wrote:
>
> Warscheinlich, weil die Adresse beim Ausschalten darauf zeigt.
>
>
> Peter

Ah, das klingt logisch, das hilft mir schon mal sehr weiter!
Mal schauen wie ich das Problem umschiffen kann.

Danke!

Gruß; Markus

von Karl heinz B. (kbucheg)


Lesenswert?

> Mal schauen wie ich das Problem umschiffen kann.

Reservier dir im EEprom irgendwo ein Byte,
das zu sonst nichts anderen benutzt wird, als das
der µC beim Ein/Ausschalten da lustig seine Werte
ändern darf.

Nachdem du deine wirklichen Daten geschrieben hast,
schreibst du noch in dieses Dummy-Byte und setzt
so das EEProm Adressregister auf einen ungefährlichen
Wert, sodass dir der µC deine richtigen Daten nicht
mehr zerschiest.

Die Speicherstelle 0 würde sich hervorragend
dafür eigenen :-)

von Markus _. (markush)


Lesenswert?

Karl heinz Buchegger wrote:
>
> Reservier dir im EEprom irgendwo ein Byte,
> das zu sonst nichts anderen benutzt wird, als das
> der µC beim Ein/Ausschalten da lustig seine Werte
> ändern darf.
>
> Nachdem du deine wirklichen Daten geschrieben hast,
> schreibst du noch in dieses Dummy-Byte und setzt
> so das EEProm Adressregister auf einen ungefährlichen
> Wert, sodass dir der µC deine richtigen Daten nicht
> mehr zerschiest.
>
> Die Speicherstelle 0 würde sich hervorragend
> dafür eigenen :-)

Hi,

ja so in der Art hatte ich das auch vor. Ich werd mal testen ob es 
reicht wenn ich eine andere Speicherstelle (0 :-)) auslese.
Falls nicht schreib ich halt da einen Dummy-Wert rein.

Gruß, Markus

von Markus _. (markush)


Lesenswert?

Alles klar, es funzt jetzt.

Das reine Auslesen der Adresse 0 reicht nicht aus, verursachte dann 
immer noch Probleme. Nach dem Auslesen der Adressen schreib ich jetzt in 
die Adresse 0 noch einen dummy-Wert und dann gibt's keine Probleme.

Vielen Dank für die Hinweise.

Gruß, Markus

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
Noch kein Account? Hier anmelden.