EEPROM mit Werten Initialsisieren

#1187371
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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.
#1187434
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren