www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM schreiben Atmega8


Autor: stefan08 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe eine Frage undzwar, ich würde gerne über den PC also beim 
Programmieren in den EEPROM meines AtMega32 eine Zahl reinschreiben, sie 
ich im Programm selbst am AVR dann nurmehr auslese, und nur unter 
bestimmten umständen möchte ich die Zahl überschreiben und auch danach 
die überschriebene Zahl beibehalten auch wenn der AVR Stromlos ist ...

Nun kenne ich die Befehle um im Programm eine variable im EEPROM zu 
deklarieren, den EEPROM zu lesen und zu schreiben

Aber ich möchte ja nicht jedesmal den EEPROM beim Programmstart 
beschreiben, sondern ich möchte das ich den EEPROM einmal mit der Zahl 
beschreibe und danach nurmehr lese bzw. überschreibe.

Ich verstehe nicht ganz wie genau das funktioniert

Kann mir jemand helfen?

Danke
stefan08

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine Kristallkugel sagt, Du programmierst in C, aber die Batterien 
sollte ich auch mal wieder wechseln:

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Autor: stefan08 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh ja sorry klar programmiere ich in C ...

Hab mir das Tut schon sooo oft angesehen, komm aber ned drauf wie ich 
das machen soll... wie gesagt variablen deklarieren aus eeprom 
lesen/schreiben ist klar ...

Aber wie ich das Problem wie schon geschrieben angeh weiß ich nicht

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte gehe das Tutorial in Bezug auf das EEPROM lesen/schreiben mal 
Punkt für Punkt durch und frage dann, was genau Du nicht verstehst.

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist Dir klar, wie Du einmalig per PC das EEPROM beschreibst?

Autor: stefan08 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich, wie gesagt, ich versteh wie ich lese, wie ich schreibe...

Aber!!!

Wie kann ich einen Wert einmal ins EEPROM schreiben ( diese einmalige 
schreiben darf ja nicht in dem Programm ansich erfolgen ) und danach 
nurmehr rauslesen, aber nur unter best. umständen überschreiben...

weißt du nun wie ich das meine?

Autor: stefan08 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein genau das ist mir nicht klar wie ich einmalig den EEPROM per PC 
beschreibe

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Nein genau das ist mir nicht klar wie ich einmalig den EEPROM per PC
>beschreibe

OK. Die genaue Vorgehensweise hängt davon ab, welche 
Entwicklungsumgebung Du benutzt. Falls Du AVRStudio verwendest, gibt es 
im Dialog zum Programmieren auch den Punkt EERPOM schreiben. Dort musst 
Du ein HEX-File angeben und nach Druck auf "programmieren" schreibt er 
dieses HEX-File.


Wenn es einen (oder mehrere) unmögliche Werte gibt, dann geht es auch 
über das Programm auf dem uC. Du testest einfach ob der unmögliche Wert 
drinsteht und programmierst dann einen der möglichen Werte.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das macht dein Brennprogramm.

Im C Code markierst du die Variebale als EEMEM und gibst ihr einen Wert. 
Der Compiler, bzw die Toolchain erstellt daraus ein weiteres Hex-File, 
welches dein Brennprogramm in den µC schiesst.

Autor: stefan08 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja also so wie hier:
deklaration:
uint8_t eeFooByte EEMEM = 59;

lesen:
myByte = eeprom_read_byte(&eeFooByte);

nur wird ja jedesmal AVR neu starten die Zahl 59 erneut ins EEPROM 
geschrieben oder ?

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na, Karl Heinz, jetzt bist Du mal zu spät. ;-)

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>nur wird ja jedesmal AVR neu starten die Zahl 59 erneut ins EEPROM
>geschrieben oder ?

Nur, wenn Du wieder den Originalwert haben willst. Oder was meinst Du 
mit "jedesmal". Ansonsten kannst Du per Fuse einstellen, das beim 
löschen des Flashs das EEPROM nicht mit gelöscht wird.
Welcher Prozessor?

Autor: stefan08 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AtMega32 wie oben schon erwähnt.

Ich meine wenn ich den AVR Sromlos schalte, und ihn wieder neu 
einschalte. Führt er doch die variablendeklaration in den EEPROM neu aus 
und schreibt mir den Wert "59" wieder in das EEPROM oder?

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Deine SW auf dem uC den Wert verändert hat und Du wieder den 
Originalwert haben willst, dann schon: Dann musst Du das Hex-File erneut 
reinbrennen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
stefan08 schrieb:
> AtMega32 wie oben schon erwähnt.
>
> Ich meine wenn ich den AVR Sromlos schalte, und ihn wieder neu
> einschalte. Führt er doch die variablendeklaration in den EEPROM neu aus
> und schreibt mir den Wert "59" wieder in das EEPROM oder?


Nein

Die Werte, die du hier als Initialisierungen angibst werden gesammelt, 
landen in einem extra Hex-File und mussen von dir mit dem Brennprogramm 
übertragen werden.

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry. Habe ich überlesen mit dem uC.

>nur wird ja jedesmal AVR neu starten die Zahl 59 erneut ins EEPROM
>geschrieben oder ?
Nein. Die Deklaration ist nur für den Compiler. Er erzeugt daraus die 
Belegung für das EEPROM und den Inhalt der HEX-Datei für das EEPROM.

Wenn Du den Prozessor neu startest, wird nichts im EEPROM veränder nur 
weil es im Quelltext mit einem bestimmten Startwert initialisiert wurde.
Nur, wenn Dein Programm das so will wird der Wert nochmal verändert.

Autor: stefan08 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso...  ok, das ändert das natürlich, aber ich habe gestern Abend das 
genauso versucht habe also die Variable deklariert und mit = 59 gleich 
den Wert reingeschrieben, gleich daraus habe ich sie ausgelesen und es 
stand der wert "255" drin. Erst wenn ich den zusätzlichen Befehl für 
schreiben benutzt habe, stand 59 drin.

Das ist doch nicht normal oder?

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Karl Heinz : Uääääh.

@ stefan08

Anders, ausgedrückt, der Startwert für das EEPROM wird nur dann wieder 
auf den Initialisierungswert gesetzt, falls und wenn Du das HEX-File für 
das EEPROM erneut reinbrennst.

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Das ist doch nicht normal oder?

Nein. Und man müsste mal klären wie Du festgestellt hast, das der Wert 
255 drinstand. Hast Du das im Simulator getestet oder per Ausgabe oder 
wie?

Man müsste mal den kompletten Quelltext sehen, bei dem das Problem 
auftrat. Wahrscheinlich hast Du den aber nicht mehr, oder?

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht hattest Du auch nur vergessen das EEPROM-HEX-File zu brennen?

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dabei musst Du auch auf die Reihenfolge achten:
1. Das FLASH programmieren
2. Das EEPROM programmieren

Falls nämlich die oben genannte Fuse nicht gesetzt ist, wird bei jedem 
Flashen das EEPROM mit gelöscht.

Autor: stefan08 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, das macht PonyProg eh von selbst, das er zuerst den Flash und dann 
den EEPROM beschreibt. Also müsste das eigentlich passen.

Ausgabe ist über ein angeschlossenes LCD, deshalb hab ich gewusst das 
der Wert 255 in dem EEPROM stand.

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, war mal tanken.

>Ausgabe ist über ein angeschlossenes LCD, deshalb hab ich gewusst das
>der Wert 255 in dem EEPROM stand.
Na ja. Das kann also, wiegesagt, ganz verschiedene Ursachen gehabt 
haben.
Wenn es aber jetzt funktioniert, dann willst Du das vielleicht auf sich 
beruhen lassen. Falls nicht, werden wir ohne den Sourcecode, der genau 
diesen Fehler zeigt, nicht weiter kommen.

Autor: stefan08 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja es funktioniert nun alles, war wohl ein Fehler beim Programmieren!

Danke!

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.