Forum: Mikrocontroller und Digitale Elektronik EEPROM abspeichern Atmega 8


von Andre (Gast)


Lesenswert?

Hi.

Möchte gerne ein kleines Programm mit einem LC Display machen und ein 
paar Daten auf EEPROM sichen.

Wie ich ein EEprom lesen oder beschreiben kann, weiß ich.

Mir geht es eher darum, wie ich das EEprom beschreibe, ohne es im 
Programmanfang machen zu müssen.

Also wenn ich es immer am Programmanfang machen würde, dann würde im 
EEprom immer das gleiche drin stehen, oder?

Sagen wir mal, im EEprom sind Daten für ein Lauflicht. Das wäre dann das 
Grundprogramm oder das Grundlauflicht. Wenn ich das Lauflicht verändern 
will, dann speichere ich es über die alten EEprom Daten.


Aber wie bekomm ich sie auf EEprom?

von Karl H. (kbuchegg)


Lesenswert?

Normalerweise kann jedes Brennprogramm ein EEPROM beschreiben.

Aber so würde ich das nicht machen.
Ich würde der Schaltung eine RS232 Schnittstelle verpassen.
Ins Programm kommt dann eine 'Konfigurationsmöglichkeit'
über RS232, sodass ich das Lauflicht ganz simpel mit einem
Terminalprogramm interaktiv ändern kann. Dieser Konfigurationsteil
nimmt die neuen Werte an und speichert sie im EEPROM.

von Carsten P. (papa_of_t)


Lesenswert?

Wo kriegst Du denn die neuen Daten her? Liest Du halt am Programmanfang, 
ob schon was drinsteht, wertest das aus und schreibst in Abhängigkeit 
davon den EEPROM neu. Im laufenden Programm kannst Du die Daten seriall 
per UART / PC empfangen und nach Empfang neu schreiben.

von Frank (Gast)


Lesenswert?

was hat eigentlich der Schreibvorgang in EEPROM mit dem Programmstart zu 
tun? Mir wars bisher eigentlich völlig Wurst wo in meinem Programmcode 
ich ins EEPROM schreibe oder daraus lese und meinen Controllern auch.

bye

Frank

von Peter-neu-ulm (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Andre,

unter  studio4, in Assembler, habe ich es folgendermaßen gelöst:

nach dem Assembler-statement .eseg den EEPROM-Inhalt mit .db 
hinschreiben.
Beim Assemblieren entsteht zusätzlich ein x.eep-file.

Da beim Programmieren mit dem hex-file gibt es ein obligatorisches 
chip-erase. Erst nach dem .hex file kann man das .eep file 
einprogrammieren.

Schau dir mal das Beispiel im Anhang an.

von Hannes L. (hannes)


Lesenswert?

> Da beim Programmieren mit dem hex-file gibt es ein obligatorisches
> chip-erase. Erst nach dem .hex file kann man das .eep file
> einprogrammieren.

...was sich bei vielen neueren AVRs per Fuse deaktivieren lässt.

Wenn die "Daten" (Lauflicht-Bitmuster) schon zur Entwurfszeit 
feststehen, dann kann man sie auch in einer Flash-Tabelle speichern. Das 
EEPROM ist eigentlich nur interessant, wenn man Daten zur Laufzeit 
ändern möchte (oder wenn es eng im Flash wird, was bei einem Lauflicht 
im Mega8 unwahrscheinlich ist). Die dazu erforderlichen Routinen für 
EEP-Zugriff sind in den Datenblättern und Appnotes recht brauchbar 
beschrieben.

...

von Manni (Gast)


Angehängte Dateien:

Lesenswert?

Das gleiche Problem habe ich auch .....

Nutze AVR Studio 4.12 mit STK500 und serieller ISP Programmierung.

Problem ist:
Wenn neues Programm in den Flash geschrieben wird, wird automatisch das 
EEPROM gelöscht, was ich aber nicht möchte.

Daraufhin habe ich das Flag "Erase Device Before Programming" gelöscht 
(siehe Bild 1). Das Programmieren des Flash funktioniert aber nicht 
mehr, wenn ich das Programm neu compiliert habe (siehe Fehlermeldung 
Bild 2).

Kann mir jemand sagen, warum ich den Flash nicht einfach überschreiben 
kann, ohne das EEPROM gleichtzeitig zu löschen ?

Gruß
Manni



von Manni (Gast)


Angehängte Dateien:

Lesenswert?

Und hier Bild 2 mit der Fehlermeldung

von Hannes L. (hannes)


Lesenswert?

Manni wrote:
> Das gleiche Problem habe ich auch .....
>
> Nutze AVR Studio 4.12 mit STK500 und serieller ISP Programmierung.
>
> Problem ist:
> Wenn neues Programm in den Flash geschrieben wird, wird automatisch das
> EEPROM gelöscht, was ich aber nicht möchte.
>
> Daraufhin habe ich das Flag "Erase Device Before Programming" gelöscht

Das ist falsch!
Gehe auf Fuses und markiere preserve eeprom (oder so ähnlich, ich habe 
das jetzt nicht vor mir).

> (siehe Bild 1). Das Programmieren des Flash funktioniert aber nicht
> mehr, wenn ich das Programm neu compiliert habe (siehe Fehlermeldung
> Bild 2).
>
> Kann mir jemand sagen, warum ich den Flash nicht einfach überschreiben
> kann, ohne das EEPROM gleichtzeitig zu löschen ?

Flash lässt sich nur "im Ganzen" löschen, jedes Schreiben zieht die Bits 
bis zum nächsten Löschen nach 0. EEPROM lässt sich in beide Richtungen 
ändern, nach 1 und nach 0.

>
> Gruß
> Manni

...

von Manni (Gast)


Lesenswert?

Hannes,

das ging ja wie der Blitz. Problem gelöst !!

Nur nebenbei: bei den Fuse Bits bin ich immer etwas zurückhaltend -- aus 
bekannten Gründen -- deshalb hab' dort bisher noch nicht rumgefummelt.

Besten Dank !!
Manni

von Hannes L. (hannes)


Lesenswert?

Manni wrote:
> bei den Fuse Bits bin ich immer etwas zurückhaltend -- aus
> bekannten Gründen -- deshalb hab' dort bisher noch nicht rumgefummelt.

Das ist ja ok.
Ich empfehle ja auch jedem Anfänger, die Finger erstmal von den Fusebits 
zu lassen, bis es sich etwas eingearbeitet hat und das dazu 
erforderliche Wissen und Verständnis hat. Aber irgendwann will man mehr, 
dann muss es sein, dann führt kein Weg an den Fuses vorbei. ;-)

...

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.