ATMEGA8 schreibt nicht auf EEPROM

Gast #1498581
Hallo!

Ich möchte Messdaten im EEPROM des ATMEGA8 ablegen. Wenn ich diese 
allerdings nach dem Schreibvorgang zurücklese und vergleiche stimmen, 
dann stimmen die Werte nicht überein. Wenn ich den EEPROM über PonyProg 
zurücklese ist er jungfreulich (0xFF). Die verwendeten Routinen habe ich 
direkt aus dem Datenblatt entnommen und lediglich durch die Abschaltung 
der Interrupts erweitert:

;+---------------------------------------------+
;|                 EEPROM_read                 |
;+---------------------------------------------+

; Input:  XH, XL (AdrH, AdrL)
; Output:  Tmp1 (data)
EEPROM_read:
  sbic  EECR,EEWE    ; Wait for completion of prev. write
  rjmp  EEPROM_read
  out  EEARH, XH    ; Set address
  out  EEARL, XL
  sbi  EECR, EERE  ; Start eeprom read
  in  Tmp1, EEDR  ; Read data from data register
  ret

;+---------------------------------------------+
;|                 EEPROM_write                |
;+---------------------------------------------+

; Input:  XH, XL (AdrH, AdrL), Tmp1 (data)
; Output:  none
EEPROM_write:
  sbic  EECR,EEWE    ; Wait for completion of prev. write
  rjmp  EEPROM_write
  out  EEARH, XH    ; Set address
  out  EEARL, XL
  out  EEDR, Tmp1  ; Write data (Tmp1) to data register
  cli      ; disable IR
  sbi  EECR,EEMWE  ; enable eeprom read
  sbi  EECR, EEWE  ; Start eeprom read
  sei
  ret

Bei der Simulation im AVR-Studio (V4.13) läuft alles wunderbar. Bei der 
Initialisierung wird der erste freie Platz im EEPROM (0xFF) gefunden und 
ab dieser Adresse das EEPROM Byte für Byte gefüllt! Nur auf dem realen 
Käfer scheint der EEPROM absolut unberührt zu bleiben.

Habe auch bereits alle Foren hier, welche irgendetwas mit EEPROM zu tun 
haben, durchfortet, aber nichts gefunden was mir weiterhilft:

- Stack Pointer ist korrekt initialisiert
- BODEN fuse habe ich ausprobiert (obwohl Versorgung stabil)
- EESAVE fuse habe ich ausprobiert

Zuletzt habe ich noch eine zweite Warteschleife bzgl. SPMEN in SPMCR 
eingefügt, da dies im Datenblatt erwähnt wird. Auch wenn dies nur 
notwendig ist wenn Self-Programing verwendet wird, was bei meiner 
Anwendung onehin nicht der Fall ist:

;+---------------------------------------------+
;|                 EEPROM_write                |
;+---------------------------------------------+

; Input:  XH, XL (AdrH, AdrL), Tmp1 (data)
; Output:  none
EEPROM_write:
  sbic  EECR,EEWE    ; Wait for completion of prev. write
  rjmp  EEPROM_write
EEPROM_write2:
  in  Tmp3, SPMCR
  sbrc  Tmp3, SPMEN
  rjmp  EEPROM_write2
  out  EEARH, XH    ; Set address
  out  EEARL, XL
  out  EEDR, Tmp1  ; Write data (Tmp1) to data register
  cli      ; disable IR
  sbi  EECR,EEMWE  ; enable eeprom read
  sbi  EECR, EEWE  ; Start eeprom read
  sei
  ret

Nun weiß ich mir keinen Rat mehr. Hat sonst noch irgend jemand eine Idee 
an was es liegen könnte?
Gast #1499268
Also, es hat sich erst mal erledigt:

Habe gerade festgestellt, dass die EEPROM-Daten im PonyProg-Dump erst 
weiter unten aufgelistet sind (Flash in grün, EEPROM blau). Im blauen 
Bereich habe ich die Daten gefunden.

Stimmt nur noch etwas mit meinem Write/Read-Vergleich nicht. Aber das 
bekomme ich schon hin!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.