mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMEGA8 schreibt nicht auf EEPROM


Autor: Lobo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Lobo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.