mikrocontroller.net

Forum: Projekte & Code EEProm screiben und lesen


Autor: Jörgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
;========================================
;=  R20 -> Adresse      =
;=  R21 -> Daten      =
;========================================

;----EEPROM-Daten lesen-----------------
eeprom_read:  out  EEAR, r20  ;EEPROM Adresse setzen
    sbi  EECR, 0    ;EEPROM lesen-Bit setzen
eeprom_r_wait:  sbic  EECR, 0    ;Bit wieder gelöscht?
    rjmp  eeprom_r_wait  ;nein
    in  r21, EEDR
    ret
;---------------------------------------

;----EEPROM-Daten schreiben-------------
eeprom_write:  sbic  EECR, 1
    rjmp  eeprom_write
    out  EEAR, r20  ;EEPROM Adresse setzen
    out  EEDR, r21  ;Daten
    sbi  EECR, 2    ;EEPROM MasterWriteEnable
    sbi  EECR, 1    ;EEPROM WriteEnable
eeprom_w_wait:  sbic  EECR, 1
    rjmp  eeprom_w_wait
    ret
;---------------------------------------

Danke an Steffen

Autor: Steffen (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So, ich hab jetzt die Routinen universeller gestaltet. Die Parameter 
werden jetzt über den Stack übergeben.

Im Anhang eine Beispielanwendung

Autor: Steffen (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und hier die überarbeitete "EEPROM.INC"

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Warten auf den Reset von EECR, 0 kann man sich laut Datenblatt 
sparen. Stattdessen sollte lieber geprüft werden, ob ein möglicherweise 
vorhergehender Schreibvorgang schon abgeschlossen wurde.
Und beim Schreiben würde es auch mehr Sinn machen am Anfang zu prüfen ob 
das EEPROM bereit ist, da das Programm NACH dem schreiben ja ruhig 
weiterlaufen kann, auch wenn der Schreibvorgang noch läuft.

MfG
Andreas

Autor: Heye-Tammo Reimers (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich programmiere noch nicht lange ASM, und genau dieses Prog habe ich 
gesucht.
Ich habe es versucht für meinen 8515 umzuschreiben, es tut bei mir ohne 
Probleme.

Vielleicht hat ja jemand interesse daran.

Vielen Dank an Steffen.

MfG

Heye-Tammo

Autor: Heye-Tammo Reimers (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch die passende ASM Datei. Wieder für den 8515, bzw für AVRs mit 
16Bit Stack und Zeigern

Am besten bei debuggen irgendetwas (Möglichst nicht nur 0x00) in den 
EEPROM schreiben, damit man was sieht.

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe da irgendwie ein komisches Problem beim Arbeiten mit dem EEPROM 
im Mega162:

Am Ende des Listings habe ich folgendes zu stehen:
.eseg
text:
.db "Hallo!",0

Die Adressen werden korrekt in die EEARL/H geschrieben aber trotzdem 
landet nach einem sbi EECR,EERE immer nur 0xFF im EEDR.
Der EEPROM-Bereich ist korrekt beschrieben, wie ich nach einem Auslesen 
durch die ISP-Software festgestellt habe.

Hat jemand einen Tipp?

Gruß Max

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleiner Tip. Um bösen Überaschungen vorzubeugen sollte man für die 
Schreibsequenz die Interrupts sperren. Also

;----EEPROM-Daten schreiben-------------
eeprom_write:  sbic  EECR, 1
    rjmp  eeprom_write
    out  EEAR, r20  ;EEPROM Adresse setzen
    out  EEDR, r21  ;Daten
    in   r16,sreg   ; SREG sichern
    cli             ; Interrupts garantiert ausschalten
    sbi  EECR, 2    ;EEPROM MasterWriteEnable
    sbi  EECR, 1    ;EEPROM WriteEnable
    out sreg,r16    ; SREG wieder herstellen, mit oder ohne I Bit
eeprom_w_wait:  sbic  EECR, 1
    rjmp  eeprom_w_wait
    ret
;---------------------------------------

MFG
Falk

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(Noch) benutze ich ja keine Interrupts.

In dem Handbuch vom Mega162 steht, dass der interne Oszillator für das 
Timing des EEPROMs verwendet wird. Ich takte den Prozessor aber mit 
einem externen Clock. Ist das ein Problem?

Gruß Max

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.