;======================================== ;= 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
So, ich hab jetzt die Routinen universeller gestaltet. Die Parameter werden jetzt über den Stack übergeben. Im Anhang eine Beispielanwendung
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
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
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.
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
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
(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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.