www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM


Autor: dag (Gast)
Datum:

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

Autor: Florian Pfanner (Gast)
Datum:

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

Autor: dag (Gast)
Datum:

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

werde es aber noch mal gründlich lesen.

Danke

Autor: Frankl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt auch Datenblätter die man lesen kann.

Autor: dag (Gast)
Datum:

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

Autor: dag (Gast)
Datum:

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

Autor: Florian Pfanner (Gast)
Datum:
Angehängte Dateien:

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

Autor: dag (Gast)
Datum:

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

Autor: Florian Pfanner (Gast)
Datum:

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

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.