Forum: Projekte & Code EEProm screiben und lesen


von Jörgen (Gast)


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

von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

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

Im Anhang eine Beispielanwendung

von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Und hier die überarbeitete "EEPROM.INC"

von Andreas S. (andreas) (Admin) Benutzerseite


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

von Heye-Tammo Reimers (Gast)


Angehängte Dateien:

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

von Heye-Tammo Reimers (Gast)


Angehängte Dateien:

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.

von Max (Gast)


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

von Falk (Gast)


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

von Max (Gast)


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

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.