mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM mit Werten Initialsisieren


Autor: Amir B-a (sticky)
Datum:

Bewertung
0 lesenswert
nicht 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?
main(){
int relais;

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

ISR(WDT_vect){
speicher_relais_ins EEPROM();
}


danke Gruß Sticky

Autor: Fredy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <avr/eeprom.h>
#define E_INIT 23
#define E_STOP 57

.
.
.
//anfang der main schleife
if (eeprom_read_byte((uint8_t*)E_INIT)!='T')
{
eeprom_write_byte((uint8_t*)E_STOP,1); //hier init werte

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

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ß

Autor: Amir B-a (sticky)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fredy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Amir B-a (sticky)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Amir B-a (sticky)
Datum:

Bewertung
0 lesenswert
nicht 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.)

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wer ist micha?

Autor: Amir B-a (sticky)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Amir B-a (sticky)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Denis G: (denis)
Datum:

Bewertung
0 lesenswert
nicht 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,

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Amir B-a (sticky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Hilfe.

das scheint ein leichter Lösungs ansatz zu sein.

Autor: Amir B-a (sticky)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.