EEprom - ATmega16 Datenverlust nach schreiben

OP #477823
Lesenswert?

  ldi r21,0x04  ; R21 mit neuen Wert laden
EEwrite:  sbic EECR,EEWE  ; warten evtl. schreiben des vorherigen Bytes
  rjmp EEwrite      ;
  ldi r16, 0x03      ; Adresse laden  LOW-Teil
          ldi r17, 0x00      ; Adresse laden HIGH-Teil
          out EEARL, r16      ; Adressregister laden
          out EEARH, r17
  out EEDR, r21      ;R21 ins EEPROM speichern
  sbi EECR,EEMWE      ;EEPROM Master Write Enable
  sbi EECR,EEWE      ;EEPROM Master Write Enable


Mit diesem Programmteil beschreibe ich die Adresse 0003h im EEprom neu. 
Das klappt auch ausgezeichnet. Interessanterweise sind jedoch die 
Inhalte der Adressen, die vorher beschrieben waren gelöscht ??
Welche eventuell andere Möglichkeit gibt es, ca. 100 Bytes mit genauer 
Adresse im EEprom abzulegen?
Ich brauche für Einstellungen immer nur bestimmte Werte, die aus diesen 
100 Werten zusammengestellt werden. Eventuell muss es aber möglich sein, 
diese Werte zu ändern.

Vielen Dank Kiebitz
Gast #477852
Lesenswert?

Könnte es sein, dass Du zwischendurch das Programm geändert, also den 
Flash neu beschrieben hast? Beim Löschen des Flash wird das EEPROM 
ebenfalls gelöscht. Es gibt eine Fuse, die dies verhindert.
(Firma: TravelRec.) Persönliche Seite #477951
Lesenswert?

>Welche eventuell andere Möglichkeit gibt es, ca. 100 Bytes mit genauer
>Adresse im EEprom abzulegen?

Keine, das ist schon alles korrekt so. Du mußt aber sicherstellen, daß 
Dir während der EEPROM-Routine kein Interrupt dazwischenfährt, sonst 
kann das programmieren der Speicherzelle in die Hose gehen. 
Gegebenenfalls sperrst Du unmittelbar vor dem EEPROM-Aufruf die 
Interrupts global mit "cli" und schaltest sie danach mit "sei" wieder 
ein.
Gast #478087
Lesenswert?

Hi!
>Welche eventuell andere Möglichkeit gibt es, ca. 100 Bytes mit genauer
>Adresse im EEprom abzulegen?

Im Programm
.eseg
.org 10 ;deine gewünschte Adresse
.db....... ;deine Daten

Wärend der Laufzeit nur wie du es gemacht hast nur die Ausgabe von
 out EEARL, r16      ; Adressregister laden
 out EEARH, r17

umdrehen, erst L dann H

Viel Erfolg, Uwe
OP #478219
Lesenswert?

Vielen Dank für die umgehende Hilfe.
Dér EEprom wird bei mir tatsächlich durch das neue Flashen gelöscht. 
Meine Routine schreibt dann die neuen Werte rein und es scheint wie eine 
Löschung während der Routine. :o(
Ich muss also grundsätzlich erst die Routiene einladen.
Danach erst den EEprom flashen.
Nochmals Danke an alle! Hoffe mich mal revanchieren zu können.
Kiebitz

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