Forum: Mikrocontroller und Digitale Elektronik EEPROM


von dag (Gast)


Lesenswert?

Guten Tag,
ich arbeite mit dem AT90S4433.

Ich habe schon einiges gemacht, aber noch nie etwas mit dem EEPROM.
Daher meine Frage, was muß ich tun, damit ich werte in das EEPROM
reinschreiben und wieder rauslesen kann.
Eigentlich möchte ich im EEPROM eine Konstante ablegen,
die ich dann in meinem Programm verwenden will. (zB. mit ihr rechnen)
Desweiteren möchte ich über die UART, wenn's geht, die Konstante
ändern können.

Wenn jemand ein kleines Beispiel parat hat wäre ich sehr dankbar.

Ich arbeite mit CodeVision.
Bin aber über jede Hilfe dankbar.

Danke

von Florian Pfanner (Gast)


Lesenswert?

Schau mal in die Hilfe von CodeVision. Dort ist folgendes beschrieben:
Accessing the AVR internal EEPROM is accomplished using global
variables, preceded by the keyword eeprom.

Example:

/* The value 1 is stored in the EEPROM during chip programming */

eeprom int alfa=1;

eeprom char beta;

eeprom long array1[5];

/* The string is stored in the EEPROM during chip programming */

eeprom char string[]=”Hello”;

void main(void) {
int i;

/* Pointer to EEPROM */
int eeprom *ptr_to_eeprom;

/* Write directly the value 0x55 to the EEPROM */
alfa=0x55;

/* or indirectly by using a pointer */

ptr_to_eeprom=&alfa;

*ptr_to_eeprom=0x55;

/* Read directly the value from the EEPROM */
i=alfa;
/* or indirectly by using a pointer */
i=*ptr_to_eeprom;
}

Pointers to the EEPROM always use 16 bits.

Du musst also nur das Schlüsselwort EEPROM verwenden.
Gruß, Florian

von dag (Gast)


Lesenswert?

Danke,
aber das habe ich auch schon gelesen.
hilft mir aber nicht recht weiter.

werde es aber noch mal gründlich lesen.

Danke

von Frankl (Gast)


Lesenswert?

Es gibt auch Datenblätter die man lesen kann.

von dag (Gast)


Lesenswert?

Danke,
aber große hilfen sind das nicht.
Ich habs jetzt schon geschaft, das eine String im EEPROM ist.
Leider kann ich diesen aber nicht auslesen und dann in ein int
umwandeln.

Wäre nett, Ihr mir helfen könntet.

von dag (Gast)


Lesenswert?

Nochmal
hab also das hier geschrieben:

flash char f[]="5";
#pragma warn-
eeprom char e[16];
#pragma warn+
char r[16];

void main(void)
{
// Declare your local variables here

char flash *ptr_to_flash;
char eeprom *ptr_to_eeprom;
char *ptr_to_ram;

// copy the string f from FLASH to
// the string e in EEPROM
ptr_to_flash=f;
ptr_to_eeprom=e;
while (*ptr_to_flash)
      *ptr_to_eeprom++=*ptr_to_flash++;

// copy the string e from EEPROM to
// the string r in RAM
ptr_to_eeprom=e;
ptr_to_ram=r;
while (*ptr_to_eeprom)
      *ptr_to_ram++=*ptr_to_eeprom++;

while (1)
      {
      // Place your code here
int a;
a=(int) (r);
PORTB=a;
      };

sollte jetzt nicht die 5 binär auf meinem am PORTB befindlichen LED's
angezeigt werden?

Danke

von Florian Pfanner (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

hab mal dein Programm angeschaut und ein bischen umgeschrieben. Dein
Fehler war (meine ich), dass du in der letzten while-Schleife a mit der
Adresse von r ladest und nicht den inhalt von r. Das Programm im Anhang
funktioniert.

Frage: Was soll das Programm denn bringen? - Die Daten im EEPROM werden
beim Programmstart aus dem Flash geholt. Und dann aus dem EEPROM ins
RAM geschrieben. Wieso nicht gleich vom Flash ins RAM?

Gruß, Florian

von dag (Gast)


Lesenswert?

Danke,
das Programm ist nur ein ein Test für mich,
damit ich das Schreiben und Lesen des EEPROM verstehe und üben kann.

Leider funktioniert es immer noch nicht.
Meine LED's zeigen mir eine 8 an.
Wenn ich aber das EEPROM auslese mit Meridian,
steht dort eine 5 bzw eine 35 (ASCII)

Trotzdem Danke

von Florian Pfanner (Gast)


Lesenswert?

Also bei mir im Simulator (AVR-Studio 4) funktioniert das. Der PORTB wir
auf 53 (ASCII: 5) gesetzt.
Was noch sein könnte ist, dass das DDRB-Register nicht gesetzt ist.
Wenn du den PIN/PORT als Ausgang verwenden willst, so musst du das
DDR-Register entsprechend setzten (1 = Ausgang, 0 = Eingang)

Gruß, Florian

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.