EEPROM

Gast #56662
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
Gast #56663
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
Gast #56666
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.
Gast #56667
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
Gast #56668
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
Angehängte Dateien:
Gast #56669
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
Gast #56670
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.