EEPROM Wert von einer bestimmten Adresse ermitteln

Gast #592048
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ß
#592062
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:
1
uint8_t myByte;
2
 
3
    myByte = eeprom_read_byte((void*)0x10);

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

3
uint8_t myByte;
4
 
5
    myByte = eeprom_read_byte(MY_VALUE_ADDR);

  
Gast #592063
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
Gast #592064
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.
#592069
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)

#592109
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren