EEPROM Zugriff

Gast #90542
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
Angehängte Dateien:
Gast
Hi,
in deinem Proggi kann ich keinen Fehler finden (in der Simulation
läufts einwadfrei)
Allerdings fehlt das initialisieren des Stacks

Gruß
-=jens=-
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.