EEPROM mit Werten Initialsisieren

OP #1187371
Hallo ich habe eine Frage bezüglisch des EEPROMs (ATMega168)

ich speicher in meinem Programm vor dem Auslösen eines Watchdog resets 2 
pin werte ab an denen Relais hängen. Nach dem Reset beschreibe ich die 
Pins wieder mit den zuvor abgespeicherten werten.

Problem ist nun, dass ich beim ersten Ausführen des Codes undefinierte 
Werte im EEPROM habe.

Gibt es im AVRStudio4 eine Möglischkeit bestimmte Adressen auf einen 
bestimmetn Wert zu setzten, der dann aber auch wieder im Programm 
überschrieben werden kann?
1
main(){
2
int relais;
3

4
//an dieser Stelle ist Relais beim ersten durchlauf undefiniert
5
relais = lese_EEPROM_Ralais()
6
}
7

8
ISR(WDT_vect){
9
speicher_relais_ins EEPROM();
10
}


danke Gruß Sticky
Gast #1187372
Ich habe gerade eben ein bischen mit eeprom rumgespielt und was 
hinbekommen.. ich hoffe ich kann dir helfen obwohl ich eigentlich keine 
ahnugn habe was ich da tuhe:
1
#include <avr/eeprom.h>
2
#define E_INIT 23
3
#define E_STOP 57
4

5
.
6
.
7
.
8
//anfang der main schleife
9
if (eeprom_read_byte((uint8_t*)E_INIT)!='T')
10
{
11
eeprom_write_byte((uint8_t*)E_STOP,1); //hier init werte
12

13
eeprom_write_byte((uint8_t*)E_INIT,'T');
14
}

ich hoffe du meinst sowas... diese initialisierung wird nur einmal 
durchgeführt

oben die werte 23 und 57 habe ihc einfach mal so reingetippt kannste 
nehmen was du willst was im bereich des speichers liegt

Gruß
Gast #1187376
Dann schreib es in den header.....

Ich verstehe vermutlich deine Frage nicht, dazu kommt, dass ich nicht 
ganz erkenne wo das hinführen soll. Wenn der EEPROM beim reset gelöscht 
wird wird die initialisierung zu anfang des Programmaufrufs 
initialisiert. Wenn er nicht gelöscht wird nicht.. daten die gelöscht 
sind kannst du nicht wieder abrufen.....
Mit diesen EEPROM anweisungen kannst du über das auschalten des 
microcontrollers hinaus daten speichern....


Also entweder bin ich gerade total daneben oder du solltest dir besser 
noch ein paar C und AVR tutorials/Bücher geben bevor du mit sowas 
weitermachst...
#1187377
Fredy wrote:
> Dann schreib es in den header.....
>
> Ich verstehe vermutlich deine Frage nicht, dazu kommt, dass ich nicht
> ganz erkenne wo das hinführen soll. Wenn der EEPROM beim reset gelöscht
 so wie ich das verstehe, will er berets vor dem allerersten Starten des 
Programms nach dem Aufspielen auf den µC bestimmte Werte im EEPROM 
haben, die eben nur für dieses allererste Starten benutzt werden 
können...

avrdude kann zB auch das EEPROM beschreiben
#1187407
Amir B-a wrote:
> genau das was justus gesagt hat will ich. aber eben mit avr studio mmit
> dem es auch gehen muss.
Mit AVRStudio kann man zunächst mal nur Assembler programmieren. Da das 
oben ach C-Code aussieht, gehe ich mal davon aus, dass Du den WINAVR 
eingebunden hast. In dem Falle hilft Dir das AVR-GCC-Tutorial 
weiter. Da steht, wie man Variablen im EEPROM anlegt und wie man darauf 
zugreift. Stichwort EEMEM...

Die vom Compiler erzeugte .eep-Datei muss dann nur beim Programmieren 
des AVR mit rübergeschoben werden. Das geht aber ganz einfach über den 
Programmier-Dialog im AVRStudio.
OP #1187423
Hallo micha. das ist genau das was ich wiisen wollte.

wie wird die .eep erzeugt?

muss ich die .eep neu anlegen oder wie funzt das?

ic hversteh das prinzip nicht ganz.

(mir ist nur wichtig das die adresse 0 den wert 0 hat.)
#1187431
Amir B-a wrote:
> wie wird die .eep erzeugt?
Das macht der Compiler automatisch, wenn im Code EEPROM-Variablen 
definiert werden.

Der Rest steht im Tut.

Abgesehen davon solltest Du dringendst mal die Funktion Deiner 
Großbuchstaben-Taste überprüfen...
OP #1187434
ich fasse mal zusammen um zu sehen ob ich das verstehe.

ich öffne in meinem projekt eine datei myEEPROM.c (hier steht nicht 
meine main)

binde die im tut angezeigt header ein

und compiliere das alles

und erhalte dann my EEPROM.eep, was ich dann an den µC sende.

nun kann ich in meiner main die speicher adresse auslesen

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.