www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Register in EEPROM speichern 8515


Autor: Sebastian Frank (sebastianfrank)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich hab mir schon ein paar Beiträge angesehen. Leider hab ich immer noch 
nicht
verstanden wie ich die Werte eines Registers ins EEPROM lade und beim 
Neustart wieder auslese.
Vllt kann mir jemand helfen. Ich habs so verstanden dass ich wenn ich 2 
register hab einfach 2 adressen einlese und dann die Werte an EEDR 
übergebe....
klappt aber leider nicht

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim Schreiben darf nichts dazwischenfunken (Interrupts) und die 
Brown-Out-Detection muss aktiviert sein.

Schreib- und Leseroutinen sind hier zu finden.

Gruss Otto

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Sebastian Frank (sebastianfrank)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, ich habs mal abkopiert und umgeschrieben, ich verstehs zwar 
leider immer noch nicht aber es funzt ^^

Autor: Sebastian Frank (sebastianfrank)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach es geht doch noch nicht ;_; vllt kann mir jemand mal schreiben was 
ich schreiben muss damit ein register gespeichert wird, bei mir wird 
irgentwie keine datei erzeugt die es speichert

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>ach es geht doch noch nicht ;_; vllt kann mir jemand mal schreiben was

Zeig doch mal, was du hast.

MfG Spess

Autor: SebastianFrank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab das hier mal probiert:
.include "8515def.inc"

main:
    ;TEST

    ldi r16,low(ramend)
    out SPL, r16
    ldi r16,high(ramend)
    out sph,r16
    rcall eplesen
    ldi r17, 0xFF
    push r17
    ldi r17, 0xF0
    out portd, r17
    pop r17
    out portb, r17
    rcall epschreiben
    rjmp main

epschreiben:cli
      push r17
      ldi r17,low(ramend)
      out EEARL, r17;(1)
      ldi r17, high(ramend)
      out EEARH, r17(1)
      cbi EECR,EEWE
      out EEDR,r17(2)
      sei
      ret

eplesen:  cli
      ldi r17,low(ramend)
      out EEARL, r17
      ldi r17, high(ramend)
      out EEARH, r17
      cbi EECR,EEWE
      in r17,EEDR
      sei
      out Porta, r17
      ret
hab alle interrupts ausgeschaltet, ich habs mal so verstanden dass man 
hier bei (1) einfach die adresse übergibt und dann bei (2) den wert. 
Beim lesen hab ichs halt umgekehrt gemacht. vllt is das ne saudumme 
frage und ich habs wirklich net drauf ^^ aber unser professor hat mit 
uns noch nie programmiert und alle seine beispielprogramme laufen nicht 
;_;

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"ramend" ist nicht die richtige Adresse !

(dient nur zur initialisierung des Stack!)

Otto

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

1. Lass die Finger von 'ramend' (ausser bei der Stackinitialisierung). 
Wenn du dort etwas manipulierst wird das unweigerlich zu 
Programmabstürzen führen.

2.'ramend' zu EEPROM-Adressierung zu verwenden ist unsinnig, da RAM und 
EEPROM unterschiedliche Grösse haben können. Beim 8515 ausnahmsweise 
gleich.

3. 16-Bit Register (EEAR) werden in der Reihenfolge H-Register, 
L-Register beschtrieben.

4. Wenn du Speicher im EEPROM benutzen willst, dann besser so:

    .eseg

blabla:        .byte 1  (reseviert 1 Byte im EEPROM)

    . cseg

Programm

Zugriff mit:
      ....
      ldi r17,low(blabla)
      out EEARH, r17
      ldi r17, high(blabla)
      out EEARL, r17
      ....

MfG Spess

Autor: Jörg G. (joergderxte)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>2.'ramend' zu EEPROM-Adressierung zu verwenden ist unsinnig, da RAM und
>EEPROM unterschiedliche Grösse haben können. Beim 8515 ausnahmsweise
>gleich.

'RAMEND' und 'EEPROMEND" (so vorhanden) sind aber auch bei gleichgroßem 
RAM und EEPROM unterschiedlich - die Register und die IO-Adressen liegen 
ja im RAM, werden aber nicht bei der Größe mitgerechnet.

/klugscheiß
, Jörg

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.