Forum: Mikrocontroller und Digitale Elektronik EEPROM mit Werten Initialsisieren


von Amir B. (sticky)


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

von Fredy (Gast)


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ß

von Amir B. (sticky)


Lesenswert?

die initialisierung wird nach jedem reset erneut ausgelöst und ist bei 
dir somit fest auf einen wert.

ich will bereits vor der main-funktion den EEPROM an der Adresse 0 mit 
den wert 0 haben.

von Fredy (Gast)


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

von Justus S. (jussa)


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

von Amir B. (sticky)


Lesenswert?

genau das was justus gesagt hat will ich. aber eben mit avr studio mmit 
dem es auch gehen muss.
kann mir jemand helfen?

von Johannes M. (johnny-m)


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.

von Amir B. (sticky)


Lesenswert?

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

von Johannes M. (johnny-m)


Lesenswert?

Wer ist micha?

von Amir B. (sticky)


Lesenswert?

sorry habe gerade mit einem freund (micha) telefoniert. bin etwas durch.
meinte johannes

von Johannes M. (johnny-m)


Lesenswert?

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

von Amir B. (sticky)


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

von Denis G. (denis)


Lesenswert?

falls du mit dem avr studio arbeitest,
einfach im programmierdialog den eeprom ausleen, die datei im edidor 
öffnen, werte entsprechend ändern und dann wieder über den vorgenannten 
dialog reinschreiben,

von Karl H. (kbuchegg)


Lesenswert?

Und nicht vergessen die Brown Out Detection per Fuse einzuschalten, 
sonst wirst du unter Umständen nicht lange Freude an deinen EEPROM 
Werten haben.

von Amir B. (sticky)


Lesenswert?

Danke für eure Hilfe.

das scheint ein leichter Lösungs ansatz zu sein.

von Amir B. (sticky)


Lesenswert?

ich erahlte beim lesen der *.eep datei folgenden inhalt

:00000001FF

wie gesagt ich will an der Adresse 0 den Wert 0.

Was fange ich mit der Datei an?

Bzw. wie ist die zeile zu interpretieren?

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.