EEPROM abspeichern Atmega 8

Gast #491164
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?
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.
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.
Gast
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
Gast
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.
Angehängte Dateien:
> 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.

...
Gast
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


Angehängte Dateien:
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

...
Gast
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
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. ;-)

...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.