www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMEL EEPROM Hilfe


Autor: Sebastian Schildt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Noch eine Newbie Frage (nebenbei: Assembler ist irgendwie cool; 
Silvester wusste ich gerade mal wie man "Assembler" schreibt und heute 
kann ich schon Strings vergleichen...)

Ich möchte Daten aus dem EEPROM eines Atmel AVR (8515) auslesen. Ich 
habe in meinen Sources folgendes:

.ESEG
EEP_UUID: .DB 2,3,12,0xFE

Folgendes:

sendUUID:
; Programm holt ein Byte aus dem Epromspeicher
  ldi  XL,LOW(EEP_UUID) ; Übergibt die zu lesende Adresse
  ldi  XH,HIGH(EEP_UUID) ; Low/High-Byte wird separat

s1_loop:
  out  EEARL,XL ; im EEPROM an den EEPROM-Port
  out  EEARH,XH ; übergeben, da 512 Byte verfügbar

EERead:
  sbic  EECR,EEWE  ;if EEWE not clear
  rjmp  EERead    ;    wait more

  sbi  EECR,EERE ; Setze des Read-Enable-Bit EERE im
              ; EEPROM-Control-Register EECR

  in  temp,EEDR ; Lese das Byte aus dem EEPROM-Speicher
  cpi temp,0xFE ;String zu Ende?
  breq s1_end
  rcall sendByte
  adiw XL,1
  rjmp s1_loop
s1_end:
ret

ergibt im Register temp aber immer "falsche" Werte. Als ersten Wert 
erhalte ich z.B. nicht wie erwartet "2" sondern 234, das allerdings 
reproduzierbar. Was mache ich falsch?

MfG

Sebastian

Autor: mikki merten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das EEPROM auch mit programmiert bzw. ein entsprechendes Datenfile 
bei der Assemblierung erzeugt worden? Dies geschieht bei 
Default-Einstellungen nicht automatisch.

Autor: Sebastian Schildt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe die Lösung - zumindest fast.

mikki hatte recht: Das EEPROM muss seperat geladen werden. Wenn ich beim 
AVRStudio im Debug Modus bin, kann ich im Menü "Debug->Up/Download 
Memories" wählen und die erzeugte "tut.eep" hochladen. Dann funktioniert 
alles so, wie ich mir das erhofft habe ;-)

Denoch bleiben Fragen:

Meine eep Datei ist 113 Bytes groß. Wenn ich im AVRStudio Dialog die 
Standardeinstellungen lasse (Save from Address[SfA] 0x0 / Bytes to 
save[BtS] 512) und auf "load and program" klicke dann sagt AVRStudio:

"Selected size is greater than available size with given start address, 
size adjusted to 32. Continue?"

Wenn ich auf Continue klicke, geht alles.

Geb ich im Dialog SfA=0x0, BtS=113 kommt das gleiche

Mit SfA=0x0 und BtS=32 erhalte ich "Nicht genügend Speicher"

Was will mir AVRStudio mit diesen Dialogen sagen?

Zweite Frage: Kann ich AVRStudio4 irgendwie dazu bringen, das EEPROM 
automatisch zu laden sobald ich auf "Debug" klicke? Ich habe keine 
passende Option gefunden.

MfG

Sebastian

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.