mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM Zugriff


Autor: Stefan Kneller (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: DerInder (Gast)
Datum:

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

Gruß
-=jens=-

Autor: CaseModder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja und ohne Stack wird's halt mir den rcall's nix!

Gruß
~=[CaSeMoDdEr]=~

Autor: Stefan Kneller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.