Forum: Mikrocontroller und Digitale Elektronik EEPROM beim ATXMEGA in Assembler


von Axel J. (Firma: no) (megajo)


Lesenswert?

Hallo,

habe das AVR-Studio 5.1 und ein ATXMega 128 A1 Xpained Board gekauf.
soweit komme ich gut zurecht, nur beim EEPROM im AVR, da habe ich doch 
etwas Probleme...

Habe den Code aus dem xeeprom.h von Joachim Rath entnommen.
der Compiler zeigt keinen Fehler an, aber finde die Daten nicht im 
Fenster Memory1 (AVR-Studio)

Hab ich da noch etwas übersehen???
Ist der Code so einwandfrei ?
Adressierung Richtig ?

wäre toll, wenn sich einer sich das anschauen könnte und ggf einen Tipp 
geben kann
Danke schon einmal vorab


; Speichern eines BYtes im EEPROM des AVR

; Abfrage, ob NVM Memory Status Busy
; wenn besachäftigt, dann warten
loop1:
ldi h2,0x80
lds h3,nvm_status
cp h2,h3
breq loop1

;EEPROM INIT
ldi h3,0x08
sts nvm_ctrlb,h3

;Adresse 0
ldi h3,0x10
sts nvm_addr0,h3

;Adresse 1
ldi h3,0x10
sts nvm_addr1,h3

;Adresse 2
ldi h3,0x00
sts nvm_addr2,h3

;Daten
ldi h3,0x01F
sts nvm_data0,h3

;EEPROM-Page löschen/schreiben initialisieren
ldi h3,NVM_CMD_ERASE_WRITE_EEPROM_PAGE_gc
sts NVM_CMD,h3

;eine 1 ins CPU-CCP Register
ldi h3, CCP_IOREG_gc
sts CPU_CCP,h3

;Löschen/schreiben ausführen
ldi h3,1
sts NVM_CTRLA, h3

;dauert ein paar Durchgänge
loop2:
ldi h3,0x82
lds h2,nvm_status
cp h3,h2
breq loop2


fertisch...

aber keine Daten im EEPROM (Memory1 im AVR Studio)

: Verschoben durch User
von Jürgen S. (schimmi)


Lesenswert?

Hallo Axel,

sorry, wenn ich Dir ein wenig zu nahe treten sollte, aber warum lädst Du 
nicht einfach die Atmel Studio Version 6.0 herunter und beginst mit 
einem der ASF NVM Software Examples für das Xplain Board?

Es macht in meinen Augen keinen Sinn für solche Banalien, wie EEPROM 
lesen und schreiben, einen XMega in Assembler zu programmieren, wenn 
Atmel bereits eine fertige Sofware Library samt Beispiele liefert...

Liebe Grüße,
Schimmi

von Moby (Gast)


Lesenswert?

Warum sollte er sich wegen "Banalien" erst noch in C und das ASF 
Monstrum einarbeiten?

von Axel J. (Firma: no) (megajo)


Lesenswert?

HAllo,

habe Studio 6 auf dem Rechner, und es hat nichts mehr mit einfachem 
Programm zu tun, einfach nur Assembler... mehr ist nicht nötig.

Arbeite beruflich mit C++ und C#, aber gerade einen AVR programmieren, 
da ist Assebmler die Sprache überhaupt. Ich habe nur so vollständige 
Kontrolle über die einzelnen Schritte im Programm.

Und Assembler ist eine feine Sache, darauf möchte ich nicht 
verzichten...

Es gibt eben auch die, die ihr Brötchen noch selber schmieren und nicht 
fertig belegt beim Bäcker kaufen, oder von mama schmieren lassen (konnte 
ich mir jetzt nicht verkneifen - sorry)

in C hat man seine Libs usw, und oft weiss keiner genau, was da im 
einzelnen abläuft. Das ist nicht meine Welt...



Schreiben eines Bytes an eine Speicherstelle im EEPROM
Habe etwas probiert, und auch eine Lösung gefunden...

e_schreiben:

  ldi   Temp3, NVM_EEMAPEN_bm; Enable EEPROM Memory Mapping
  sts    NVM_CTRLB, Temp3

  mov R17,geschw; zu speichernder Wert

  LDI YH, $10
  LDI YL, $00
  ST Y, R17

NVM0:
   LDS Temp3, NVM_STATUS
   SBRC Temp3, 7
   RJMP NVM0

   LDI Temp3, $00
   STS NVM_ADDR0, Temp3

   LDI Temp3, NVM_CMD_ERASE_WRITE_EEPROM_PAGE_gc
   STS NVM_CMD, Temp3

   LDI Temp3, $D8
   STS CPU_CCP, Temp3

   LDI Temp3, $01
   STS NVM_CTRLA, Temp3

NVM1: ;
   LDS Temp3, NVM_STATUS
   SBRC Temp3, 7
   RJMP NVM1

 ret



e_lesen:

NVM3:
   LDS Temp3, NVM_STATUS
   SBRC Temp3, 7
   RJMP NVM3

   LDI Temp3, 0x06
   STS NVM_CMD, Temp3

   ldi   Temp3, 0; DISEnable EEPROM Memory Mapping
  sts    NVM_CTRLB, Temp3

   LDI Temp3, $0
   STS NVM_ADDR0, Temp3

   LDI Temp3, $0
   STS NVM_ADDR1, Temp3

   LDI Temp3, $D8
   STS CPU_CCP, Temp3

   LDI Temp3, $01
   STS NVM_CTRLA, Temp3

NVM4: ; wait just for test
   LDS Temp3, NVM_STATUS
   SBRC Temp3, 7
   RJMP NVM4
   LDS geschw,NVM_data0

ret


Schön, dass die einzelnen Schritte noch klar zu erkennen sind...
Hat etwas gedauert das im einzelnen heraus zu fummeln.

WICHTIG: im Studio 5.1 oder 6 wird das beschreiben des EEPROM nicht im 
Memofenster angezeigt !  Lesen mit vorgegebenen Werten funktioniert.
Das hat mir viel Zeit gekostet, solch einen Mangel in der 
AVR-Studio-Software erst mal zu erkennen.
Man sucht sich ja nen Wolf, und denkt beim schreiben, da geht was 
nicht...

Nichts für ungut, aber es geht alles auch in Assembler...

von Jürgen S. (schimmi)


Lesenswert?

Moby schrieb:
> Warum sollte er sich wegen "Banalien" erst noch in C und das ASF
> Monstrum einarbeiten?
Vielleicht weil wir heute unsere Briefe auch nicht mehr mit Hammer und 
Meißel auf Steinplatten schreiben... ;)

Liebe Grüße,
Schimmi

von Moby (Gast)


Lesenswert?

Jürgen Schilling schrieb:
> Vielleicht weil wir heute unsere Briefe auch nicht mehr mit Hammer und
> Meißel auf Steinplatten schreiben... ;)

Zugegeben, der Umgang mit Hammer und Meißel kann manchmal recht mühsam 
sein. Dafür behält man zu 100% die Kontrolle über-, die tatsächliche 1:1 
Ansicht auf- und eine optimale Paßform des Programmcodes. Demgegenüber 
kommt mir C(++) wie eine große Baggerschaufel vor, die zwar viel 
(unnützes) Material bewegt, das aber ohne viel Gefühl und stets mit der 
Gefahr, den kleinen LKW Microcontroller zu überladen :) Mir kommt 
jedenfalls C nicht ins Haus; wenn es schnell und ohne besondere 
Ansprüche gehen soll dann meinetwegen Bascom...


Moby.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Axel Johannes schrieb:
> Nichts für ungut, aber es geht alles auch in Assembler...

Moby schrieb:
> Mir kommt
> jedenfalls C nicht ins Haus;

Ha, es gibt sie noch, die echten Programmierer!

100% ACK.

von Axel J. (Firma: no) (megajo)


Lesenswert?

Hab nichts gegen C Programmierung, hab ich den ganzen Arbeitstag lang 
mit zu tun. Dennoch mag ich beim kleinen Processor auch sehr gerne 
Assembler.

Zudem bei C auch alles mögliche vorab definiert und/oder verstanden 
werden muss, was nicht unbedingt eine Erleichterung ist. Sätestens dann, 
wenn ein Code nicht so läuft wie das soll. Beide Sprachen haben ihre 
Berechtigung. Dennoch möchte ich weiterhin in Asssembler schreiben. da 
direkter.

C ist auch eine zähe Sprache, aber auch in Assembler kann man sich 
mächtig verzetteln. Und ein ATXMEGA ist da auch schwerer zu beherrschen 
als ein ATMEGA, was C sicher begründen mag.

Was mich beim ATXMEGA und dem AVR-Studio in C oder Assembler richtig 
nervt ist, dass das EEPROM-Memofenster beim ATXMEGA128A1 nicht 
beschrieben wird. Es ist keine Kontrolle vorhanden, was ins EEPROM 
geschrieben wird.  Simulation im AVR-Studio gar nicht möglich. Das 
Problem habe ich bei Version 4,5 und 6.

Wenn das notwendig wird zu überprüfen, weil ein Code nicht sauber läuft, 
dann wird es richtig heftig.

Daher die Frage: gibt es einen AVR_X_MEGA, der auch das Memofenster 
unterstützt? Dass das beschreiben vom EEPROM im AVR-Studio sichtbar 
wird?

Das würde mir richtig helfen.

von Robert (Gast)


Lesenswert?

Mit welchem Debugger arbeitest Du denn?

von Axel J. (Firma: no) (megajo)


Lesenswert?

derzeit mit dem Studio 5.1 von Atmel

von Robert (Gast)


Lesenswert?

Axel Johannes schrieb:
> derzeit mit dem Studio 5.1 von Atmel

Das allein reicht nicht- Du brauchst noch einen Debugger wie ICE3, der 
dann via PDI angeschlossen wird! Dann kannst Du im Debug-Modus bei 
gestopptem Programmlauf live in den Xmega reinschauen und auch das 
EEPROM-Fensterchen dürfte sich dann mit plausiblem Inhalt füllen... Oder 
hab ich Dein Problem völlig falsch verstanden?

von Axel J. (Firma: no) (megajo)


Lesenswert?

hab keinen derartigen debugger, ist ein Heimprojekt, da muss ich etwás 
sparsamer sein ;-)

Später ma, bislang konnte ich ohne sehr gut zurecht kommen.

Es geht um Studio 5.1 oder auch 6 von Atmel, in der Simulation keine 
Beschreibung des Memo_Fensters bei EEPROM.

Aber vielleicht tut es ein anderer ATXMEGA... ???

von Robert (Gast)


Lesenswert?

Mit Debugger sicher jeder AVR (mit JTAG oder PDI Schnittstelle). So wie 
jetzt hast Du natürlich nur ein simuliertes Memo-Fenster und kannst 
nicht in echt in den Controller schauen.

In der Hilfe zum Simulator des aktuellen Studio 6.0.1938 heißt es:

"Writing/erasing Flash (using SPM) and EEPROM from application not yet 
implemented in ATXmega devices"

Damit hast Du mit Deinem Anliegen (vorerst) schlechte Karten.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Axel Johannes schrieb:
> C ist auch eine zähe Sprache, aber auch in Assembler kann man sich
> mächtig verzetteln. Und ein ATXMEGA ist da auch schwerer zu beherrschen
> als ein ATMEGA, was C sicher begründen mag.

Ein XMEGA ist rein vom Umgang her ein Mega mit ordentlich Dampf. In 
Assembler macht das keinen Unterscheid. Die Befehle sind gleich, 
lediglich die Definitionsfiles des XMEGAs sind deutlich aufgeräumter und 
man findet alles sehr genau beschrieben und selbsterklärend.

Axel Johannes schrieb:
> Was mich beim ATXMEGA und dem AVR-Studio in C oder Assembler richtig
> nervt ist, dass das EEPROM-Memofenster beim ATXMEGA128A1 nicht
> beschrieben wird.

Habe ich noch nie gebraucht. Debuggen löse ich mit Pinwackeln 
(LEDs...)und Ausgaben über genormte Schnittstellen. Das reicht in aller 
Regel. Ein Speicheroszi erledigt den Rest.

Axel Johannes schrieb:
> Es ist keine Kontrolle vorhanden, was ins EEPROM
> geschrieben wird.

Diese Kontrolle sollte beim Programmierer selbst liegen. Die Workarounds 
für die alten XMEGAs bezüglich EEPROM funktionieren gut und die neuen 
XMEGAS machen da gar keine Probleme und sind rasant schnell mit EEPROM 
und FLASH, vergliechen mit den Megas. Die Zugriffe sind auch sehr 
komfortabel über Kommandos und linearen Speicherbereich eingeichtet.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Nur nochmal zur Sicherheit: Die Errata bzgl. EEPROM und XMega A1 hast du 
gelesen? Dann is' gut. Im Moment noch kein Problem, aber später wirst du 
in der EEPROM Schreibroutine die Interrupts sperren müssen. Mir war der 
Workaround mit Sleepmode usw. zu kompliziert bzw. sicherheitsrelevant, 
ich benutze deswegen ein externes 93C46.

von Axel J. (Firma: no) (megajo)


Lesenswert?

Einfacher? naja, wenn denn die CPU auch das tun würde was der Code 
vorgibt...

Habe es bislang auch so geschafft das EEPROM zu beschteiben und 
auszulesen.

Dass solch ein Flagschiff von Processor nicht vollständig auch im 
AVR-Studio unterstützt wird, das finde ich doch schon etwas sehr schade.

Einfacher finde ich es nicht einen AT_X_MEGA zu programmieren, ganz im 
Gegenteil. Die vielen Optionen müssen auch erst einmal verstanden 
werden. Später sagen, das ist alles viel besser... OK... aber bis dahin 
ist es ein längerer Weg. Es genügt ja nicht die Register beschreiben zu 
können, sondern es muss auch verstanden werden, was dahinter steckt. Und 
das ist deutlich anspruchsvoller als ein ATMEGA.

Habe einen Code geschrieben, der das EEPROM vollständig beschreibt und 
danach auslesen kann - fehlerfrei. Aber in einem anderen Programm diesen 
Code angewendet, da geht es nicht... Und dann verstehen - warum géht das 
nicht ??!! Und das ist sicher kein Spaß, ohne genauere Daten zur 
Kontrolle aus dem ATXMEGA bekommen, den Fehler zu finden. An diesem 
Problam arbeite ich seit 3 Tagen, und das ist nicht lustig.

Für mich ziehe ich da eine Konsequenz... solange es da keine 
vollständige Unterstützung mit dem AVR-Studio und debuggen gibt, solange 
werde ich lieber auf die Processoren setzen, die das können.

Ich kann auch nicht wirklich nachvollziehen, warum Atmel keine 
vollständige Unterstützung mit dem AVR-Studio anbieten kann.

Aber egal, so werde ich mit dem ATXMEGA mit Sicherheit nicht wirklich 
glücklich.

von Moby (Gast)


Lesenswert?

Axel Johannes schrieb:
> Aber egal, so werde ich mit dem ATXMEGA mit Sicherheit nicht wirklich
> glücklich.

Bei ASM Programmierung und erst recht mit einem leistungsfähigen 
Prozessor muß man einfach dranbleiben und hartnäckig sein, dann wird das 
schon. Anspruchsvoll bedeutet eben auch einen gewissen Zeiteinsatz, um 
den Bits auf den Grund zu gehen- aber das lohnt sich. Du bist sicher 
noch am Anfang des Wegs. Das merkt man daran, daß Du Dich so an der 
fehlenden EEPROM-Unterstützung im Simulator verbeißt. Dieser Mangel ist 
aktuell sicher kein Ruhmesblatt für Atmel, aber für die 
Programmentwicklung kein essentielles Hindernis, denn viele Wege führen 
nach Rom.

Axel Johannes schrieb:
> Und das ist sicher kein Spaß, ohne genauere Daten zur
> Kontrolle aus dem ATXMEGA bekommen, den Fehler zu finden.

Wenn Du wirklich ernsthaft und professionell an die Lösung von 
Programmierproblemen gehen willst und reale Daten aus dem ATXMEGA willst 
mußt Du Dir wirklich einen Hardware-Debugger anschaffen, denn alles 
andere ist deutlich umständlicher.

Axel Johannes schrieb:
> wenn denn die CPU auch das tun würde was der Code
> vorgibt...

Das tut sie in der Regel auch, wenn man die Errata berücksichtigt.
Relativ fehlerfrei sind die neuen U-Typen, z.B. XMegaA4U

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.