Forum: Mikrocontroller und Digitale Elektronik .eep Datei erzeugen (Blutjunger Anfänger)


von marcus k. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Auch auf die Gefahr hin ausgelacht zu werden.
Warum wird bei diesem Code keine .eep Datei erzeugt, damit ich das
EEPROM meines ATMEGA16 nutzen kann.(AVR Studio, STK500)

Und wenn noch nicht alle vor lachen vom Stuhl gefallen sind, schieb ich
noch einen hinterher.
Ich möchte 16-Werte Speichern. Wie geht das das Programm sich nacher
den richtigen Wert wieder herauspickt??? (einfaches beispiel genügt)

BTW: Ich programmier erst seit 2 Tagen Assembler. Bitte habt
nachsicht.

Danke

von Bernhard S. (bernhard)


Lesenswert?

> Auch auf die Gefahr hin ausgelacht zu werden.
Nur keine Panik, so schnell lacht hier keiner

> damit ich das EEPROM meines ATMEGA16 nutzen kann

Du kannst Dein EEPROM auch so nutzen, ohne "eep"

Die Daten werden Durch Dein Programm automatisch in den EEPROM
eingetragen "EEPROM_write:"

> Ich möchte 16-Werte Speichern.

Ja? Aber wohin den? Sicherlich in den EEPROM?

Natürlich muss vorher festgelegt werden, wo genau die Datenbytes
abgelegt werden bzw zu finden sind.

Hier ein kleines Beispiel:

;###################################################################
;###################################################################
;###################################################################
; INPUT:  TEMP1 Adresse(low)
;    TEMP2 Adresse (High)
;OUTPUT:   TEMP1 DATEN
EEPROM_read:
  sbic EECR,EEWE     ; Wait for completion of previous write
  rjmp EEPROM_read
  out  EEARH, temp2  ; Set up address in address register
  out  EEARL, temp1
  sbi  EECR,EERE    ; Start eeprom read by writing EERE
  in    temp1,EEDR    ; Read data from data register
ret
;###################################################################
;###################################################################
;###################################################################
; INPUT:  TEMP1 Adresse(low)
;    TEMP2 Adresse (High)
;    TEMP  DATEN
EEPROM_write:
  sbic EECR,EEWE; Wait for completion of previous write
  rjmp EEPROM_write
  out  EEARH,temp2; Set up address  in address register
  out  EEARL,temp1
  out  EEDR, temp  ; Write data  to data register
  sbi  EECR, EEMWE; Write logical one to EEMWE
  sbi  EECR, EEWE  ; Start eeprom write by setting EEWE
ret




Meine Bankverbindung gebe ich Dir später ;)


Bernhard

von Bernhard S. (bernhard)


Lesenswert?

PS: Ein EEPROM kann nicht beliebig oft beschrieben werden,
glaube nach 100.000 Schreibzyklen funktioniert er nicht mehr ;)

von Dominik (Gast)


Lesenswert?

>> PS: Ein EEPROM kann nicht beliebig oft beschrieben werden,
glaube nach 100.000 Schreibzyklen funktioniert er nicht mehr ;)

Naja ich glaub diese Angaben sind nicht allzu pessimistisch zu
betrachten... 100.000 Zyklen sind einiges und die musst du erstmal
hinbekommen ^^

von Bernhard S. (bernhard)


Lesenswert?

@Dominik

>Naja ich glaub diese Angaben sind nicht allzu pessimistisch zu
>betrachten...


Stimmt. Aber man sollte nicht permanent den EEprom beschreiben, dann
wäre das µC-EEprom-Leben wirklich nur von kurzer Dauer ;)

von Marcus K. (Gast)


Lesenswert?

Danke erstmal

Allerdings habe ich noch nicht ganz geblickt wie ich dem EEPROM sagen
soll das er den Wert an einer anderen Stelle Speichern soll. Ein ganzes
Register verbraten kann ja auch nicht der richtige weg sein. Oder doch
???

von Bernhard S. (bernhard)


Lesenswert?

>Allerdings habe ich noch nicht ganz geblickt wie ich dem EEPROM sagen
>soll das er den Wert an einer anderen Stelle Speichern soll


in den Registern TEMP1 und TEMP2 wird die EEPROM-Adresse übergeben und
dann liest der µC den EEPROM an einer ganz bestimmten Adresse
(EEPROM_ADRESSE_XX) aus   ;)

Das gelesene Byte liegt dann im Register TEMP vor

Beim Schreiben im EEprom wird genauso verfahren, nur andersrum.

BSP:

ldi temp1, low (EEPROM_ADRESSE_XX)
ldi temp2, high (EEPROM_ADRESSE_XX)
rcall EEPROM_read                   ; input: TEMP1 TEMP2 Output: temp

von Marcus K. (Gast)


Lesenswert?

>in den Registern TEMP1 und TEMP2 wird die EEPROM-Adresse übergeben >und
dann liest der µC den EEPROM an einer ganz bestimmten Adresse
>(EEPROM_ADRESSE_XX) aus   ;)

Also wenn das XX für eine HEX-Adresse, und TEMP1 und TEMP2 die untere
und oberer Grenze darstellen, hab ichs verstanden

von Bernhard S. (bernhard)


Lesenswert?

>Also wenn das XX für eine HEX-Adresse, und TEMP1 und TEMP2 die untere
>und oberer Grenze darstellen, hab ichs verstanden

....das freut mich.... prima :)

von Marcus K. (Gast)


Lesenswert?

Fettes Dankeschön an Dich

von Marcus (Gast)


Lesenswert?

Naja, ich fürchte ich bin grad ein bischen dumm g

Ich hab jetzt mal munter die Register geändert, aber wenn ich im
EEPROM-Fenster(Debugger) nachschaue, steht mein Wert immer an der
selben Stelle 0x0.

Ein kleines Beispiel an dem ich sehe wie der Wert an unterschiedlichen
Stellen abgespeichert wird, würde mir weiterhelfen

von Bernhard S. (bernhard)


Lesenswert?

Beispiel für ein Byte (66) schreiben in EEprom-Adresse (260):

ldi temp, 66
ldi temp1, low (260)
ldi temp2, high(260)
rcall EEPROM_write


Beispiel für ein Byte lesen aus EEprom-Adresse (260):

ldi temp1, low (260)
ldi temp2, high(260)
rcall EEPROM_read

in "temp" befindet sich nun das aus demm EEprom gelesene Zeichen

Bernhard

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.