Forum: Mikrocontroller und Digitale Elektronik EEPROM beim Mega8


von Philipp (Gast)


Lesenswert?

Hallo

ich versuche nun schon seit einer halben Stunde das EEPROM in meinem
Mega8 hier zum laufen zu bekommen. Ich benutze WinAVR und habe das C
Beispiel aus dem Datenblatt abgetippt. (Seite 20 und 21)

So sieht es ungefähr aus:
...
cli();
ausgabe = EEPROM_read(1);
sei();

Bei Ausgabe kommt immer 255 heraus. Ich habe nicht nur Adresse 1
versucht sondern auch einige andere. Die Funktion zum schreiben zeigt
auch keine Wirkung (EEPROM danach mit Pony Prog gelesen, war alles noch
auf 255)

Dann habe ich am Anfang des EEPROMS einige Bytes auf verschiedene Werte
gesetzt (wieder mit Pony Prog). Und wieder versucht es mit EEPROM_read
zu lesen, aber wieder alles nur 255.

Kann mir jmd helfen? Was kann ich übersehen haben?

Vielen Dank schonmal
Gruß Philipp

von Johannes (Gast)


Lesenswert?

Bist Du sicher, dass Dein Programm die richtigen Adressen für die
EEPROM-Register benutzt?

Ansonsten noch der Hinweis, dass Du normal weder zum Lesen noch zum
Schreiben die Umklammerung mit cli()/sei() brauchst. Das machen die
Compiler-Lib-Funktionen schon intern, sofern es nötig ist (nur beim
Schreiben)...

Gruß
Johannes

von Philipp (Gast)


Lesenswert?

Hier doch nochmal der Code:


unsigned char EEPROM_read(unsigned int uiAddress) {
  while(EECR & (1<<EEWE));

  EEAR = uiAddress;

  EECR |= (1<<EERE);

  return EEDR;
  };


Als Adresse kann ich doch einfach 0 bis 511 einsetzen oder nicht?
EEARL wird ja komplett benutzt und von EEARH nur das erste bit.

Wenn ich die Interrupts vorher nicht abschalte, dann funktioniert es
nicht.

Vielen Dank schonmal
Gruß Philipp

von Philipp (Gast)


Lesenswert?

Naja, wenn ich zuhause bin werd ich mal den ganzen EEPROM mit was
anderem als 0xFF füllen. ist nur so aufwendig das so in Pony Prog zu
ändern. (jmd einen Tipp wie ich einfacher die 512byte fülle?)

Und ich habe vor einige Zeit mal was gehört das man besser den Anfang
des EEPROMs nicht benutzen sollte. Das war im Zusammenhang mit dem
At90S2313. Ist da überhaupt was dran? Wenn ja, gilt es nur für den 2313
oder generell für die AVR EEPROMs?

Vielen Dank Gruß Philipp

von Günter R. (galileo14)


Lesenswert?

Warum verwendest Du nicht die Funktionen und Makros aus der AVR-LIBC
(aus WinAVR)? Dort ist doch schon alles vorhanden, was Du brauchst, und
das funktioniert auch. Schau mal auf S. 15 vom AVR-LIBC-Manula (Vers.
1.4.3).

Günter

von Florian (Gast)


Lesenswert?

Hier ist eine Beschreibung, die funktioniert. Habs grad selber
programmiert.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#EEPROM

Gruß
Flo

von Philipp (Gast)


Lesenswert?

Danke für eure Hilfe. Ich würde es gerne "zu Fuss" zum laufen
bekommen.

Ich glaube ich war auch zu blöd Pony Prog zu benutzen.

Ich habe das EEPROM eingelesen, dann Edit -> EditBufferEnabled
angeklickt. Jetzt konnte ich das eingelesene in Pony Prog bearbeiten.
Habe ein wenig was eingetippt und auf Write EEPROM geklickt. Dann hat
er geschrieben, mit Verify, und gesagt alles wäre ok. Wenn ich wieder
auf Read klicke liest er kurz und an dem Fenster ändert sich auch
nichts.

Schließe ich jetzt aber Pony Prog und starte es neu, dann stehen, nach
dem erneuten lesen, überall wieder 0xFF.

Kann ich den EEPROM so gar nciht mit Pony Prog bearbeiten?

Ich kann ja lange probieren da was auszulesen, wenn ich gar nichts
reingeschrieben hab...

Vielen Dank für eure Hilfe schonmal
Gruß Philipp

von Philipp (Gast)


Lesenswert?

So ich schon wieder

das lesen ging, hab das EEPROM nun mit ner anderen Software über ISP
bearbeitet und das kann ich nun auch auchlesen. Da stand die ganze Zeit
wirklich 0xFF drin, deshalb hab ich das auch gelesen.

Wie das mit Pony Prog ging würde mich trotzdem interessieren.

Gruß Philipp
und dank an alle für die Hilfe

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.