Forum: Mikrocontroller und Digitale Elektronik EEprom lesen und schreiben bei AVR


von Sönke (Gast)


Lesenswert?

Hi ...
Ich möchte Daten (Float-Werte) in den EEProm meines AVR´s schreiben. Die 
Programmiersprache ist C.
Ebenso möchte ich diese Daten bei Bedarf wieder auslesen und verarbeiten 
können.
Mit dem Toturial komme ich nicht ganz klar.

Mfg Sönke

von fnah (Gast)


Lesenswert?

was gibts da zu verstehen? das muss man doch nur rauskopieren und gut.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Block_lesen.2Fschreiben
1
//...
2
   float myFloat = 12.34;
3
 
4
   union {
5
      float r;
6
      uint8_t i[sizeof(float)];
7
   } u;
8
 
9
   u.r = myFloat;
10
   
11
   /* float in EEPROM */
12
   eeprom_write_block(&(u.i),&eeFooFloat,sizeof(float));
13
 
14
   /* float aus EEPROM */
15
   eeprom_read_block(&(u.i),&eeFooFloat,sizeof(float));
16
   /* u.r wieder 12.34 */
17
//...

von Rene Z. (renezimmermann)


Lesenswert?

Hi,

geht nur über einen Umweg da für Float keine Routinen in 'eeprom.h' drin 
sind. Hier mal ohne Nutzung von Union:

#include <avr/eeprom.h>


float myEEpromFloat EEMEM;      // Float Wert in EEprom
float myRamFloat;               // Float Wert im Ram

int main(void){

  // der Variablen im Ram einen Wert zuweisen
  myRamFloat = 27.68;

  // Variable aus dem Ram ins EEprom kopieren
  eeprom_write_block(&myRamFloat,&myEEpromFloat,sizeof(float));

  // Variable aus dem EEprom ins Ram kopieren
  eeprom_read_block(&myRamFloat,&myEEpromFloat,sizeof(float));

}

Gruß Rene

von Sönke (Gast)


Lesenswert?

Hi,
Eine Verständnisfrage:

Was bedeutet folgender Ausdruck:
1
 float myEEpromFloat EEMEM;

vorallem "EEMEM"

Gruß Sönke

von fnah (Gast)


Lesenswert?


von Sönke (Gast)


Lesenswert?

Beim Einbinden des Headers "#include <avr/eeprom.h>" stürzt AVR - Studio 
ab. Kann es sein, dass ich in den Konfigurationen dem Linker diesen 
header noch zugänglich machen muss?

Wenn ja mit welchen Einstellungen?

Gruß Sönke

von Hans (Gast)


Lesenswert?


von Timo (Gast)


Lesenswert?

Danke, nun geht es.

Nun eine Erweiterung. Ich möchte bei Betätigung eines Tasters "Save" den 
Wert einer Variablen ( z.B. 23.12) ins eeprom schreibe.

Mit dem Taster "Read" möchte ich diese wieder lesen. Das klappt auch 
alles super.

Nun möchte ich jedoch folgendes:

Ich möchte ein Array anlegen. Es sollen insgesammt 10 Werte gespeichert 
werden.

Es soll auf dem Display so aussehen:

1. Speicher:    23.12
2. Speicher:    99.23

...

10. Speicher:   11.22

Diese Werte möchte ich über den Taster "Read" aufrufen und verarbeiten. 
Ich möchte z.B. sagen

"Rufe Speicher "3" auf.

Wie reallisiere ich das genau? Bzw. könntet ihr mir beim Ansatz helfen?

Mfg Sönke

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.