mikrocontroller.net

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


Autor: marcus k. (Gast)
Datum:
Angehängte Dateien:

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

Autor: Bernhard S. (bernhard)
Datum:

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

Autor: Bernhard S. (bernhard)
Datum:

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

Autor: Dominik (Gast)
Datum:

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

Autor: Bernhard S. (bernhard)
Datum:

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

Autor: Marcus K. (Gast)
Datum:

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

Autor: Bernhard S. (bernhard)
Datum:

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

Autor: Marcus K. (Gast)
Datum:

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

Autor: Bernhard S. (bernhard)
Datum:

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

Autor: Marcus K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fettes Dankeschön an Dich

Autor: Marcus (Gast)
Datum:

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

Autor: Bernhard S. (bernhard)
Datum:

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

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.