mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM Wert von einer bestimmten Adresse ermitteln


Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

ich habe vor aus dem EEPROM des Atmega48 den Wert auszulesen, der an der 
Adresse 0x10 liegt.

Wie muss ich da vorgehen? Kann ich eine Variable direkt auf die 
Speicheradresse setzen. Hab gerade im Tutorial geschaut, dort ist aber 
nur beschrieben, wie man den ganzen Bereich des EEPROM's auf feste 
Adressen legt.

Gruß

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal ins Datenblatt.

Zumindest beim ATMEGA8 ist der Zugriff auf den EEPROM ausführlich 
beschrieben. Sogar glaube mit Code.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tim wrote:
> Guten Morgen,
>
> ich habe vor aus dem EEPROM des Atmega48 den Wert auszulesen, der an der
> Adresse 0x10 liegt.
>
> Wie muss ich da vorgehen? Kann ich eine Variable direkt auf die
> Speicheradresse setzen. Hab gerade im Tutorial geschaut, dort ist aber
> nur beschrieben, wie man den ganzen Bereich des EEPROM's auf feste
> Adressen legt.
>

In C?

Das geht ganz einfach:
uint8_t myByte;
 
    myByte = eeprom_read_byte((void*)0x10);

Besser ist es aber sich für die magische Konstante 0x10 zumindest
ein #define zu machen
#define MY_VALUE_ADDR  ((void*)0x10)

uint8_t myByte;
 
    myByte = eeprom_read_byte(MY_VALUE_ADDR);

  

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...wie man den ganzen Bereich des EEPROM's auf feste
Adressen legt...

Ich dachte immer das die EEPROM Adressen eh fest vorgegeben sind. Wie 
genau steht im Datenblatt. Auslesen ist eigentlich ganz leicht. Mit dem 
passenden Register wird die Speicherzelle adressiert und dann einfach in 
ein anderes Register reingelesen mit Dem dann weitergearbeitet wird. Wie 
schon geschrieben wurde gibts in den Datenblättern sogar Codebeispiele, 
meistens sogar in Assembler und in C.

bye

Frank

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das EEPROM beschreiben und auslesen krieg ich hin, halt nur nicht von 
einer bestimmten Adresse. Und das steht leider nicht nicht im 
Datenblatt.

Benutze das AVR-Studio mit dem GCC-Compiler. Hab dort die eeprom.h 
eingebunden und benutze die Schreib- und Lesebefehle aus dem 
GCC-Tutorial.

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst doch der Funktion nur als Parameter die Adresse übergeben. Wo 
ist dein Problem? Funktioniert die Adressübergabe nicht?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tim wrote:
> Das EEPROM beschreiben und auslesen krieg ich hin, halt nur nicht von
> einer bestimmten Adresse. Und das steht leider nicht nicht im
> Datenblatt.
>
> Benutze das AVR-Studio mit dem GCC-Compiler. Hab dort die eeprom.h
> eingebunden und benutze die Schreib- und Lesebefehle aus dem
> GCC-Tutorial.

Die Funktion eeprom_read_byte will einfach nur diese
Adresse haben. Mehr nicht. Du hast diese Adresse als
Zahlenwert und musst nur noch dafür sorgen, dass der
Datentyp stimmt. (Siehe weiter oben)


Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Karl Heinz,

funktioniert einwandfrei. Vielen Dank!

Dann kann ich das doch beim Schreiben genauso anwenden. Oder muss ich 
mir da immer ne Variable so definieren:

unsigned int myByte EEMEM;  ?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da auch die eeprom_write_byte- bzw. eeprom_write_word-Funktion die 
Adresse der Speicherzelle übergeben bekommen, geht das 
selbstverständlich auch. Für einen (unsigned) int nimmste dann natürlich 
eeprom_write_word() und eeprom_read_word().

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tim wrote:
> Dann kann ich das doch beim Schreiben genauso anwenden. Oder muss ich
> mir da immer ne Variable so definieren:
>
> unsigned int myByte EEMEM;  ?

Nein musst du nicht.
Du benutzt das genauso wie im Read Fall.

Wenn du die EEMEM Sache benutzt, dann übernimmt
der Compiler für dich die ganze Adressauszählerei
und sorgt dafür, dass es zu keinen Überschneidungen
der 'Variablen' kommt.

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super, Danke! Klappt alles.

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.