Forum: Mikrocontroller und Digitale Elektronik EEPROM Zugriff


von Stefan Kneller (Gast)


Angehängte Dateien:

Lesenswert?

Tag werte Gemeinde,

seit 2 Tagen suche ich nach meinem Fehler beim EEPROM Zugriff.
Intensives nachdenken, Recherche hier und im Datenblatt des 4433 haben
mir leider nicht weitergeholfen, weshalb ich nun hier fragen möchte.

Ich möchte ein byte ins EEPROM schreiben und aus Redundanzgründen auf 2
weiteren Zellen in festem Abstand ablegen. Mein Programm legt jedoch
die Daten immer nur auf der ersten Adrese im EEPROM ab, die beiden
übrigen Zellen bleiben unbeschrieben. Wo ist mein Denkfehler ?

Gruss
Stefan Kneller

beispielhafter Auszug aus der Hauptroutine:
(alle 6 ms wird diese durch einen TimerInterrupt unterbrochen,
in dem aber die Registerinhalte als erstes gerettet werden)

ldi  temp,0x00AA  ;lade AA
ldi  temp1,01  ;lade Adresse 1
rcall  eewrite3  ;und schreibe Datentripel ins EEPROM

;*******  Unterprogramm schreibt die Daten aus temp  **************
;*******  als Tripel auf die Adresse in temp1,       **************
;*******  temp1 + 80 und temp1 +160                   *************

eewrite3:
rcall  eewrite    ;schreibe Daten in temp nach Adresse temp1
subi  temp1,-80  ;erhöhe adresse um 80
rcall  eewrite    ;und schreibe gleiche Daten dorthin
subi  temp1,-80  ;Adresse nochmal um 80 erhöhen und
rcall  eewrite    ;gleiche Daten jetzt dort ablegen
ret      ;fetig

;*******  Unterprogramm schreibt die Daten in temp  **************
;*******  auf die EEPROM Adresse von temp1  *************

eewrite:
sbic  EECR,EEWE  ;wird momentan noch geschrieben ?
rjmp  eewrite    ;dann warten
out  EEAR,temp1  ;sonst hole Adresse
out  EEDR,temp  ;und Datem
cli      ;sperre Interrupts
sbi  EECR,EEMWE  ;setze MasterWriteEnable
sbi  EECR,EEWE  ;und strobe EEPROM
sei      ;Interrupts wieder freigeben
ret      ;fertig

von DerInder (Gast)


Lesenswert?

Hi,
in deinem Proggi kann ich keinen Fehler finden (in der Simulation
läufts einwadfrei)
Allerdings fehlt das initialisieren des Stacks

Gruß
-=jens=-

von CaseModder (Gast)


Lesenswert?

Tja und ohne Stack wird's halt mir den rcall's nix!

Gruß
~=[CaSeMoDdEr]=~

von Stefan Kneller (Gast)


Lesenswert?

ich oute mich hier gerne als Trottel, in der Hoffnung,
dass andere Leser aus meinen Fehlern lernen:
Das Programm funktioniert so, wie unten gelistet, in den Assemblercode
auf dem Controller hatte sich durch meine Unachtsamkeit ein M zuviel
eingeschlichen:

eewrite:
sbic  EECR,EEMWE  ;HIER MUSS NATÜRLICH "EEWE" HIN, Grrrr
rjmp  eewrite     ;dann warten
out   EEAR,temp1  ;sonst hole Adresse
out   EEDR,temp   ;und Datem
cli               ;sperre Interrupts
sbi   EECR,EEMWE  ;setze MasterWriteEnable
sbi   EECR,EEWE   ;und strobe EEPROM
sei               ;Interrupts wieder freigeben
ret               ;fertig

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.