Forum: Compiler & IDEs EEPROM funktioniert nicht richtig!


von Martin (Gast)


Lesenswert?

Hallo Leute!
Ich arbeite mich gerade in das AVR GCC Tutorial ein und komme beim
Abschnitt 18.3 EEPROM einfach nicht klar.
Es will mir nicht gelingen, Daten aus dem EEPROM richtig zu lesen.
Ich benutze WinAVR-20060125.

Ich habe 4 Variable im EEPROM und 4 globale Variable im SRAM definiert

//Code im Abschnitt der Deklaration
  uint8_t eeT1 EEMEM = 151;
  uint16_t eeT2 EEMEM = 10838;
  uint16_t eeT3 EEMEM = 330;
  uint16_t eeT4 EEMEM = 1260;

  volatile uint8_t T1;
  volatile uint16_t T2, T3, T4;

Die Variablen in SRAM sollen durch die im EEPROM geladen werden

void eepromread(void){
  T1 = eeprom_read_byte(&eeT1);
  T1 = eeprom_read_word(&eeT2);
  T3 = eeprom_read_word(&eeT3);
  T4 = eeprom_read_word(&eeT4);
}

Leider werden die SRAM-Variablen beim Programmstart nur mit Datenmüll 
gefüllt.

Auch das Schreiben in das EEPROM per Programm

void eepromwrite(void){
  eeprom_write_byte(&eeT1, T1);
  eeprom_write_word(&eeT2, T2);
  eeprom_write_word(&eeT3, T3);
  eeprom_write_word(&eeT4, T4);
}

mit anschließenden Auslesen funktioniert nur teilweise.

Wenn ich T1 bis T4 per Programm setze und mit vorgenannter SUB 
eepromwrite()
beschreibe und dann wieder lese, stimmt nur der Inhalt von T3 und T4.
T1 und T2 enthalten Müll.

Ich habe zum Test ein kleines Programm geschrieben und beigefügt. Damit 
kann
man T1 bis T4 über den UART setzen (z. B. mit Eingabe T1=123), mit DA 
(Daten Ausgabe)
auslesen, mit EW (Eeprom Write) beschreiben und mit ER (Eeprom Read) 
zurücklesen.

Was habe ich nur falsch gemacht?


Vielen Dank schon jetzt für die Hilfe.

Martin


von Jörg X. (Gast)


Lesenswert?

In dem Code oben ist ein Schreibfehler:
1
    T1 = eeprom_read_byte(&eeT1);
2
    T1 = eeprom_read_word(&eeT2);// 2. Mal T1
3
    T3 = eeprom_read_word(&eeT3);
ansonsten:
- poste compilierbaren Code
- hast du die Probleme im Simulatioroder "in echt"?
- hast du das .eep-File geflasht ? (bzw. im Sim. geladen)
(- Anhänge gehen hier im Forum verloren, wenn man "Vorschau" klickt)

hth. Jörg

von Martin (Gast)


Lesenswert?

Hallo Jörg,
vielen Dank für Deine schnelle Antwort! Die Probleme sind mit Deiner 
Hilfe gelöst!


Problem 1: EEPROM lesen bei Neustart funktioniert nicht.

Das EEPROM war offensichtlich nicht beschrieben. Ich lade das Programm 
mit Pony Prog und bin davon
ausgegangen, daß bei "OPEN DEVICE FILE" und "WRITE ALL" auch wirklich 
alles geöffnet und geschrieben
wird. Jetzt habe ich gelernt, daß das .eep File separat geöffnet werden 
muß.


Problem 2: Beschreiben des EEPROM im Programm mit anschließendem lesen 
funktioniert nur bei T3 und T4

Das lag am Schreibfehler. Hier wurde uint8_t T1 mit uint16_t T2 
überschrieben, was natürlich nicht
funktionieren kann.

Nochmals meinen Dank!

Gruß Martin

von Jörg X. (Gast)


Lesenswert?

gern  geschehen ;)
den Fehler mit dem .eep-File macht man mal, abe rauch nur ein Mal :)

gruß Jörg

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.