Forum: Mikrocontroller und Digitale Elektronik AVR EEPROM Schreibproblem


von Michael K. (Gast)


Lesenswert?

Hallo Leute,
ich will aus meinem Programm Daten im EEPROM meines ATMega16 an 
vordefinierten Adressen ablegen und von dort auch wieder auslesen. Hier 
mal ein kleines Testprogramm was leider nicht funktioniert:

#include <avr/io.h>
#include <avr/eeprom.h>
#include <inttypes.h>

#ifndef EEMEM
#define EEMEM _attribute_ ((section (".eeprom")))
#endif

void eeprom_write (uint16_t adress, uint8_t ch)
{
  while (EECR & (1 << EEWE))
    ;
  EEAR = adress;
  EEDR = ch;
  EECR |= (1 << EEMWE);
  EECR |= (1 << EEWE);
}

int main ()
{
  uint16_t  adress  = 0x0001;
  uint8_t    data   = 0xCC;

  eeprom_write (adress, data);

  return 0;
}


Die Funktion eeprom_write ist 1:1 aus dem Datenblatt jedoch wenn ich 
nach dem Ausführen des Programms den EEPROM auslesen stehen alle Bytes 
auf FF. Das das Programm ausgeführt wird ist sichergestellt (mit LED 
blinken).
Ich hab das Tutorial auch schon gelesen und das schreiben daraus 
funktioniert auch wunderbar, jedoch würde ich gerne die Adressen vorher 
definieren wo Daten hingeschrieben werden. Das Konstrukt mit den 
"wilden" Arrays gefällt mit nicht so richtig ....
Ist es nicht möglich eine direkte Adresse im EEPROM zu beschreiben?
Grüße,
Michael

von Power (Gast)


Lesenswert?

Benutzt du WinAVR? Da ist eine lib für's EEPROM drin und das Ganze ist 
gut beschrieben.
Das Auslesen des EEPROMs mit AVR-Studio macht manchmal Probleme! 
Versuche mal das EEPROM zuerst zu beschreiben (andere Speicherzelle als 
deine), danach dein Programm laufen lassen (läuft nach Reset eh' neu 
los) und dann das EEPROM auslesen. Dann sollte der Inhalt korrekt 
gelesen werden.

Das scheint noch ein Bug zu sein.

von Michael K. (Gast)


Lesenswert?

Ich nutze das WinAVR 4.12(460).
Wo genau finde ich denn die Lib bzw. die Beschreibung ?
Das mit dem Beschreiben hat ich schon versucht, aber leider ohne Erfolg 
ich sehe immer noch nicht mein geschriebenes Byte..
Lade gerade die neue Version runter 4.13b ....

von johnny.m (Gast)


Lesenswert?

Die lib ist doch in Deinem Code schon eingebunden (eeprom.h)! Die 
Beschreibung (AVR-libc-Dokumentation) wird beim Installieren von WINAVR 
automatisch mitinstalliert...

von johnny.m (Gast)


Lesenswert?

> Ich nutze das WinAVR 4.12(460).
Und das gibts nicht. Vermutlich eher AVRStudio 4.12 b460 mit WINAVR 
V????

von Michael K. (Gast)


Lesenswert?

Stimmt !! Sorry ...

von Michael K. (Gast)


Lesenswert?

Version: WinAVR-20060421

von Michael K. (Gast)


Lesenswert?

Jetzt tuts ! Nach dem Update auf das neue AVRStudio klappts mit dem 
auslesen der Bytes !

Danke an alle !

Grüße,
Michael

von Friedemann K. (bolle)


Lesenswert?

Hallo Leute,

danke für den Tip mit dem E2prom schreiben auf dem atmeg16. Ich bohre da 
schon seit Tagen daran rum. Ist schon schwach, das ATMEL da Beispiele 
ins Datenblatt setzt, die nicht funktionieren. Sonst bin ich schon 
absolut begeistert von den AVR's.

Gruß Friedemann

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.